Dar*_*inH 5 t-sql sql-server performance
我有一个在虚拟环境下运行的SQL 2005 DB.
为简化起见,假设我有两个SQL SELECT查询.他们都做了完全相同的事情.但我正在尝试分析它们以达到性能目的.
通常,我会启动一个本地数据库,加载一些数据并使用时序将一个变量与其他变量进行比较.
但在这种情况下,由于数据库很大并且它是一个测试框,因此客户端已将其放置在为其他VM提供服务的主机上.
数据库太大而无法在本地拉下来,所以这样做(至少目前为止).
但我的主要问题是,当我对服务器运行查询时,时间到处都是.我可以运行+ exact +相同的查询4次,得到7秒,8分钟,3:45分钟和15分钟的时间.
我的第一个想法是使用SET STATISTICS IO ON.
但是,这基本上产量上读取和写入的表统计是查询,这取决于在查询中的变化(临时表,VS视图,VS连接,等等)不能真正精确地比较,除了在聚合.
然后,虽然SET STATISTICS TIME ON,并且只使用CPU时间,但这似乎折扣了所有IO,这也没有为良好的基线做好准备.
我的问题是,在这种情况下,还有其他任何统计或性能分析技术可用吗?
STATISTICS IO 信息仍然有用。您可能会看到显着不同的读取、写入和扫描数量,这将使哪个查询更好变得显而易见。
您还可以查看每个查询的执行计划信息。您可以选择查询 -> 显示估计执行计划来查看 SQL Server 估计运行查询的图形表示。您还可以使用“查询”->“包括实际执行计划”来显示实际使用的计划。
并且,您还可以使用SET SHOWPLAN_TEXT
、SET SHOWPLAN_ALL
或SET SHOWPLAN_XML
包含执行计划来查看计划的文本显示。
查看执行计划的结果时,您可以查看估计成本值并比较每个查询的值。估计成本是一个相对值,可用于比较每个选项的成本。