SQL 服务器在高峰使用时间急剧变慢
SQL Server slows down drastically at peak usage hours
我们正在 SQL 服务器中维护数据库,它正常运行良好,但在高峰使用时间会急剧变慢。
处理这种情况的最佳方法是什么? TIA
您可以使用此查询查看当前数据库的最昂贵查询列表:
SELECT TOP(50)
qs.execution_count AS [Execution Count],
(qs.total_logical_reads) * 8 / 1024 AS [Reads (MB)],
(qs.total_worker_time) / 1000000 AS [Total Time (s)],
(qs.total_worker_time / qs.execution_count) / 1000.0 AS [Avg Time (ms)],
t.text AS [Complete Query Text],
qp.query_plan AS [Query Plan]
FROM
sys.dm_exec_query_stats AS qs WITH (NOLOCK)
CROSS APPLY
sys.dm_exec_sql_text(plan_handle) AS t
CROSS APPLY
sys.dm_exec_query_plan(plan_handle) AS qp
WHERE
t.dbid = DB_ID()
ORDER BY
[Total Time (s)] DESC
OPTION (RECOMPILE);
确定最昂贵的查询后,请尝试缓解主要问题。想到的第一个策略是:
- 在您的应用程序中缓存经常查询的数据
- 为提高频繁查询性能的表添加索引
- 优化您的查询(例如消除 n+1 个错误:参见 https://medium.com/doctolib/understanding-and-fixing-n-1-query-30623109fe89)
我们正在 SQL 服务器中维护数据库,它正常运行良好,但在高峰使用时间会急剧变慢。
处理这种情况的最佳方法是什么? TIA
您可以使用此查询查看当前数据库的最昂贵查询列表:
SELECT TOP(50)
qs.execution_count AS [Execution Count],
(qs.total_logical_reads) * 8 / 1024 AS [Reads (MB)],
(qs.total_worker_time) / 1000000 AS [Total Time (s)],
(qs.total_worker_time / qs.execution_count) / 1000.0 AS [Avg Time (ms)],
t.text AS [Complete Query Text],
qp.query_plan AS [Query Plan]
FROM
sys.dm_exec_query_stats AS qs WITH (NOLOCK)
CROSS APPLY
sys.dm_exec_sql_text(plan_handle) AS t
CROSS APPLY
sys.dm_exec_query_plan(plan_handle) AS qp
WHERE
t.dbid = DB_ID()
ORDER BY
[Total Time (s)] DESC
OPTION (RECOMPILE);
确定最昂贵的查询后,请尝试缓解主要问题。想到的第一个策略是:
- 在您的应用程序中缓存经常查询的数据
- 为提高频繁查询性能的表添加索引
- 优化您的查询(例如消除 n+1 个错误:参见 https://medium.com/doctolib/understanding-and-fixing-n-1-query-30623109fe89)