Как проверить, какая загрузка базы данных SQL Azure находится перед выполнением команды? - PullRequest
0 голосов
/ 15 марта 2019

Я хочу выполнять команды, когда база данных Azure не находится под высокой нагрузкой, то есть процент DTU ниже, чем, скажем, 10%. Этот запрос дает мне процент DTU.

SELECT TOP (1) end_time, (SELECT Max(v)    
FROM (VALUES (avg_cpu_percent), (avg_data_io_percent), (avg_log_write_percent)) AS    
value(v)) AS [avg_DTU_percent]   
FROM sys.dm_db_resource_stats;

В документации говорится, что она обновляется каждые 15 секунд. Значит ли это, что информация устарела до 15 секунд? Если я выполню этот запрос непосредственно перед выполнением интенсивной операции, узнаю ли я, что не собираюсь максимально использовать DTU (принимая, что сама операция этого не делает)?

Есть ли другие способы проверить, под какой нагрузкой находится база данных, перед выполнением другой команды?

1 Ответ

0 голосов
/ 16 марта 2019

Это помогает, если вы проверяете каждое потребление ресурсов индивидуально, как показано в запросе ниже. Вы можете настроить 80 в качестве порога для запроса, как вы хотите.

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

Например, если вы видите, что значение avg_log_write_percent близко или равно 100% для вашей базы данных SQL Azure, то регулирование влияет на вашу базу данных, и не имеет значения, что говорит процессор или другие отдельные меры. В этой ситуации ваша база данных SQL находится под высокой нагрузкой, и вы не хотите добавлять дополнительную нагрузку.

В приведенном ниже запросе я добавил предельное значение DTU для текущего уровня вашей базы данных, чтобы вы могли сравнить среднее предельное значение DTU и среднее потребление DTU за последние 5 минут и решить, хотите ли вы добавить дополнительную рабочую нагрузку (больше инструкции по выполнению) к текущей загрузке вашей базы данных.

DECLARE @s datetime;  
DECLARE @e datetime;  
SET @s= DateAdd(minute,-5,GetUTCDate());  
SET @e= GETUTCDATE();
SELECT 
 end_time AS [EndTime]
  , (SELECT Max(v) FROM (VALUES (avg_cpu_percent), (avg_data_io_percent), (avg_log_write_percent)) AS value(v)) AS [AvgDTU_Percent]  
  , ((dtu_limit)*((SELECT Max(v) FROM (VALUES (avg_cpu_percent), (avg_data_io_percent), (avg_log_write_percent)) AS value(v))/100.00)) AS [AvgDTUsUsed]
  , dtu_limit AS [DTULimit]
FROM sys.dm_db_resource_stats
WHERE end_time BETWEEN @s AND @e 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...