Високий PAGELATCH_ * і WRITELOG чекає. Вони пов'язані?


11

Ми спостерігаємо дуже високі типи очікування PAGELATCH_EX та PAGELATCH_SH, а також високий WRITELOG очікування. Я діагностував запит, що спричиняє очікування PAGELATCH і може усунути їх, зменшивши швидкість вставки в зайнятий кластерний первинний ключ, визначений значенням IDENTITY. Я розумію, що це явище відоме як суперечка із засувкою на останній сторінці.

Однак моє запитання полягає в тому, що коли вставляється нова запис, чи приймає SQL Server ексклюзивний PAGELATCH_EX на сторінку буфера, вставляє запис на сторінку буфера, записує запис у журнал транзакцій, а потім випускає ексклюзивний PAGELATCH_EX, як детально https: // www.microsoft.com/en-ie/download/details.aspx?id=26665 Сторінка 24. Або він записує запис в журнал транзакцій спочатку перед тим, як взяти PAGELATCH_EX, як детально "Розв’язання суперечки PAGELATCH на високо збіжних" INSERT Робочі навантаження - Довідкова інформація Посібник SQLCAT: Реляційний двигун

Якщо запис записується в журнал поза механізмом замикання, то я можу виключити повільне записування на диск, тому що чекає високий показник PAGELATCH. Але якщо засувка утримується до того часу, поки запис не буде загартований для реєстрації, я, мабуть, повинен врахувати WRITELOG.

Також, якщо наявність декількох некластеризованих індексів викликає засувку PAGELATCH_ * довше, тобто якщо в таблиці є кластеризовані, а декілька некластеризованих індексів додаються засувки і одночасно випускаються на кожну з сторінок буфера індексів?

Оновлення 1 Після читання confio-sql-server-writelog-wait слайд другий та загальна архітектура WAL. Зараз я розумію, що крок "Запис запису в журнал, що рядок був змінений", детально описаний в обох документах, стосується реєстрації на SQL Server зміни кеша журналу транзакцій, а не диска. Після завершення транзакції або заповнення буфера всі записи негайно передаються на диск.


1
Дивлячись на проблему, дуже схожу на цю правоту в цей момент ..
Дейв Лоуренс

Чи заглядали ви, можливо, високі VLF, що викликають проблеми?
Кін Шах

@Kin, ви маєте на увазі під собою повільний перехід журналу на диск, утримуючи відкриту засувку PAGELATCH_EX і викликаючи суперечку засувки?
Піксельовано

Немає причин, що впровадження SQL Server повинен генерувати запис журналу під засувкою сторінки. Чому вони зробили б це так? Неправдоподібний. Крім того, якби запис журналів робився під patchlatch, ви майже ніколи не побачите WRITELOG чекає. Одночасно може бути лише один тип очікування.
usr

Відповіді:


1

Однак моє запитання полягає в тому, що коли вставляється нова запис, чи приймає SQL Server ексклюзивний PAGELATCH_EX на сторінку буфера, вставляє запис на сторінку буфера, записує запис у журнал транзакцій та випускає ексклюзивний PAGELATCH_EX

Ви повинні зауважити, що засувка захищає лише фізичну цілісність сторінки, поки вона знаходиться в пам'яті, тому засувка буде прийнята, коли сторінка знаходиться в пам'яті. Припустимо, запис вставляється і для цієї сторінки потрібно отримати. По-перше, сторінка буде заблокована і збережена в пам'яті, потім вона буде зафіксована і інформація буде записана. Процес після цього був би

  • Створення журналу записів

  • Оновіть сторінку LSN, щоб вона відповідала запису журналу

  • Змінити дані (забруднити сторінку)

  • Відпустіть засувку

  • Здійснити початок транзакції

  • FlushToLSN комітету

  • Відпустіть замки

  • Здійснити транзакцію завершено

Для отримання більш детальної інформації та пояснень щодо вищезазначених кроків, будь ласка, ознайомтеся з презентаційним блогом Боб Дорра

Pagelatch * чекає не очікування вводу-виводу, і я бачив більшу частину часу, коли це очікування є помітним через суперечки щодо розподілу. Моя думка полягає в тому, що воно має щось робити з тим, як tempdb is configured. Отже, як налаштований ваш tempdb? Скільки файлів даних tempdb є? Переконайтесь, що вони однакового росту та однакового розміру. Коли створена нова сторінка, системні сторінки, такі як сторінки GAM, SGAM та PFS, потрібно оновити або отримати доступ до них, і коли SQL Server виявить суперечки у доступі до цих сторінок, таке очікування прийме до уваги.


Привіт @Shanky, заснований на sys.dm_os_waiting_tasks.resource_description у поєднанні з DBCC PAGE та типом PAGELATCH_ * Я виключив tempDB. Виходячи з ланцюжка подій Боба Дорра, схоже, що крок "Створення журналу журналу" завершено в механізмі замикання?
Пікселізований

3
Обоє є взаємовиключними подіями. Файл запису в журнал не має нічого спільного з тим, щоб зафіксувати свій справедливий SQL Server за протоколом WAL, щоб записати інформацію в журнал, перш ніж здійснити транзакцію
Shanky,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.