SQL Azure瞬时失败

时间:2018-08-14 08:22:59

标签: sql azure-sql-database

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

我注意到今天是在10分钟的特定时间间隔内,出现了诸如从函数中引发跟随之类的错误

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

当我查看sql数据库统计信息时,在那段时间它已达到99%,在那之后还不错。

我如何找出使用Azure门户在该时间段内执行了多少交易?

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

1 个答案:

答案 0 :(得分:0)

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

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