sql-server - 为什么计算一个执行计划需要这么长时间?
问题描述
我有一个问题,当我第一次运行我的查询(选择查询)后,某些表的重建或更新统计信息完成时,它运行得太慢,这个查询的持续时间约为 30 分钟,但在那之后当我运行它再次持续时间约为3秒,如何解决?
我在查询中设置了统计 IO 并得到了这个结果:
- 第二次
表'table1'。扫描计数 42,逻辑读取 963118,物理读取 0,预读读取 274,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
- 第一次
表'table1'。扫描计数 42,逻辑读取 977019,物理读取 1143,预读读取 946797,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
解决方案
为什么计算一个执行计划需要这么长时间?
为什么你认为它在计算执行计划?
它从磁盘读取的“第一次”:read-ahead reads 946797
.
预读可能高达 512 字节,因此 946,797 次预读在 30 分钟内平均为 500 IO/秒和高达 260MB/秒,任何一个都可能与您的 IO 系统可以提供的一样多。因此,这些预读可能会占整个 30 分钟的执行时间。
第二次数据几乎都在内存中。
推荐阅读
- css - 如何在网站上使用 SVG 作为背景?
- git - git stash push filename 完成后如何查看 git stash 修改
- swift - 如何控制我的 UITextView 的右边距
- firebase - firebase设置后flutter ios应用程序崩溃
- python - 将重复过滤的 json 输出转换回 json 对象?
- angular - HTML中的RXJS异步管道运算符不触发复杂查询
- tfs - 在任务积压板上重新组合错误和任务状态
- apache-spark - PySpark UDF 无法识别参数数量
- sql-server - 将插入的记录与最新的记录目标表连接起来
- mercurial - 如何识别多点文件类型以进行 sublime 语法选择