sql-server - SQL Azure 读取横向扩展功能:监视只读副本上的查询
问题描述
问题:当在 Azure SQL 的高级层上启用只读副本时,我们遇到了一些性能问题,这非常奇怪且无法解释。
我可以使用以下内置函数查找是否正在对只读副本执行查询
DATABASEPROPERYEX(DB_NAME(),'可更新性')
但是,没有办法监控只读查询。
根据以下文章,只读副本的预览版不支持扩展事件和查询存储 https://docs.microsoft.com/en-us/azure/sql-database/sql-database-read-scale-out
而下面的文章建议现在普遍可以使用读取横向扩展功能。我仍然无法监视在高级 SQL 数据库层中的只读副本上执行的查询
我可以看到用户语音项
是否有任何其他选项来监控只读工作负载?
解决方案
正如您所提到的,您不能使用查询存储或扩展事件来监视只读副本上的查询,但仍然可以使用sys.dm_exec_query_stats动态视图,它可以为您提供例如 CPU 消耗量最高的查询
SELECT TOP (25) MIN(query_stats.statement_text) AS [Statement Text],
SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS [Avg CPU Time],
query_stats.query_hash AS [Query Hash]
FROM (SELECT QS.*, 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) AS statement_text
FROM sys.dm_exec_query_stats AS QS
CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) AS ST) AS query_stats
GROUP BY query_stats.query_hash
ORDER BY [Avg CPU Time] DESC;
您可以更改以下查询的 ORDER BY 子句以监控其他资源:
SELECT TOP 10
(total_logical_reads/execution_count) AS avg_logical_reads,
(total_logical_writes/execution_count) AS avg_logical_writes,
(total_physical_reads/execution_count) AS avg_phys_reads,
(total_worker_time/execution_count) AS avg_cpu_over_head,
total_logical_reads, total_logical_writes, total_physical_reads,
total_worker_time, execution_count, total_elapsed_time AS Duration,
plan_generation_num AS num_recompiles,
statement_start_offset AS stmt_start_offset,
(SELECT SUBSTRING(text, statement_start_offset/2 + 1,
(CASE WHEN statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(MAX),text)) * 2
ELSE statement_end_offset
END - statement_start_offset)/2)
FROM sys.dm_exec_sql_text(sql_handle)) AS query_text,
(SELECT query_plan FROM sys.dm_exec_query_plan(plan_handle)) AS query_plan
FROM sys.dm_exec_query_stats a
--JUST CHANGE THE ORDER BY TO GET THE OTHER RESOURCES
ORDER BY (total_logical_reads + total_logical_writes)/execution_count DESC
您可能希望存储上述查询的结果以供以后分析。
推荐阅读
- powerbi - 在哪里放置 Power BI 源以使报告正常工作?
- javascript - 如何仅使用 CSS 设计 Angular 响应式组件
- android - Chrome 开发工具设备配置
- android - MaterialContainerTransform 中的 Fresco 图像视图未显示
- bash - 运行带有 su 错误的 shell 脚本
- python - 如何将单独的python变量放入不同的sql命令中?
- bash - 传递 Bash 标志和命令
- sql-server - SQL Server唯一索引中的空值?
- mysql - MySQL:Where 子句基于 IF 语句的结果?
- python - 使用来自 url 文件的请求发布文件