【发布时间】: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