0 sql-server filegroups sql-server-agent query-performance
多年来,一直有一个长时间运行的 SQL 代理作业需要近两个小时才能完成。大约两周前,出于一个小小的突发奇想,决定改变相关数据库的增长率。此后,这项工作在不到 30 分钟的时间内就完成了。改变日志的增长率会强制生成新的执行计划。我只是好奇 SQL Server 内部发生了什么,这会导致更快的运行时间。
谢谢
我只是好奇 SQL Server 内部发生了什么,这会导致更快的运行时间。
当查询正在运行并且事务日志文件需要增长时,会发生一堆事情,这将不可避免地减慢查询的总运行时间。
这些事项的非详尽清单包括:
如果此作业确实生成了大量事务日志(即,它执行插入、更新和删除),则可能会导致日志增长。如果您将日志文件的“filegrowth”设置增加到更高的值,那么这个大文件增长操作将不那么频繁地发生,并且整个作业将运行得更快(正如您所观察到的)。
上述所有内容对于数据文件增长来说基本上也是如此,只是数据文件不一定需要清零(如果您启用了“即时文件初始化”(IFI))。
数据和日志文件增长设置的默认值非常低,尤其是在旧版本的 SQL Server 上。 一项建议是将它们分别设置为 256 MB 和 128 MB。无论增长设置如何,您都应该尽可能避免这些文件增长事件,尤其是在时间敏感的操作期间。
对于事务日志的增长,这可能意味着一次执行较小批量的工作,或更频繁地进行日志备份等。
对于数据文件,这可能意味着在维护窗口期间当您的监控警告文件即将满时启用 IFI 并定期手动增长数据文件。
正如我希望从我的回答中可以清楚地看出,执行计划的更改似乎不太可能导致您看到的性能差异。但要回答标题中的问题,我刚刚意识到我忘记了:
改变数据库增长率是否会迫使新的执行计划?
我实际上不确定更改数据文件增长设置是否会使计划缓存失效,但我认为不会。
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |