Вимоги: Існує багато причин, чому база даних SQL Server спричиняє глухий кут; у виробництві всі можуть стикатися з проблемами глухих кутів, і конкретна причина може не бути виявлена лише на основі аномальної інформації про блокування застосунків, тому необхідно використовувати події розширень у SQL Server для відстеження проблем з глухими блокуваннями та фіксації конкретних деталей їх виникнення.
Розширений огляд заходу
Extended Events — це легка функція моніторингу продуктивності, яка дозволяє користувачам збирати необхідні дані для моніторингу та вирішення проблем. Ця функція дозволяє переглядати деталі про внутрішні операції движка даних для моніторингу продуктивності та пов'язаних із вирішенням проблем.
З архітектурою Extended Events (XEvents) користувачі можуть використовувати стільки або мінімально даних, скільки їм потрібно для моніторингу, ідентифікації або усунення продуктивності SQL Server, Azure SQL Database та Azure SQL Managed Instance. Розширені події дуже налаштовувані, легкі та добре масштабовані.
Посилання:
Вхід за гіперпосиланням видно.
Вхід за гіперпосиланням видно.
Причини глухих кутів
Глухі кути виникають через конкуруючі паралельні блокування в базі даних, зазвичай у багатокрокових транзакціях. Кожна користувацька сесія може виконувати одне або кілька завдань, де кожне завдання може отримувати або чекати на отримання різних ресурсів. Наступні типи ресурсів можуть спричинити блокування і зрештою призвести до глухого кута.
- Блокування: Блокування, що чекають на отримання ресурсів, таких як об'єкти, сторінки, рядки, метадані та додатки, можуть спричинити глухий кут. Наприклад, транзакція T1 має спільне блокування (S lock) у рядку r1 і чекає на отримання ексклюзивного блокування (X lock) для рядка r2. Транзакція T2 має спільний замок (S lock) у ряду r2 і чекає на отримання ексклюзивного блокування (X lock) для ряду r1. Це призводить до замкового циклу, де і T1, і T2 чекають один на одного, щоб звільнити заблокований ресурс.
- Робочі потоки: Черга завдань для доступних робочих потоків може спричиняти глухий кут. Якщо завдання в черзі має ресурс, який блокує всі робочі потоки, це призведе до глухого кута. Наприклад, після того, як сесія S1 починає транзакцію і отримує спільне блокування (S-lock) для рядка r1, вона переходить у сплячий режим. Активна сесія, що працює на всіх доступних робочих потоках, намагається отримати ексклюзивне блокування (X-lock) для рядка r1. Оскільки сесія S1 не може отримати робочий потік, вона не може зафіксувати транзакцію і зняти блокування на лінії r1. Це призведе до глухого кута.
- Пам'ять: Глухий кут може виникнути, коли одночасний запит чекає на отримання пам'яті, а наявної пам'яті недостатньо для його потреб. Наприклад, два одночасні запити (Q1 і Q2) виконуються як функції, визначені користувачем, що забирає відповідно 10 МБ і 20 МБ пам'яті. Якщо кожен запит потребує 30 МБ, а загальна доступна пам'ять становить 20 МБ, Q1 і Q2 мають чекати один на одного, щоб звільнити пам'ять, що призведе до глухого кута.
- Ресурси, пов'язані з паралельними запитами та виконанням: координатори обробки, генератори або споживчі потоки, які зазвичай асоціюються з комутаційними портами, можуть блокувати один одного, якщо містять принаймні один процес, який не є частиною паралельного запиту, що призводить до глухих кутів. Крім того, коли паралельний запит починає виконання, SQL Server визначає ступінь паралелізму або кількість робочих потоків на основі поточного навантаження. Глухий кут може виникнути, якщо відбувається несподівана зміна робочого навантаження системи, наприклад, коли новий запит починає запускатися на сервері або коли в системі закінчуються робочі потоки.
- Ресурси множинного набору результатів активностей (MARS): ці ресурси використовуються для контролю перехресного виконання кількох запитів активності в рамках MARS.
Посилання:
Вхід за гіперпосиланням видно.
Логування подій з розширеним блокуванням у глухій ситуації
Створіть подію розширення для запису інформації про глухий кут за допомогою наступної команди:
Початок сесії подій у глухому кутку
Зупинити сесію події
Видалити сесію події
Дані сесії запиту події
Тестові глухі кути
Створіть нову таблицю Tab1 для тестування, створіть два нових вікна виконання та виконайте відповідні команди:
Глухий кут виникає наступним чином:
Транзакція (ідентифікатор процесу 68) з іншим процесом заблокована на заблокованому ресурсі і була обрана жертвою глухої ситуації. Будь ласка, повторіть транзакцію. Транзакція (ідентифікатор процесу 68) була заблокована на ресурсах блокування з іншим процесом і була обрана жертвою глухого кута. Повторіть транзакцію.
Перегляньте дані сесії події, як показано на наступному рисунку:
Детальні XML-дані такі:
(Кінець)
|