Пояснение к выводу функции fn_dblog() на SQL Server 2008 R2
У меня есть запрос, чтобы получить основную информацию о журнале транзакций (.ldf
) файл. Вот:
WITH CTE AS
(
SELECT
AllocUnitName,
Operation,
Context,
[Lock Information],
SUM(CONVERT(BIGINT, [Log Record Length])) AS TotalTranLogBytes,
SUM(CONVERT(BIGINT, [Log Record Length])) * 100 /
SUM(CONVERT(MONEY, SUM(CONVERT(BIGINT, [Log Record Length]))))
OVER() AS PercentOfLog
FROM
sys.fn_dblog(NULL,NULL)
GROUP BY
AllocUnitName,
Operation,
Context,
[Lock Information]
)
SELECT
AllocUnitName,
Operation,
Context,
[Lock Information],
TotalTranLogBytes,
PercentOfLog
FROM
CTE
WHERE
PercentOfLog >= 0
ORDER BY
TotalTranLogBytes DESC
К сожалению, я на самом деле не понимаю вывод... В первую очередь меня интересует только самая верхняя строка из результатов этого запроса, это самый большой объем пространства, используемый в журнале транзакций, просто!
Тем не менее, есть и другие столбцы, AllocUnitName
, Operation
а также Context
, В моем случае я получаю:
dbo.MyMassiveTable.PK_MyMassiveTable LOP_MODIFY_ROW LCX_TEXT_MIX 3848564 61.6838
... как мой вывод. Но что на ЗЕМЛЕ делает LOP_MODIFY_ROW
, а также LCX_TEXT_MIX
на самом деле значит?
Очевидно, я смутно понимаю, что это как-то связано с первичным ключом для этой таблицы, что он связан с командой UPDATE, и что с колонкой Text что-то происходит?
Но мне нужна точность!
Любой, кто может помочь мне понять, почему эта конкретная часть журнала транзакций такая ОГРОМНАЯ, очень помогла бы!
1 ответ
Это указывает на то, что таблица содержит столбец с некоторым типом данных больших объектов, который был подвержен операции вставки или обновления (т.е. MAX
тип данных, XML
, Тип данных CLR или IMAGE
или же [N]Text
).
dbo.MyMassiveTable.PK_MyMassiveTable
должен быть либо кластеризованным индексом, либо некластеризованным индексом, который INCLUDE
один или несколько столбцов больших объектов.
LCX_TEXT_MIX
предположительно указывает на текстовую страницу микширования:
Текстовая страница, содержащая небольшие фрагменты значений больших объектов плюс внутренние части текстового дерева. Они могут быть разделены между значениями больших объектов в одном и том же разделе индекса или кучи.
LOP_MODIFY_ROW
обычно появляется в журнале, когда значение обновляется, но приведенный ниже пример показывает, что вставка также может воспроизводить этот же результат регистрации.
CREATE TABLE dbo.MyMassiveTable
(
pk INT IDENTITY CONSTRAINT PK_MyMassiveTable PRIMARY KEY,
Blob1 NVARCHAR(MAX)
)
INSERT INTO dbo.MyMassiveTable
VALUES (REPLICATE(CAST(N'X' AS VARCHAR(MAX)), 3848564 / 2));