Database
 sql >> база данни >  >> RDS >> Database

Изчакайте Статистика и Съхранение на заявки

На този сайт има множество публикации в блогове, свързани със статистика за чакане; те са един от най-важните показатели, които можете да използвате при отстраняване на проблеми с производителността в SQL Server. Статистиката за изчакване беше предоставена в SQL Server 2005 и традиционно те представляваха изчаквания на ниво потребителски модел чрез sys.dm_os_wait_statistics. Тази информация е чудесна при отстраняване на неизправности в производителността на системата като цяло, но когато се разглежда производителността на заявката, информацията за изчакване може да се види само когато заявката се изпълняваше и ако чакаше ресурс чрез sys.dm_os_waiting_tasks. Данните в sys.dm_os_waiting_tasks са преходни (това е, което чакат в момента) и не е лесно за улавяне и запазване за целия живот на заявка за настройка на производителността в по-късен момент.

В SQL Server 2016 е разкрит нов DMV, sys.dm_exec_session_wait_stats, който предоставя информация за изчаквания за съществуваща, активна сесия. Ако знаете session_id, можете да проследите изчакванията за заявка, когато тя започва и кога завършва (снимайте информацията в началото и края на заявката и след това разграничете информацията). Предизвикателството е, че трябва да знаете session_id за заявката и трябва да настроите улавяне на данни предварително – което не е тривиално, когато сте в разгара на проблем с висок приоритет.

Информацията за статистически данни за чакане съществува в действителен план за изпълнение, започващ в SQL Server 2016 SP1. Улавят се само първите 10 изчаквания и има ограничения по отношение на това какво представляват тези данни. Например, CXPACKET се игнорира и не се включва в изхода, но ще бъде включен в 2016 SP2 и 2017 CU3 и по-нови – където неуместните изчаквания на паралелизъм вместо това се улавят от CXCONSUMER (които няма да бъдат включени в действителните изчаквания на план).

И така, как можем да видим какво наистина чака конкретна заявка? Можем да използваме Query Store! SQL Server 2017 включва улавяне на информация за статистически данни за чакане в хранилището на заявки и тази функционалност е налична и в Azure SQL база данни. Статистиката за изчакване е обвързана с план за заявка и се улавя с течение на времето, точно като статистиката по време на изпълнение. Добавянето на информация за статистически данни за изчакване в Query Store беше заявката за функция номер едно след първоначалното й пускане и цялата тази информация заедно създава мощни възможности за отстраняване на неизправности.

Първи стъпки

Улавянето на статистически данни за чакане в хранилището на заявки е активирано по подразбиране за Azure SQL база данни. Когато се създаде нова база данни в SQL Server 2017 или база данни е надстроена от SQL Server 2014 или по-стара версия, хранилището на заявки е деактивирано по подразбиране... и по този начин улавянето на статистически данни за чакане е забранено. Когато база данни е надстроена от SQL Server 2016, ако има активирано хранилище на заявки, събирането на статистически данни за изчакване за хранилището на заявки ще бъде активирано при надграждане.

За демонстрационни цели възстанових базата данни WideWorldImporters, след което изпълних заявките по-долу, за да активирам хранилището на заявки и да изчистя всички данни, които може да са съществували преди (необходимо е само, защото това е примерна база данни):

ALTER DATABASE [WideWorldImporters] SET QUERY_STORE =ON;GO ALTER DATABASE [WideWorldImporters] SET QUERY_STORE ( OPERATION_MODE =READ_WRITE);GO ALTER DATABASE [WideWorldImporters] SET QUERY_GOSTORESEAR SET QUERY_STORE ( OPERATION_MODE =READ_WRITE); 

Настройките по подразбиране се използват с изразите по-горе и ако искате да промените някоя от опциите, можете да го направите чрез потребителския интерфейс или чрез оператора ALTER DATABASE. Сега, когато Съхранението на заявки е активирано, то ще започне да улавя данни от заявката, включително текста на заявката, плана(ите), статистиката за времето на изпълнение и статистиката за чакане.

Разглеждане на статистиката за чакане

За да генерираме някои данни, ще създадем съхранена процедура, която изпълнява многократно паралелна заявка.

ПРОСТЪПНЕТЕ ПРОЦЕДУРА АКО СЪЩЕСТВУВА [Продажби].[Информация за поръчката];ОТИДЕТЕ СЪЗДАЙТЕ ПРОЦЕДУРА [Продажби].[OrderInfo]ЗАПОЧВАТЕ, ДОКАТО 1=1 ЗАПОЧНЕТЕ ИЗБОР * ОТ Sales.OrderLines ol INNER JOIN Warehouse.StockItems е ON ol.Stock =sI. ОПЦИЯ .StockItemID (QUERYTRACEON 8649); КРАЙ.

След това създайте .cmd файл със следния код:

start sqlcmd -S WIN2016\SQL2017 -d WideWorldImporters -q"ИЗПЪЛНЯВАНЕ [Продажби].[OrderInfo];"
изход

Това ни позволява да не стартирайте SP в Management Studio, което създава значителни изчаквания ASYNC_NETWORK_IO; искаме да видим чаканията, свързани с паралелизма. Запазете .cmd файла, след което щракнете двукратно, за да стартирате. Можете да генерирате допълнително натоварване, като стартирате няколко файла. С този сценарий ще видим предимно изчакванията, свързани с тази заявка, тъй като нямаме друго работно натоварване. Чувствайте се свободни да изпълнявате едновременно други заявки към базата данни WideWorldImporters, ако искате да генерирате още повече данни за изчакване.

След няколко минути спрете командните файлове и разширете базата данни WideWorldImporters в Management Studio, за да видите папката на Query Store и отчетите отдолу. Ако отворите отчета за най-използваните заявки, трябва да видите заявката за съхранена процедура като най-горната заявка.

Изгледът по подразбиране за този отчет показва заявки с най-голяма обща продължителност. За да видите заявки въз основа на статистически данни за чакане, можем да изберем бутона Конфигуриране и да го променим на Време за изчакване (ms).

Бутон за конфигуриране в изглед на отчет (горе вдясно) Промяна на ресурса за отчета Имайте предвид, че можете също да конфигурирате интервала от време и броя на върнатите заявки. За този пример последният час е приемлив.

Ако задържите курсора на мишката върху лентата за първата заявка, можете да видите времето за изчакване за заявката. Понастоящем този изглед е единственият начин за преглед на информацията за изчакване в потребителския интерфейс, но се надяваме, че в бъдеща версия на Management Studio ще се появят допълнителни отчети, специфични за статистиката за чакане.

Изчакайте информацията в потребителския интерфейс

Тези от вас, които са работили със статистически данни за изчакване известно време, ще забележат, че описанията на типа чакане са различни. Това означава, че вместо тип на чакане CXPACKET, за да посочите паралелизъм, просто виждате „Тип на изчакване на паралелизъм“. Това е фундаментална разлика в магазина на заявки:Типовете чакане са групирани в категории. Към този момент има над 900 различни типа на изчакване в SQL Server и опитът за проследяване на всеки един от тях е изключително скъп. В допълнение, Query Store е проектиран с мисъл за всички специалисти по данни – независимо дали сте експерт в настройката на производителността или просто започвате да разбирате как работи SQL Server, трябва да можете да използвате Query Store, за да намерите лесно неефективни заявки. Това също означава улесняване на разбирането на информацията за чакането. За пълен списък на категориите за изчакване и видовете чакащи в тях, моля, посетете документацията за sys.query_store_wait_stats.

Можете също да видите информация за изчакване, като използвате T-SQL. Примерна заявка е тази по-долу, която включва заявката, plan_id(s) за тази заявка и статистика за чакане за даден интервал от време:

ИЗБЕРЕТЕ ТОП (10) [ws].[wait_category_desc], [ws].[avg_query_wait_time_ms], [ws].[total_query_wait_time_ms], [ws].[plan_id], [qt].[query_sql_text], [rsi]. ].[start_time], [rsi].[end_time]ОТ [sys].[query_store_query_text] [qt]JOIN [sys].[query_store_query] [q] ON [qt].[query_text_id] =[q].[query_text_id_id].[query_store_query] [q] ]Присъединете се към [sys].[query_store_plan] [qp] ON [q].[query_id] =[qp].[query_id]JOIN [sys].[query_store_runtime_stats] [rs] ON [qp].[plan_id] =[rs] ].[plan_id]ПРИСЪЕДИНЕТЕ се [sys].[query_store_runtime_stats_interval] [rsi] ON [rs].[runtime_stats_interval_id] =[rsi].[runtime_stats_interval_id]JOIN [sys].[query_store_wait_stats] [ws].[ntime_val_stats] [ws] ON [ntime_val_id] ] =[rs].[runtime_stats_interval_id] И [ws].[plan_id] =[qp].[plan_id]WHERE [rsi].[end_time]> DATEADD(MINUTE, -5, GETUTCDATE()) И [ws]. [execution_type] =0 ORDER BY [ws].[avg_query_wait_time_ms] DESC;

Изход на заявка

Въпреки че вече можете да видите всички изчаквания за дадена заявка и нейния план, все пак ще трябва да се задълбочите в производителността, за да разберете например защо една заявка се изпълнява паралелно (когато може би не искате) или какво може да блокира заявка. Имайте предвид, че статистическите данни за чакане, точно както и статистиката по време на изпълнение, са обвързани с плана на заявката във времето. В този изход дължината на интервала за Съхранение на заявки е зададена за 10 минути, така че статистиката за чакане е за всеки план за този 10-минутен интервал (23:50 ч. на 21 ноември 2017 г. до полунощ на 22 ноември 2017 г.). По подразбиране дължината на интервала, когато активирате Съхранението на заявки, е 60 минути.

Резюме

Статистиката за изчакване, комбинирана с индивидуални планове за заявки, правят Query Store още по-страхотен инструмент при отстраняване на неизправности в системата и производителността на заявките. Съхранението на заявки е единствената функция, която ви позволява да улавяте заявка, план, показатели за ефективност и статистически данни за чакане на едно място. За тези от вас, които са свикнали с безбройните типове чакане, приспособяването към категориите, използвани в магазина за заявки, трябва да бъде безпроблемно. За всеки нов, който чака статистически данни, категориите са чудесно място да започнете да разбирате ресурса, за който чака заявката.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да напишете заявка с множество поведения

  2. Цената на непрочистването

  3. Как да инсталирате pgAdmin 4 на Ubuntu 20.04/18.04/16.04

  4. T-SQL грешки, клопки и най-добри практики – завъртане и отмяна

  5. T-SQL грешки, клопки и най-добри практики – функции на прозореца