Rerds SQL server的监控指标里,“每秒SQL编译”是什么意思?
1. 每秒SQL编译是指:每秒钟发生在SQL Server内部的语句编译的数量。因为,每个语句在执行之前,都要经过编译过程。这个过程,SQL Server会根据统计信息来找到一个最优的执行路径(叫着执行计划),然后会将编译好的执行计划缓存到内存中。
2. 可能导致每秒SQL编译急速升高的原因有很多种,比如:
a. 可用内存不足。当SQL Server认为系统可用内存不足时,会清理执行计划缓存来换取可用内存。清理执行计划以后的执行语句,会导致SQL编译
b. 用户大查询。用户的大查询挤压系统可用内存。比如:系统给SQL Server的可用内存为1GB,但是用户的查询需要1.5GB的数据量,SQL Server需要额外获得500MB的内存空间,导致上面讲得可用内存不足,清理执行计划的动作。
c. 用户自己发起了清空执行计划缓存的命令。
d. 用户发起了重启SQL Server服务的动作以后,原因和a相似。
e. 用户发起了HA切换,主备切换以后,用户连接到了备库,执行SQL语句需要重新编译
.....
等等情况。