Изисквания: Има много причини, поради които SQL Server базата данни води до блокиране, в продукцията всеки може да срещне проблеми с блокиране, а конкретната причина може да не бъде открита само въз основа на необичайната информация за блокиранията на приложенията, затова е необходимо да се използват събития с разширения в SQL Server за проследяване на проблеми с блокиране и записване на конкретните детайли за възникването на блокиране.
Разширен преглед на събитието
Extended Events е лека функция за мониторинг на производителността, която позволява на потребителите да събират необходимите данни за наблюдение и разрешаване на проблеми. Тази функция ви позволява да разглеждате детайли за вътрешните операции на data engine за мониторинг на производителността и свързани с решаване на проблеми.
С архитектурата Extended Events (XEvents) потребителите могат да използват толкова или малко данни, колкото им е нужно, за да наблюдават, идентифицират или отстраняват проблеми с производителността на SQL Server, Azure SQL Database и Azure SQL Managed Instance. Разширените събития са силно конфигурируеми, леки и добре мащабируеми.
Препратка:
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Причини за блокирания
Блокиранията се причиняват от конкуриращи се заключвания на конкурентност в база данни, обикновено при многостепенни транзакции. Всяка потребителска сесия може да има една или повече задачи, изпълнявани от нейно име, като всяка задача може да изтегли или да изчака да изтегли различни ресурси. Следните видове ресурси могат да причинят блокиране и в крайна сметка да доведат до задънена улица.
- Заключвания: Заключвания, които чакат да изтеглят ресурси като обекти, страници, редове, метаданни и приложения, могат да причинят блокиране. Например, транзакция T1 има споделена ключалка (S заключване) на ред r1 и чака да получи ексклузивна заключваща (X заключване) за ред r2. Транзакция T2 има споделена заключваща система (S заключване) на ред r2 и чака да получи ексклузивен катинар (X заключване) за ред r1. Това води до заключващ цикъл, при който и T1, и T2 чакат един друг да освободят заключения ресурс.
- Worker нишки: Задачи, които се опашват за наличните worker нишки, могат да причинят блокиране. Ако опашка задача има ресурс, който блокира всички работни нишки, това ще доведе до блокиране. Например, след като сесия S1 започне транзакция и получи споделена заключване (S-заключване) за линия r1, тя преминава в режим на сън. Активна сесия, работеща върху всички налични работни нишки, се опитва да получи ексклузивна заключваща система (X-lock) за линия r1. Тъй като сесия S1 не може да получи работна нишка, не може да комитира транзакцията и да освободи заключването на линия r1. Това ще доведе до задънена улица.
- Памет: Блокиране може да възникне, когато едновременна заявка изчаква да получи памет и наличната памет не е достатъчна за нуждите ѝ. Например, две едновременни заявки (Q1 и Q2) се изпълняват като потребителски дефинирани функции, като съответно захващат 10 MB и 20 MB памет. Ако всяка заявка изисква 30 MB и общата налична памет е 20 MB, Q1 и Q2 трябва да изчакат един друг, за да освободят паметта, което ще доведе до блокиране.
- Паралелно запитване и ресурси, свързани с изпълнение: Координатори на обработка, генератори или потребителски нишки, обикновено свързани със превключвани портове, могат да блокират взаимно, когато съдържат поне един процес, който не е част от паралелна заявка, което води до задънени заключения. Освен това, когато паралелна заявка започне изпълнение, SQL Server определя степента на паралелизъм или броя на работните нишки въз основа на текущото натоварване. Блокиране може да възникне, ако настъпи неочаквана промяна в натоварването на системата, например когато нова заявка започне да се изпълнява в сървъра или когато системата изчерпи работните нишки.
- Ресурси от множествен набор от резултати от дейности (MARS): Тези ресурси се използват за контрол на кръстосаното изпълнение на множество заявки за активност под MARS.
Препратка:
Входът към хиперлинк е видим.
Логване на удължени събития при застояване
Създайте събитие за разширение, за да запишете информацията за блокиране със следната команда:
Започнете сесия с задънена ситуация
Прекратете сесия на събитието
Изтриване на сесия на събитие
Данни за сесия на запитване
Тестови блокирания
Създайте нова таблица Tab1 за тестване, създайте два нови прозореца за изпълнение и изпълнявайте съответно следните команди:
Задънена ситуация възниква по следния начин:
Транзакция (процес ID 68) с друг процес е блокирана на заключен ресурс и е избрана като жертва на блокиране. Моля, повторете транзакцията. Транзакцията (Process ID 68) беше блокирана на заключващи ресурси с друг процес и е избрана като жертва на блокиране. Повтори транзакцията.
Вижте данните от сесията на събитието, както е показано на следващата фигура:
Подробните XML данни са както следва:
(Край)
|