【问题标题】:what could be the reason for high "SQL Server parse and compile time"?“SQL Server 解析和编译时间”高的原因是什么?
【发布时间】:2015-09-10 07:33:11
【问题描述】:

先介绍一点背景:

我有一个旧版应用程序,其中包含应用程序内的安全规则。
在该模型上使用附加应用程序重用数据库模型,并在其中集成安全模型!数据库,我打算在视图 sql 中使用带有安全规则的视图。
逻辑运行良好,但性能不是很好(扫描一些/许多 tbls 导致高 io)。
所以我使用索引视图而不是我需要安全性的基本 coles 的标准视图,并在带有安全规则的索引视图顶部添加额外的视图。当我看到 io 性能时,效果很好。

但现在 o 的解析和编译时间很差。

当我擦除所有缓冲区时,一个简单的 sql 针对顶视图提供这个时间:

“SQL Server-Analyse-und Kompilierzeit: , CPU-Zeit = 723 ms,verstrichene Zeit = 723 ms。 ------------ 7 (1 Zeile(n) betrofen) #A7F38F33-塔贝尔。 Scananzahl 1, logische Lesevorgänge 7, physische Lesevorgänge 0, Read-Ahead-Lesevorgänge 0, logische LOB-Lesevorgänge 0, physische LOB-Lesevorgänge 0, Read-Ahead-LOB-Lesevorgänge 0。 xADSDocu-Tabelle。 Scananzahl 1, logische Lesevorgänge 2, physische Lesevorgänge 0, Read-Ahead-Lesevorgänge 0, logische LOB-Lesevorgänge 0, physische LOB-Lesevorgänge 0, Read-Ahead-LOB-Lesevorgänge 0。 SQL Server-Ausführungszeiten: , CPU-Zeit = 0 ms,verstrichene Zeit = 0 ms。

当我再次执行相同的 stmt 时,解析时间当然为零。
在过去,我有时会在稍后再次执行相同的语句时看到很长的解析时间 > 1 秒(在此期间没有完成 dml!)。
现在我已经停用所有统计自动化,并且再也看不到这么长的解析时间再次。

但是,初始解析和编译时间如此之长的原因可能是什么?
这次时间非常长,并且使用此解决方案会导致应用程序本身的性能非常差。

有没有办法更深入地查看解析时间以找到它的根本原因?

【问题讨论】:

  • 当我再次重建视图时,我看到多个“SQL Server 解析和编译时间”行。比如:SQL Server-Analyse- und Kompilierzeit: ,CPU-Zeit = 718 ms,verstrichene Zeit = 733 ms。 SQL Server-Analyse- und Kompilierzeit:,CPU-Zeit = 688 ms,verstrichene Zeit = 716 ms。 SQL Server-Analyse- und Kompilierzeit:,CPU-Zeit = 703 ms,verstrichene Zeit = 711 ms。 SQL Server-Analyse- und Kompilierzeit:,CPU-Zeit = 703 ms,verstrichene Zeit = 716 ms。 SQL Server-Analyse- und Kompilierzeit:,CPU-Zeit = 641 ms,verstrichene Zeit = 649 ms。
  • 长编译时间是查询复杂性的副作用。必须评估以生成执行计划的更多表、视图、索引等都是因素。尽管从开发的角度来看代码重用是好的,但视图的引入,尤其是嵌套视图,增加了复杂性和编译时间。对于复杂的查询,如果没有视图,您可能会减少编译。

标签: sql-server performance tsql


【解决方案1】:

编译时间差的原因是索引视图的数量。

查询优化器可以使用索引视图来加速查询执行。不必在查询中引用该视图,优化器就可以考虑替换该视图。https://msdn.microsoft.com/en-us/library/ms191432(v=sql.120).aspx

这意味着,优化器可能会在解析所有 sql 时进行检查!来自视图的索引。

我的数据库上有一个示例,我可以在其中看到这种行为,即基表上的简单 sql 使用索引视图中的索引。

尽可能好,但是当您达到大约 500 idx 的限制时,系统会升级,优化器需要至少 10 倍以上的 CPU 和内存来计算计划。从 2008 版到 2014 版,此行为几乎相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2015-06-12
    • 2012-06-28
    • 2010-12-08
    • 1970-01-01
    • 2015-01-26
    相关资源
    最近更新 更多