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

План за изпълнение на SQL Server — какво е това и как помага при проблеми с производителността?

Планът за изпълнение на SQL Server е полезен за разследване на проблеми с производителността с вашите заявки. Специалистите по бази данни често получават сигнали за проблеми или потребителски оплаквания, че заявките се изпълняват бавно. Резултатите от заявка, които са отнемали две или три минути, внезапно изискват повече от 30 минути. Отстраняването на неизправности може да изисква проучване на области като сървърни ресурси (CPU, памет), статистика, производителност на диска, блокиране, блокиране и индекси. В тази статия ще се съсредоточим върху ролята на плана за изпълнение на SQL Server при решаването на проблеми с производителността.

Какво се случва, след като изпратите T-SQL в SQL Server?

Нека да разгледаме какво се случва, след като изпратите заявка с помощта на Transact-SQL или T-SQL в SQL Server. За потребителите, разбира се, няма значение. Потребителите очакват бързо да получат точни резултати, независимо дали правят заявки в базата данни или търсят в мрежата.

Работният поток от високо ниво на SQL заявка

  1. Потребителят се удостоверява в SQL Server в клиентско приложение и подава заявка.
  2. SQL Server анализира заявката и проверява за синтактични грешки.
  3. Дървото за синтактичен анализ се обработва допълнително в Algebrizer, който разрешава всички обекти, таблици и колони в заявката. Той също така извършва проверка на типовете данни в колоните. В случай на проблеми, той връща грешка. Algebrizer генерира дърво на процеса на заявка и хеш на заявка. Ако планът за изпълнение вече съществува, SQL Server използва този кеширан план и изпълнява заявката.
  4. Ако не съществува план или планът е остарял, оптимизаторът на заявки извършва пълна оптимизация на базата на разходите с помощта на статистика, дърво на процеса на заявка и ограничения. Въз основа на тези данни той подготвя оптимизирания за разходите план за изпълнение на SQL Server.
  5. Накрая машината за заявки на SQL Server изпълнява заявката според плана за изпълнение и връща резултатите.

Общ преглед на план за изпълнение на SQL Server

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

Можете да използвате някое от следните, за да генерирате план за изпълнение:

  1. Студио за управление на SQL сървър
  2. Azure Data Studio
  3. Профилър на SQL сървър
  4. Разширени събития
  5. Динамични изгледи за управление
  6. Софтуер за наблюдение на база данни на трети страни

Плановете за изпълнение, генерирани от #1 до #5, са подобни. Софтуерът за мониторинг на база данни на трети страни (#6) предоставя допълнителни функции, които използват цветово кодиране за идентифициране на скъпи оператори.

SQL Server предоставя прогнозни и действителни планове за изпълнение, подобни на това, което изпитвате, когато трябва да поправите колата си. Механикът инспектира вашето превозно средство, след което получавате оценка на работата въз основа на вашите изисквания, състоянието на автомобила и приблизителното време и материали, които механикът смята, че ремонтът ще отнеме. Разбира се, действителните разходи и време може да се различават, както при прогнозните и действителните планове за изпълнение на SQL Server.

Прогнозни планове за изпълнение

Без да изпълнявате заявката, можете да получите приблизителен (логически) план за изпълнение на SQL Server въз основа на статистиката на SQL Server. В SQL Server Management Studio (SSMS) следвайте тези стъпки:

  1. Откройте заявката (в случай че искате плана за изпълнение за конкретна заявка).
  2. Щракнете върху бутона Показване на прогнозния план за изпълнение (клавишна комбинация Ctrl + L), както е показано по-долу.

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

Действителен план за изпълнение

След като изпратите заявката до SQL Server, можете да получите действителен план за изпълнение, представящ стъпките, които SQL Server е предприел, за да изпълни заявката. Както в сценария за ремонт на превозно средство, това е като действителната сметка, която получавате.

За да получите действителния план за изпълнение, следвайте стъпките по-долу в SSMS, преди да стартирате заявката.

  1. Откройте заявката.
  2. Кликнете върху Показване на действителния план за изпълнение бутон (клавишна комбинация Ctrl + M ), както е показано по-горе.

Формати на план за изпълнение на SQL Server

По подразбиране SSMS процедурите, обяснени по-горе, генерират план за изпълнение на SQL Server в графичен формат. Но имате възможност да видите планове за изпълнение в три различни формата:

  1. Графика
  2. XML
  3. Текст

Нека разгледаме всеки от тези формати.

1. Графичен план за изпълнение

Графичният план изобразява всички компоненти, включително потока от данни, както е показано по-долу.

Оператори

Операторите се показват като икони. Всеки оператор е определен да изпълнява конкретна задача. Например, оптимизаторът на заявки в SQL Server може да извърши сканиране на таблица, сканиране на индекс и търсене. Ето как изглежда клъстериран оператор за търсене на индекс, докато извлича данни от индекс в таблицата [AdventureWorks2019].[HumanResources]:

Процент на разходите

Графичният план също показва процентна цена - тук, 99% за търсенето на клъстерен индекс - свързана с оператора. Тази цена е в сравнение с другите оператори, използвани при изпълнение на заявката.

Стрелки за поток от данни

Стрелките свързват операторите, като тяхната ширина отразява броя на редовете данни, преминаващи от един оператор към следващия.

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

Инструменти

Както е показано по-долу, когато поставите курсора на мишката върху оператор, се появяват подсказки с повече статистически данни за потока от данни.

Прозорец със свойства

Прозорецът Properties показва подробна информация за операторите и техните компоненти. Това е надмножество от подсказките.

2. XML-форматиран план за изпълнение на SQL Server

Планът за изпълнение на XML е в специфичен, структуриран формат. Въпреки че XML форматът е по-малко визуално интуитивен, той съдържа всички детайли в XML и не изисква допълнителни стъпки за преглед на свойства и подсказки. Можете лесно да конвертирате XML формат в графичен формат и обратно.

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

Резултатът е следния структуриран, форматиран в XML план за изпълнение.

Следните команди също генерират плана за изпълнение в XML формат:

  • За прогнозния план:ВКЛЮЧЕТЕ SHOWPLAN_XML
  • За действителния план: ЗАДАДЕТЕ STATISTICS_XML ВКЛЮЧЕНО

3. Текстово форматиран план за изпълнение на SQL Server

Можете да генерирате плана за изпълнение по няколко начина:

  • ЗАДАДЕТЕ SHOWPLAN_TEXT ВКЛЮЧЕНО

Тази команда генерира приблизителното план за изпълнение, без подробна информация за изпълнението на заявката. Предназначен е за приложения като помощната програма sqlcmd.

  • ЗАДАДЕТЕ SHOWPLAN_ALL ON

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

  • ЗАДАВАНЕ НА ПРОФИЛ ЗА СТАТИСТИКА

Тази команда генерира действителен план за изпълнение след изпълнение на заявка в табличен формат.

Защо прогнозните и действителните планове за изпълнение на SQL Server са различни?

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

Застояли статистически данни

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

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

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

План за изпълнение на сериен или паралелен SQL Server

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

Невалидни прогнози

Както бе споменато по-рано, Algebrizer свързва имената на обектите, преди да изпълни SQL заявката. Да предположим, че сте посочили, че таблица с име test ще бъде СЪЗДАДЕНА по време на изпълнение, след което опитайте да генерирате прогнозен план за изпълнение. Тъй като тази таблица не съществува, ще получите съобщение за грешка, както е показано по-долу.

Използване на плана за изпълнение

В обобщение, можете да генерирате план за изпълнение на SQL Server в графични, XML и текстови формати и да го използвате, за да ви помогне да решите проблемите с производителността на вашата база данни.

Плановете за изпълнение на заявки са основни стъпки в идентифицирането на работния процес, операторите и компонентите на заявката, така че да можете да настроите заявките си за всяко възможно подобрение. За повече информация относно използването на планове за изпълнение вижте нашата публикация: Как да четете и анализирате планове за изпълнение.


  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

  2. Всеки израз GROUP BY трябва да съдържа поне една колона, която не е външна препратка

  3. Използване на условие if във вмъкнат SQL Server

  4. sql сървър невалидно име на обект - но таблиците са изброени в списъка с SSMS таблици

  5. 3 въпроса за наблюдение на SQL Server, които да зададете при поемане на позиция в DBA