【问题标题】:SQL Azure transient failureSQL Azure 暂时性故障
【发布时间】:2018-08-14 08:22:58
【问题描述】:

我正在使用实体框架连接到 SQL Azure 和从 azure 函数推送的数据。

我注意到今天在 10 分钟的特定时间间隔内,出现了类似从函数抛出的错误

引发了一个异常,可能是由于暂时性故障。如果要连接到 SQL Azure 数据库,请考虑使用 SqlAzureExecutionStrategy

我看sql数据库统计的时候,那段时间已经达到了99%,之后就好了。

如何使用 azure 门户了解在该时间段内执行了多少交易?

它可能让我了解导致服务器负载的原因。

【问题讨论】:

    标签: sql azure-sql-database


    【解决方案1】:

    在这种情况下,您看到的可能是节流。当发生限制时,连接会受到影响,但糟糕的编程可能会产生不需要的连接数,并且每一层都有连接数的限制。以下查询将帮助您监控成功/终止/受限制的连接。

    select *
    from sys.database_connection_stats_ex
    where start_time >= CAST(FLOOR(CAST(getdate() AS float)) AS DATETIME)
    order by start_time desc
    
    select * 
    from sys.event_log 
    where event_type <> 'connection_successful' and
    start_time >= CAST(FLOOR(CAST(getdate() AS float)) AS DATETIME)
    order by start_time desc
    

    要监控您的数据库何时达到 DTU 限制,您可以使用以下查询:

    SELECT     
    (COUNT(end_time) - SUM(CASE WHEN avg_cpu_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'CPU Fit Percent',
    (COUNT(end_time) - SUM(CASE WHEN avg_log_write_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'Log Write Fit Percent',
    (COUNT(end_time) - SUM(CASE WHEN avg_data_io_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'Physical Data Read Fit Percent'
    FROM sys.dm_db_resource_stats
    

    当上述查询显示服务水平目标 (SLO) 为 99.9%

    要识别创建高 IO、高 CPU 使用率、高资源使用率的查询,您可以使用 Query Store。在那里您可以找到造成高 DTU 使用率的查询。

     -- Top 10 long running queries
    SELECT TOP 10 q.query_id, p.plan_id, 
    rs.count_executions, 
    qsqt.query_sql_text,
    CONVERT(NUMERIC(10,2), (rs.avg_cpu_time/1000)) as 'avg_cpu_time_seconds',
    CONVERT(NUMERIC(10,2),(rs.avg_duration/1000)) as 'avg_duration_seconds',
    CONVERT(NUMERIC(10,2),rs.avg_logical_io_reads ) as 'avg_logical_io_reads',
    CONVERT(NUMERIC(10,2),rs.avg_logical_io_writes ) as 'avg_logical_io_writes',
    CONVERT(NUMERIC(10,2),rs.avg_physical_io_reads ) as 'avg_physical_io_reads',
    CONVERT(NUMERIC(10,0),rs.avg_rowcount ) as 'avg_rowcount'
    from sys.query_store_query q  
    JOIN sys.query_store_plan p ON q.query_id = p.query_id 
    JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
    INNER JOIN sys.query_store_query_text qsqt
      ON q.query_text_id = qsqt.query_text_id
    WHERE rs.last_execution_time > dateadd(hour, -1, getutcdate())
    ORDER BY rs.avg_duration DESC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 2012-02-20
      • 1970-01-01
      相关资源
      最近更新 更多