SQLServer 2016之后的触发统计信息自动更新阈值算法变化
  4fC8pwYp1Qxy 4天前 20 0

之前吐槽了很多年的统计信息自动更新阈值算法(操蛋的500 + (0.20 * n)),其实早在SQLServer 2016中就有优化过了,一直没有注意这个细节,汗颜!
https://www.cnblogs.com/wy123/p/5790855.html
https://www.cnblogs.com/wy123/p/5875237.html

参考官方文档:https://learn.microsoft.com/en-us/sql/relational-databases/statistics/statistics?view=sql-server-ver16

 

最显著的变化,在SQLServer 2016之后,表行数大于500之后:MIN ( 500 + (0.20 * n), SQRT(1,000 * n) )

Table type Table cardinality (n) Recompilation threshold (# modifications)
Temporary n < 6 6
Temporary 6 <= n <= 500 500
Permanent n <= 500 500
Temporary or permanent n > 500 MIN ( 500 + (0.20 * n), SQRT(1,000 * n) )

根据上述算法,可以发现,
1,算法修改之前,触发统计信息自动更新的值,是随着表的行数的变化为一条严格的一次函数500 + (0.20 * n)
2,算法修改之后,在表的行数超过200W之后,更倾向于使用SQRT(1,000 * n)这一新的算法
3,算法修改之后,更倾向于使用SQRT(1,000 * n)是一条随着表的行数的变化,波动率较低的曲线,也就是意味着更倾向于在一个较小的变化之后触发统计信息自动更新。

 

根据 500 + (0.20 * n),和SQRT(1,000 * n) 两个公式计算出来触发统计信息自动更新的阈值

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 4天前 0

暂无评论

推荐阅读
  QNciO4k8wlAw   2024年08月07日   42   0   0 SQL Server
  IYkkJ2eDW1ug   2024年08月07日   50   0   0 SQL Server
4fC8pwYp1Qxy