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

Пакет за настройка на Spotlight Basic:Най-добрият безплатен инструмент за оптимизиране на SQL

Винаги се препоръчва при писане на заявки или код на база данни на SQL Server (процедури и изгледи) да се обърне внимание на плана за изпълнение. Има няколко причини за това. Първо – оптимизаторът може да избира план, който не очаквате. Например, индексно сканиране на голяма таблица преди съпоставяне с по-малка таблица. Второ – трябва да се вземе предвид как ще се представя тази заявка след месеци или години, ако заявките се изпълняват в нова система с малки таблици, които ще се разрастват. И накрая, но най-важното, колко бърза е тази заявка и колко ресурси използва. Последната точка може да не изглежда толкова важна, може би си мислите, стига да отнема по-малко от 3 секунди, което е достатъчно добре, но ако може да работи за <1 секунда, няма ли да е по-добре? Ако вашите бази данни се хостват в облак, намаляването на ресурсите може също да ви спести пари.

Много случаи за оптимизация на SQL обикновено идват от проблем, който е открит от крайния потребител или вашия софтуер за наблюдение. „Защо генерирането на този отчет отнема 30 минути?“, „Какво причинява този скок в I/O чакането“ или „Защо тези задания отнемат два пъти повече време, отколкото миналата година?“

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

Да вземем пример. И така, вие пишете нова заявка, изпълнявате я и след това си мислите, скъпи, това отнема твърде много време.

17 секунди за 730 реда, какво трябва да направя?

Първо, нека прегледаме плана за изпълнение:

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

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

Ето един пример:

И така, има проблем с този код, но какво можем да направим с него?

Е, всъщност доста. Можем да използваме подсказки за заявка, да разгледаме добавянето на някои индекси (не забравяйте, че това може да повлияе на други заявки и DML), добавяне на битове код, които не променят набора от резултати, но влияят на оптимизатора да генерира различен план и малки трикове за спрете оптимизатора предвид конкретен индекс, който използва, и може би генерирайте нов план. Но всичко това е опит и грешка и отнема много време, за да се направи ръчно.

Като добавим приложението Spotlight Extensions към SSMS и се абонираме за Spotlight Tuning Pack, можем да позволим на функцията за оптимизация в Tuning Pack да свърши цялата упорита работа вместо нас.

Може да сте забелязали на първата екранна снимка, че когато функцията е активирана, тя автоматично открива, че е възможна оптимизация:

Щракнете върху Преглед на анализ

След това можете да щракнете върху бутона Оптимизиране и оптимизаторът ще анализира кода и ще започне да прилага правила за пренаписване, които ще променят синтаксиса на SQL, даващи алтернативи, които предоставят същия набор от резултати, и след това да ги тества, за да можем да видим дали има алтернативно изпълнение плановете са по-бързи и защо. Правилата се прилагат в комбинации, така че възможните алтернативи могат да бъдат над 100. Инструментът обаче ви показва само алтернативи, които са по-бързи от оригинала.

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

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

И така, обратно към SSMS с моята нова версия на заявката и я тествайте.

Успех.

Ако това е в среда за разработка, може да помислите за прочистване на буферния кеш с помощта на DBCC DROPCLEANBUFFERS, за да тествате заявките си със студен буферен кеш, без да изключвате и рестартирате сървъра.

Също така, помислете за добавяне на SET STATISTICS IO ON към заявката за повече информация защо синтаксисът на заявката има значение:

Оригинал:

Пренапишете:

И това може да се постигне и в Tuning Pack с функцията за сравнение на статистически данни:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да определите общия брой отворени/активни връзки в ms sql server 2005

  2. Нулиране на началната стойност на самоличността след изтриване на записи в SQL Server

  3. Групово вмъкване на частично цитиран CSV файл в SQL Server

  4. Как да извика съхранена процедура в изглед?

  5. Как да получите първия и последния ден от предходния месец (с времеви печат) в SQL Server