今天突然发现sqlservr.exe 占用较大CPU,用SQL Server Profiler 监控发现部分指令的 CPU, Reads的值比较大,开始怀疑是应用软件的问题,后来用MSSMS直接查询也是一样的问题,请教下是什么原因引起的
如下图:
------解决思路----------------------
这个查询返回的结果集很大吗?
表结构,查询语句?
------解决思路----------------------
你问下整个项目团队,看有多少个功能需要查询这个表的数据,如果很多,是否考虑预加载到服务器的内存供应用程序用,而不要都从数据库读
------解决思路----------------------
你这个 SN 这列的数据类型是什么? 怀疑是 int 型,你查询时,使用了 sn = '12345' 这样的语句,产生了隐性数据转换。
------解决思路----------------------
--20个累计最耗CPU的语句
select top 20 substring(textdata,1,200),count(*),SUM(cpu),SUM(cpu) / COUNT(*)
from sql_test(nolock)
where textdata is not null group by substring(textdata,1,200) order by SUM(cpu) desc
--前20个最耗CPU的单个语句
select top 20 * from sql_test(nolock) where textdata is not null order by cpu desc
把事件探查器的数据保存到跟踪表,然后查一下,看看是哪些语句占cpu。然后进行处理!
------解决思路----------------------
你想做什么?
数据库最大的瓶颈是硬盘IO,加索引就是通过利用内存/CPU达到减少硬盘IO,从而提高性能。
所以对数据库服务器而言,能够重复利用内存/CPU是好事。硬盘IO繁忙而内存/CPU空闲是坏事。