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

Как да четете и анализирате планове за изпълнение на SQL Server

Плановете за изпълнение на SQL Server са шлюз за оптимизатор на заявки и изпълнение на заявки за професионалисти в базата данни. Те разкриват обработката на заявки и включени фази, като засегнати таблици, индекси, статистически данни, типове обединения, брой засегнати редове, обработка на заявки, сортиране на данни и извличане на данни.

В предишна статия План за изпълнение на SQL Server — какво е това и как помага при проблеми с производителността? проучихме работния процес за изпълнение на заявка на високо ниво, различните типове планове за изпълнение (графични, XML и текстови), заедно с действителни и прогнозни планове за изпълнение.

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

Четене на графичен план за изпълнение на SQL Server

Обикновено четем плановете за изпълнение от дясно на ляво. Започвате с най-горния десен оператор на план за изпълнение и се придвижвате наляво. Помага ви да следвате логическия поток от данни в заявката.

Да предположим, че изпълнявате следната заявка в примерна база данни [AdventureWorks2019] и виждате действителния план за изпълнение.

SELECT TOP (10) [SalesOrderID] [SalesOrderDetailID] [CarrierTrackingNumber] [OrderQty] [ProductID] [SpecialOfferID] [ModifiedDate] FROM [AdventureWorks2019].[Sales].[SalesOrderDetail] where [UnitPrice]>1000

Заявката извлича данни от таблицата [Sales].[SalesOrderDetail] за поръчки с единична цена, по-голяма от 1000.

Ако прочетем плана за изпълнение отдясно наляво, ще отбележим следното:

  • Първият оператор е Clustered Index Scan, който чете данни от таблицата [Sales].[SalesOrderDetail]. Когато заведете показалеца на мишката си върху стрелката, свързваща оператора Clustered Index Scan и Top, той връща прогнозния и действителния брой редове и прогнозния размер на данните.

  • Той предава данни от оператора Clustered Index Scan към оператора Top, предава 10-те реда на оператора SELECT.

Вътрешно SQL Server изпълнява плана отляво надясно. Ако се интересувате от физическите поръчки на оператора, трябва да прочетете план за изпълнение отляво надясно. Всеки оператор изисква данни от следващия оператор. Например в горния сценарий операторът Top изисква данни от сканирането на клъстериран индекс. Сканирането на клъстериран индекс връща редовете от таблицата [Sales].[SalesOrderDetail], която удовлетворява Къде условие на клауза.

В случай, че няколко клона се слеят в план за изпълнение, трябва да следвате подхода отдясно наляво, отгоре надолу.

Разходи на оператор

Всеки оператор в план за изпълнение на SQL Server е свързан с цена. Разходите на оператора са съотнесени към другите разходи в плана за изпълнение. Обикновено трябва да се концентрираме върху скъпия оператор и да настроим заявката около него.

В случай на сложен план за изпълнение, може да е предизвикателство да се идентифицира скъпият оператор. В този случай можете да използвате ЗАДАВАНЕ НА SHOWPLAN_ALL ON, и ще предостави информация в табличен формат.

Можете също да използвате [Stmt text], за да разбиете плана за изпълнение на всеки оператор и ниво на оператор.

SQL Server Management Studio (SSMS) също дава гъвкавост за намиране на оператор въз основа на критерии за търсене. За да направите това, щракнете с десния бутон върху плана за изпълнение и изберете Намиране на възел. Това ще отвори прозорец с различни условия за търсене. Посочете вашето изискване и то ще сочи към конкретния възел, както е показано по-долу.

Като алтернатива можете да използвате Azure Data Studio и да отидете до Изпълнение на текущата заявка с действителен план под палитрата за команди. Това дава действителен план за изпълнение в компактна форма, заедно с най-добрите операции за бързо идентифициране на скъпи оператори.

Анализ на Showplan

Можете да идентифицирате неточна оценка на кардиналността, за да проучите проблемни планове за изпълнение. Това ще ви даде кратка информация за намирането на конкретен оператор и препоръки в раздела Анализ на ShowPlan. Можете да сортирате резултата в колони за разлика, действителни и прогнозни, за да намерите проблема и препоръки за конкретния оператор в плана за изпълнение. Това е достъпно от SSMS 17.4.

За да направите това, просто щракнете с десния бутон върху плана за изпълнение и след това щракнете върху Анализ на действителния план за изпълнение.

След това кликнете върху хипервръзката под Намиране на подробности . Това ще обясни възможните сценарии за неточност на оценката и заобиколните решения за подобряване на тези оценки. Това е добра отправна точка за проблеми с оценката на мощността.

Сравнете Showplan

Да предположим, че сте идентифицирали проблем в плана за изпълнение и сте внедрили решение за отстраняването му. Но как ще сравните предишния план за изпълнение (как беше преди внедряването на решението) и текущия план за изпълнение? SMSS Compare Showplan функцията ви дава гъвкавостта да сравнявате два плана за изпълнение. Той подчертава приликите и разликите между тези планове.

Обикновено DBA получават обаждане от разработчиците, че конкретна заявка работи добре в производството, но отнема много време в QA среда със същите параметри. Друг случай на използване е мигрирането към по-нова версия на SQL Server. Да предположим, че след миграцията се сблъскате с проблеми със заявка, която работи добре в по-ниска версия на SQL. Можете също да използвате този инструмент, за да сравнявате планове за изпълнение на различни версии на SQL и нива на корекция.

Запазете плана за изпълнение в SQLPplan разширение. След това можете да щракнете с десния бутон на мишката върху друг план за изпълнение и да изберете Сравнение на Showplan .

Планове за изпълнение на живо в SSMS

Можете да активирате план за изпълнение на живо на активна заявка. Това ще ви даде статистика в реално време за потока от данни към различни оператори. В статистиката за изпълнение по време на изпълнение можете да проследявате изминалото време и броя на редовете. Това е отлична функция за отстраняване на неизправности и проблеми с производителността. Можете да използвате статистически данни за заявки на живо от SQL Server 2016 и по-нови версии.

Забележка:Трябва да използвате най-новата версия на SSMS. Вижте документите на Microsoft за да изтеглите най-новата версия на SSMS.

  • Текуща последна версия:SSMS 18.7.1

За статистически данни за заявките на живо включете Включване на статистически данни за заявки на живо с помощта на лентата с инструменти SSMS.

Можете също да видите плана за изпълнение на живо от Монитор на активността . В монитора на активността изберете желания процес, щракнете с десния бутон върху него, за да видите менюто и изберете Показване на план за изпълнение на живо.

Това ви дава оценки на заявките на живо, заедно с потока от данни и процента на завършване на отделните оператори. Обикновено чакаме изпълнението на заявката да приключи и да видим действителния план за изпълнение. Но да предположим, че вашата заявка отнема повече от 30 минути, за да даде резултати. В този случай можете да използвате статистически данни за заявки на живо, за да проследявате отделни оператори, поток от данни и да посочите кой оператор отнема време, за да завърши заявката. Например, както е показано по-долу, заявката се изпълнява за 12 минути и 48 секунди и се оценява на 20% завършена заявка. На ниво оператор сканирането на индекса и групата за броене на редове са завършени на 41%. Пунктираните линии показват движението на данните.

Преглед на използването на план за изпълнение на SQL Server

Плановете за изпълнение на SQL Server са невероятно полезни при отстраняване на неизправности и оптимизиране на бавни заявки. Всеки специалист по база данни трябва да знае как да анализира и разбира информацията, след като планът за изпълнение стане достъпен. Както бе споменато по-рано, има различни инструменти в SSMS и Azure Data Studio, които да ви помогнат да прегледате и разрешите проблеми с производителността – особено функцията за сравнение на плана е тази, от която да се възползвате, когато започнете да правите промени и да оценявате производителността.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да активирате/деактивирате достъпа до данни в SQL Server (пример за T-SQL)

  2. Таблицата за проверка на SQL Server е разделена

  3. Връщане на списък с пощенски профили на база данни в SQL Server (T-SQL)

  4. SqlConnection SqlCommand SqlDataReader IDisposable

  5. Linux - PHP 7.0 и MSSQL (Microsoft SQL)