Профилирането на заявки е начинът, по който разбирате какво се случва в черната кутия на производителността на SQL Server.
На потребителите е лесно. DBA не го правят.
Помислете за лесните опции, които потребителите имат, когато приложение за база данни работи лошо:
- Вземете кафе и чакайте.
- Обиди компютъра.
- Оплачете се пред други потребители.
- Изпратете сигнал за проблем.
Не е ли това животът на Райли в сравнение с опциите, които имате като DBA?
- Потърсете блокирани сесии.
- Проверете съотношенията на попадане в кеша на буфера.
- Измерете максималното изчакване на I/O.
- Проверете продължителността на живота на страницата.
- Вижте дали липсват индекси или се нуждаят от повторно изграждане.
- Търсете заключване/заключване.
- Проверете използването на процесора.
- Прегледайте регистрационния файл на приложението за съобщения за липса на памет.
- Уверете се, че базата данни tempdb е конфигурирана правилно.
Може да е някой от тези софтуерни проблеми и обикновено те водят до решението за оптимизиране на заявка или промяна на конфигурацията. Или може да е хардуерен проблем и решението е да закупите повече памет или процесорна мощност.
Тъй като приложенията за бази данни са предимно за изпълнение на много SQL заявки, проблемите с производителността имат много места за скриване в SQL Server. Ако сте потребител, можете да кажете:„О, добре, проблемът трябва да е някъде в тази черна кутия. Не е моя работа.”
Но като DBA, вие нямате този лукс. Трябва да отворите черната кутия, да се качите вътре, да намерите бъркотията и да я поправите.
Профилиране на заявка 101 с мониторинг на производителността на SQL сървър
Като цяло целта ви с мониторинга на производителността на сървъра е да следите как се представят вашите SQL заявки във времето и нарастването на обема на транзакциите на вашия SQL Server. Можете да постигнете тази цел по няколко начина.
Разгледайте плана за обяснение
Планът за обяснение показва какво ще направи SQL Server при изпълнението на заявката, включително таблиците, към които ще се присъедини, типа на присъединяването, което ще извърши, броя на редовете, които ще докосне, и индексите, които ще използва.
Какво може да ви каже планът за обяснение? От една страна, можете да видите как да подобрите самата заявка, например, като премахнете ПРИСЪЕДИНЯВАНЕ НА ВГЛАЖДЕН LOOP, което един от разработчиците на базата данни добави към огромна таблица. Или можете да разберете от плана за обяснение, че трябва да създадете или възстановите индекс за определена таблица.
Планът за обяснение е добра отправна точка за профилиране на заявки, дори преди действително да изпълните подозрителни заявки.
Изпълнете заявката
За да изпълните заявките и да видите кои ресурси засягат по време на изпълнение, първо създавате следи, за да маркирате събития, когато се случват. С трассировките можете да улавяте данни и да следите за възникване на грешки. Инструментът за профилиране съхранява данните, заснети от проследяванията, и ги показва по начин, който ви улеснява при намирането и отстраняването на проблемни заявки.
Комбинацията от следите и инструмента за профилиране може да отговори на много въпроси:
- Кои заявки консумират най-много памет?
- Колко време отнема изпълнението на всяка заявка?
- Кои ключалки задава SQL Server за всяка заявка?
- Кои заявки може да изпълнява SQL Server от буферния кеш? Колко често трябва да отива на диск?
- Колко реда разглежда всяка заявка?
- Колко заявки на минута изпълнява базата данни?
Ще получите най-точното четене, като изпълните заявката във вашите производствени бази данни, но това също може да забави обработката от вашите клиенти и потребители в реалния свят. Ако можете, тествайте първо на разработка или тествайте екземпляри, където не се състезавате за памет или I/O с производствения си екземпляр.
Говорейки за клиенти и потребители, вашата цел в профилирането на заявки е да ги направите щастливи. Профилирането може лесно да разкрие десетки проблеми във вашата база данни, но причината да отворите черната кутия е да разрешите най-болезнените проблеми. След заснемане на данни от ден или два нормална употреба, можете да откриете проблемите с производителността на SQL сървъра, които създават най-много проблеми на потребителите. Може би липсващ индекс забавя извличането на записи или твърде много индекси забавят вмъкването на записи и актуализациите на базата данни. Може би често използвана заявка събира информация, за която вече никой не се интересува.
Използвайте разумно инструментите за профилиране
Инструментите за профилиране ви спасяват от досадния процес на ръчно настройване на всяко събитие, филтър и извикване на процедура за всичко, което искате да проследите. С толкова много неща, които се случват в черната кутия на производителността на SQL Server, можете лесно да уловите твърде много данни, за да видите гората за дърветата.
Добрите инструменти ви позволяват внимателно да изберете това, което проследявате, така че например да не улавяте стотици събития Lock:Acquired и ненужно да запълвате дисплея си с тях. Ако обаче трябва да проучите често срещано събитие, използвайте филтри като име на приложение или име на таблица.
Вместо да записвате данни за проследяване в таблица в база данни, помислете за запазването им в собствен отделен файл. Това предпазва режийните разходи на проследяването да не се превърнат в тежест за SQL Server и потенциално да изкривят резултатите. Ако вашият инструмент за профилиране предпочита данни, извлечени от таблица, можете да импортирате данните от файла в таблицата по-късно.
Подобрете мониторинга на производителността на SQL Server с профилиране на заявки
Вашите потребители стоят далеч от черната кутия на производителността на SQL Server, но не е нужно. Профилирането на заявка е начинът, по който отваряте кутията, разбирате какво се случва вътре и започвате да отстранявате неизправности.
Но не чакайте, докато имате проблеми, за да го използвате. Профилирането на заявка е по-скоро като проверка на маслото, отколкото подмяна на двигателя. Помага при обичайните DBA задължения за актуализиране на остарели заявки и промяна на дизайна, така че базите ви данни да са в крак с промените в бизнеса.