随笔 - 16  文章 - 0  评论 - 5  阅读 - 17711

sqlserver 索引优化 CPU占用过高 执行分析 服务器检查

1. 管理公司一台服务器,上面放的东西挺多的.有一天有个哥们告诉我现在程序卡的厉害.我给他说,是时候读点优化的书了.别一天到晚没个正形,现在写的程序卡的跑不动.他说我本地

是好好的,跑的很快.我说别扯那么多没用的,服务器不比你的本子强得多.待洒家上去看看.不看不知道一看吓一跳,CPU占用在95上下.开个程序是不卡,可整点有些时间是卡的一匹.这就令人很难受了.

本来服务器上也没有什么,就一个网站和几个数据库.那一个个分析吧,打开任务管理器和资源监视器,CPU占用达到93,这个还是普通,有时间到98 99.

2. 这不要了亲命了吗,打开资源监视器看看什么占用的最多吧.一看果然是数据库占用最多,数据服务占用过大

 

这个为了重现占用过高,我把自己建的索引都删除掉后,sqlservr.exe立马成为,人群中最靓的仔.占用独占大头.看来只有试出来绝招了.作为面向浏览器编程的程序员,首先搜索一下.网上还真有建设性意见.都说是索引缺失

还贴心的给了一段查询索引的语句.把查出的结果做非聚集索引,就可以了.贴上代码.

复制代码
SELECT  TOP 10 
        [Total Cost]  = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0) 
        , avg_user_impact
        , TableName = statement
        , [EqualityUsage] = equality_columns 
        , [InequalityUsage] = inequality_columns
        , [Include Cloumns] = included_columns
FROM        sys.dm_db_missing_index_groups g 
INNER JOIN    sys.dm_db_missing_index_group_stats s 
       ON s.group_handle = g.index_group_handle 
INNER JOIN    sys.dm_db_missing_index_details d 
       ON d.index_handle = g.index_handle
ORDER BY [Total Cost] DESC;
复制代码

 

微软名字起的也很直白,直接叫missing_index,就是sqlserver 经过分析认为这些字段处理和查询是最耗时的,最好在 EqualityUsage上包含的字段上加个非聚集索引.前几个用时是后几名的好几个数量级.

加了索引立马飞起.

现在优化过,耗时都在一个数量级.如果没有优化是不同的几个数量级.

 

posted on   black2bi  阅读(1126)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示