因为我是一个开发人员,我是我的开发计算机上的SqlServer的用户,我很less看到发生了什么事在服务器上。
但在这个项目中,客户端也pipe理自己的生产SqlServer,有时我们看到机器是“忙”。
而在忙碌的时候,我的意思是100%CPU的时间超过了30秒。 所以首先,这是正常的行为,当一台服务器正常运行时,它有时会将所有内核设置为100%?
正如我们(非sql专家)所断定的那样,我们想要检查“sql server在干什么?
在同一个服务器上可能有6个应用程序运行,有些会每5分钟运行一次,一个是连续连接的网站,一个是每分钟计算一次数据。
所以当CPU处于100%时,我们如何检查哪个应用程序导致了这个问题呢?
我们可以使用sql profiler检查发送到sql server的内容,但是包含太多的行,我们不知道从哪里开始分析。
有没有办法让我们开始?
(就像你有时候在家里玩的那样:你什么也没做,CPU是50%,你听到了硬盘的咔哒声,你想:你在干什么!?)
服务器是2台机器集群中的一台(一台使用,一台故障转移),两个四核与16GB的RAM。
所以首先,这是正常的行为,当一台服务器正常运行时,它有时会将所有内核设置为100%?
作为一名开发人员,您应该知道,唯一的答案就是“取决于”。 是否有可能一个进程耗尽了所有的CPU大量的时间 – 猜猜看,答案是肯定的。
所以,问题大部分是 – 什么是SQL Server在那里(和其他工具,找出来)。 连接,看什么SQL语句执行了多久。
所以当CPU处于100%时,我们如何检查哪个应用程序导致了这个问题呢?
使用SA帐户进行连接,查看dynamic视图以了解当前正在处理的SQL Server的状态。 可能附上一个痕迹。
但首先确保它是SQL Server。 对于一个SQL Server来说,绑定CPU是非常罕见的。 第一个瓶颈通常是光盘子系统。
使用SQL Profiler可以方便地过滤掉噪音 – 添加一个filter,只显示花费超过x秒的语句执行。 这样,你可以发现更长的运行的东西,并错过了所有完成相当愉快的交易。
在很多情况下,更简单的方法是查看SQL活动监视器(或执行sp_who2),当您处于100%CPU时间的某个时间段。 浏览列出的连接以查看活动的内容。 你看到的东西在等待吗? 那里的物品是否被堵塞?如果是的话,什么是堵塞?
如果你不能把问题归结为一个特定的应用程序或一组语句,那么你可以开始深入到运行性能监视器来查看一些计数器来尝试发现硬件瓶颈或可能的故障酿造。
dynamic视图还提供了一个方便的途径来查询正在发生的事情。
那么也许看看这里的一些提示。
如果您正在使用SQL Server 2005或更高版本(我假设您基于您的标记),则可以使用SQL Server数据pipe理视图(通常称为DMV)。 这些将会给你一个关于你的系统正在发生的事情的全面的观点。 在您的具体情况下,您可能需要运行以下查询(或其中的一些分支):
SELECT total_physical_reads,total_logical_reads,total_logical_writes,execution_count,total_worker_time,total_elapsed_time,total_elapsed_time / execution_count avg_elapsed_time,creation_time,last_execution_time,st.text
FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle)st ORDER BY total_elapsed_time / execution_count DESC;
– order by子句将按平均首先经过的时间sorting。
HTH,丹
也许是一个很长的时间,但是MySQL有一个叫做慢速查询日志的function,logging任何需要超过1秒(可configuration)执行的查询。 可能SqlServer具有相同的function?
使用慢速查询日志可以确定是否有任何查询在您的系统上运行缓慢,或者至less可以validation您没有。