WD1X.COM - 问答一下,轻松解决,电脑应用解决专家
主板显卡CPU内存显示器
硬盘维修显卡维修显示器维修
注册表系统命令DOS命令Win8
存储光存储鼠标键盘
内存维修打印机维修
WinXPWin7Win11Linux
硬件综合机箱电源散热器手机数码
主板维修CPU维修键盘鼠标维修
Word教程Excel教程PowerPointWPS
网络工具系统工具图像工具
数据库javascript服务器
PHP教程CSS教程XML教程

一次SQL Server调优经历

更新时间:2013-09-05 13:08 作者:佚名点击:

前段时间数据库健康检查发现SQL Server服务器的idle时间变少,IO还是比较空闲,估计是遇到了高CPU占用的语句了。

介绍一下背景,我们公司负责运维N多的应有系统,负责提供良好的软、硬件环境,至于应用的开发质量,我们就无能为力了

解决这个问题,我的思路是:

  1. 找出CPU占用最大的语句。
  2. 分析查询计划。
  3. 优化。

1、找出语句

使用SQL Server自带的性能报表(不是报表服务),找出CPU占用最大的语句。如图1所示

图1 性能报表

我选取了“性能-按总CPU时间排在前面的查询”,得出以下两张报表,如图2所示:

图2 性能-按总CPU时间排在前面的查询

在报表中不能直接把语句Copy出来,非得让我另存为Excel才能Copy语句;而且经常标示不了是语句属于哪个数据库,不爽 :( 。

费了我九牛二虎之力才找出该条语句在哪个数据库执行,然后马上备份数据库,在另一个非生产数据库上面还原,创造实验环境。

废话少说,我把语句Copy出来,顺便整理了一下格式。如下:

select * 
from network_listen 
where 
node_code in 
    (

     select distinct node_code 
     from view_Log_Network_circsByUnit 
     where status='1' 
    )  
or 
node_code= 
    ( 
     select top 1 nodeCode 
     from TransmissionUnit_LocalInfo 
    )  
and 
node_code<> 
    ( 
     select parentNodeCode 
     from TransmissionUnit_RouterInfo 
     where nodeCode= 
            ( 
             select top 1 nodeCode 
             from TransmissionUnit_LocalInfo 
            ) 
    )

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
你可能感兴趣的内容