我已经使用 MySQL 很长时间了,发现通用查询日志和慢速查询日志对于查找服务器上发生的情况以及识别瓶颈非常有用。
现在我需要使用 SQL Server。SQL Server 是否有类似的日志功能?如果有,它们叫什么?
答案1
SQL 服务器在各个表中保存所有查询的统计信息。您可以使用以下代码来确定运行时间最长的查询是什么(来自表sys.dm_exec_query_stats
)。
您应该运行以下 DBCC 命令:
此 DBCC 命令清除服务器缓存并重新启动查询运行时间的记录:
DBCC FREEPROCCACHE
运行此查询来查找运行时间最长的查询:
SELECT DISTINCT TOP 10
t.TEXT QueryName,
s.execution_count AS ExecutionCount,
s.max_elapsed_time AS MaxElapsedTime,
ISNULL(s.total_elapsed_time / s.execution_count, 0) AS AvgElapsedTime,
s.creation_time AS LogCreatedOn,
ISNULL(s.execution_count / DATEDIFF(s, s.creation_time, GETDATE()), 0) AS FrequencyPerSec
FROM sys.dm_exec_query_stats s
CROSS APPLY sys.dm_exec_sql_text( s.sql_handle ) t
ORDER BY
s.max_elapsed_time DESC
GO
你还应该看看科技网杂志文章优化 SQL Server 查询性能,其中有一个用于确定哪个查询是最昂贵的读取 I/O 查询的查询,以及如何查看执行计划和其他优化的指导。
答案2
您可以使用 SQL Profiler 实时监控系统,以识别运行缓慢的语句。
答案3
SQL 还可以建议您可能想要添加或删除的索引: http://msdn.microsoft.com/en-us/library/ms187974.aspx
您还可以在 SQL 管理工作室中查看与长查询相关的报告:右键单击您的服务器名称 > 报告 > 标准报告 > 性能 - 热门查询...
答案4
旧的慢查询保存在 MSSQL 中。这个问题已经在这里解决了:
http://blog.brianhartsock.com/2008/12/16/quick-and-dirty-sql-server-slow-query-log/