Запись в журнале транзакций SQL Server 2005: LOP_Format_Page - PullRequest
3 голосов
/ 19 ноября 2009

Я исследую проблему, связанную с большим расширением журнала во время процесса ETL, даже если база данных настроена в режиме массовой регистрации (и она не работает в режиме psuedo, простой, но действительно массовой записи)

Используя функцию :: fn_dblog (null, null) для проверки операций журнала транзакций и контекста операции, расширение журнала в значительной степени полностью сводится к регистрации операции LOP_FORMAT_PAGE в контексте LCX_Heap. (97% расширения - это операция, которая появляется в журнале более 600 тыс. Раз для одной загрузки данных.)

Вопрос в том, что делает / записывает lop_format_page, что сделал SQL?

Учитывая это, я должен быть в состоянии изменить логику и понять, какова цепочка причин / следствий, которая приводит к этому, и уметь изменять ETL, если это необходимо.

Я не ожидаю, что многие люди сталкивались с этим, уровень доступной детализации операций и контекста минимален.

Ответы [ 2 ]

3 голосов
/ 27 ноября 2009

Вы правы, что это очень тонко (ака нет!) Задокументировано. Я немного покопался в журналах и выполнил лот работ по сокращению журналов (в основном, гарантируя, что массовые вставки действительно выполнялись массово!). Так что я знаю, что это может быть сложно выследить.

Мое лучшее предположение, поскольку LOP_FORMAT_PAGE используется в контексте, заключается в том, что он очищает новую страницу - например, при разбиении страницы индекса, когда эта страница заполнена и требуется создать еще одну запись. Поэтому, если это предположение верно, вы можете отследить, что может быть причиной выделения целой пачки новых страниц.

Знаете ли вы, какие операции выполняются в ETL, когда вы видите расширение журнала? Было бы полезно понять этот контекст - пожалуйста, добавьте эту информацию к вашему вопросу, если это возможно.

Кроме того, вы можете запускать и изменять свой код ETL в тестовой среде? Вместо того, чтобы выяснить это непостижимое определение записи журнала, может быть проще изолировать проблему, запустив ETL, закомментировав некоторые шаги (или ограничив число затронутых строк), а затем посмотрев, какие изменения устранят проблему.

0 голосов
/ 02 декабря 2009

Я думаю, что вы и Джастин на ответ, но это не так уж сложно.

Процесс ETL (Извлечение, преобразование, загрузка) загружает данные в базу данных. Естественно, по мере заполнения страниц, новые должны быть размещены в куче.

...