Azure SQL:如何确定启动自动计算的时间以避免性能峰值?

i86rm4rw  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(146)

上下文:Web应用需要预先计算一些信息,以便响应更快,并给人一种“在线数据”的感觉。我们有一种机制,它说“那部分数据已经过时了,现在应该被检索/计算”。无论如何,有一些灵活性,稍微过时的数据是可以接受的。已经有一个工具来确定要计算或检索的内容。
**问题:**在Azure SQL中,是否有任何方法可以检测何时自动启动部分数据的计算,以便不会导致性能问题?比如说,是否有任何系统视图、存储过程等来获取一些性能计数器?

我知道“Query Performance Insight for Azure SQL Database”应用程序。但是,我需要一些可以从SQL查询中使用的东西。
我承认这个问题相当模糊。我必须以某种方式开始学习各种可能性。

更新:

我刚刚找到了https://learn.microsoft.com/en-us/azure/azure-sql/database/monitoring-with-dmvs?view=azuresql
无论如何,任何与您的经验有关的评论都是受欢迎的。

hec6srdp

hec6srdp1#

我的理解是在Azure SQL中,你可以使用动态管理视图来监视和收集与性能相关的信息。据我所知,sys.dm_exec_query_stats可能会有所帮助,我已经在我的终端尝试过,可以帮助您监视和收集与性能相关的信息。
例如,我创建了一个表。下面的schema

CREATE TABLE PerformanceMetrics (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    MetricName NVARCHAR(50),
    MetricValue FLOAT,
    Timestamp DATETIME
);

作为动态管理视图的一部分,我执行了sys.dm_exec_query_stats来监视和收集一些查询操作的性能相关信息。

  • 插入到表中:我已插入25条记录
  • 选择查询
  • Update语句将列名称Metric更改为MetricName
  • update语句到metricValue*2
  • 将时间戳格式更新为('yyyy-MM-dd HH:mm:ss')

转换

的结果
现在,使用sys.dm_exec_query_stats,我可以获取前10个最高的总工作时间,沿着它们的执行计数、SQL语句、总运行时间和创建时间。
下面是要在Azure SQL上执行的查询:

SELECT TOP 10
    qs.execution_count AS ExecutionCount,
    SUBSTRING(st.text, (qs.statement_start_offset / 2) + 1, (
        (CASE qs.statement_end_offset
            WHEN -1 THEN DATALENGTH(st.text)
            ELSE qs.statement_end_offset END - qs.statement_start_offset
        ) / 2) + 1
    ) AS SQLStatement,
    qs.total_worker_time AS TotalWorkerTime,
    qs.total_elapsed_time AS TotalElapsedTime,
    qs.creation_time AS CreationTime
FROM
    sys.dm_exec_query_stats qs
CROSS APPLY
    sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY
    qs.total_worker_time DESC

;

**sys.dm_exec_query_stats的结果:**x1c4d 1x

相关问题