O.O*_*O.O 9 performance sql-server-2008 ssms query-performance
我正在尝试提高存储过程的性能。当我运行 SP 时,它几乎立即完成,就像缓存了某些东西一样。我被告知在 SSMS 中执行 SP 之前使用以下两行 SQL:
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)
当我使用上面的两行代码运行 SP 时,SP 在大约 8 秒内完成。但是,这真的给了我真正的执行时间(就像我从应用程序运行它一样)?我怎么知道?
这些命令做两件事:
您基本上获得了相当于“最坏情况”情景的时间 - 您刚刚重新启动了服务器并且内存中没有任何内容。后续运行不需要支付从磁盘中提取数据的成本,因为这些页面已经加载到内存中。
这类似于现实世界的情况——假设您正在检查相同的数据,您的第一个运行特定查询的用户可能需要等待比后续运行更长的时间。
我喜欢使用的一个好方法是多次运行并取平均值。这在共享环境中特别有用,因为您无法完全控制诸如 tempdb 之类的共享资源。
您还可以使用这些命令来获取有关幕后实际发生的事情的更多信息:
SET STATISTICS IO ON
SET STATISTICS TIME ON
Run Code Online (Sandbox Code Playgroud)
这些将为您提供有关从磁盘读取页面(每个对象)、逻辑页面读取、编译计划所花费的时间以及执行查询所花费的时间的详细信息。
归档时间: |
|
查看次数: |
2004 次 |
最近记录: |