一、问题概述
问题大概是这样的,有一个功能页面经常查询超时,有时候就算能查询出来也要很长的时间,但是有时又会很快。遇到的这种问题在排除掉网络原因之后基本上可以从查询语句上去找原因。
编译查询SQL语句和查询进程等待结果如下:
1.进程等待
2.编译查询
问题分析:
1.等待类型为SOS_SCHEDULER_YIELD并且CPU时长很长
2.而且查询时长基本上都是消耗在编译这块,实际的查询时长不到一秒。
SOS_SCHEDULER_YIELD等待是SQL Server OS调度这块的线程之间的切换的等待。
这里出于不便没有把SQL语句贴上,实际的SQL语句单单子查询就达60多个,查询语句达到200行,导致生成执行计划的时间过长。单个子查询很简单。
二、解决方案
出现上面的这个原因是由于查询语句子查询太多导致编译时间过长,解决办法可以将每一个子查询单独查询赋值到变量,或者把子查询冗余处理。
备注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。 《欢迎交流讨论》 |