Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 准确测量存储过程的性能_Sql Server_Performance_Stored Procedures - Fatal编程技术网

Sql server 准确测量存储过程的性能

Sql server 准确测量存储过程的性能,sql-server,performance,stored-procedures,Sql Server,Performance,Stored Procedures,准确测量存储过程性能(完成时间)的最佳方法是什么 我将开始尝试优化monster存储过程,为了正确确定我的调整是否有任何效果,我需要一些东西来比较前后 到目前为止,我的想法是: 查看查询执行时SQL Management Studio:不太准确,但非常方便 在存储过程中添加计时器并打印经过的时间:像这样添加调试代码很糟糕 使用SQL Server探查器,添加筛选器以仅针对我的存储过程。到目前为止,这是我最好的选择 还有其他选项吗?定时器/调试选项的一个可能改进是将结果存储在表中。通过这种方式

准确测量存储过程性能(完成时间)的最佳方法是什么

我将开始尝试优化monster存储过程,为了正确确定我的调整是否有任何效果,我需要一些东西来比较前后

到目前为止,我的想法是:

  • 查看查询执行时SQL Management Studio:不太准确,但非常方便
  • 在存储过程中添加计时器并打印经过的时间:像这样添加调试代码很糟糕
  • 使用SQL Server探查器,添加筛选器以仅针对我的存储过程。到目前为止,这是我最好的选择

还有其他选项吗?

定时器/调试选项的一个可能改进是将结果存储在表中。通过这种方式,您可以使用SQL查询对生成的计时数据进行切分,而不仅仅是直观地解析调试输出。

分析器是最可靠的方法。您还可以使用
SET STATISTICS IO ON
SET STATISTICS TIME ON
,但这并不包括标量自定义项的全部影响


您还可以在SSMS中打开“包含客户端统计信息”选项,以获得最近10次运行的性能概览。

DMV
dm\u exec\u query\u stats

DECLARE @procname VARCHAR(255)
SET @procname = 'your proc name'

SELECT * FROM sys.dm_exec_query_stats WHERE st.objectid = OBJECT_ID(@procname)
这将为您提供每个缓存语句的累积性能数据和执行计数

您可以使用
DBCC FREEPROCCACHE
重置计数器(不要在生产系统中运行此操作,因为它将清除所有缓存的查询计划)

通过扩展此查询,可以获得每条语句的查询计划:

SELECT  SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
        ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1) [sub_statement]
        ,*, CONVERT(XML, tqp.query_plan)
FROM sys.dm_exec_query_stats qs CROSS APPLY
     sys.dm_exec_sql_text(sql_handle) st CROSS APPLY
     sys.dm_exec_query_plan(plan_handle) qp CROSS APPLY
     sys.dm_exec_text_query_plan(plan_handle, statement_start_offset, statement_end_offset  ) tqp
WHERE st.objectid = OBJECT_ID(@procname)
ORDER BY statement_start_offset, execution_count

这将为您提供有关SP的哪些部分表现不佳的指针,以及(如果包括执行计划)原因。

您希望确保执行的测试是公平的,即比较同类测试。考虑使用冷缓存运行测试,以便在每次执行测试时强制从IO子系统执行存储过程执行。


查看系统存储过程,然后

是的,您可以捕获IO、CPU、持续时间等。“包括客户端统计信息”选项也非常有用,我将使用它和探查器。谢谢。:)我甚至不知道SSMS中的“包含客户统计信息”,非常有用,我不同意。在数据库服务器以外的服务器上运行探查器,并将跟踪结果存储在文件中。这样,您就不会加载SQL Server并影响跟踪结果(假设您试图做到准确)。这非常聪明,甚至可以证明在sp中添加一些调试代码是合理的。谢谢你的提示。:)动态管理视图对我来说是新的,但它看起来确实像是我应该检查的东西。谢谢非常好的查询检索过程性能统计信息-谢谢。