fn_dblog() 函数在 SQL Server 2008 R2 上的输出说明

Explanation for the fn_dblog() function's output on 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

不幸的是,我实际上并不理解输出...我主要只关心该查询结果的最上面一行,它是事务日志中使用的最大数量的 space,简单!

但是,还有其他列,AllocUnitNameOperationContext。就我而言,我得到:

dbo.MyMassiveTable.PK_MyMassiveTable    LOP_MODIFY_ROW  LCX_TEXT_MIX        3848564 61.6838

...作为我的输出。但是 LOP_MODIFY_ROWLCX_TEXT_MIX 到底是什么意思?

显然我可以模糊地理解它与那个 table 的主键有关,它与 UPDATE 命令相关联,并且文本列发生了一些事情?

但我需要精确度!

任何可以帮助我理解为什么事务日志的这个特定部分如此巨大的人都会有很大的帮助!

这表明 table 包含某个大型对象数据类型的列,该列可能会被插入或更新 activity(即 MAX 数据类型,XML, CLR 数据类型或 IMAGE[N]Text).

dbo.MyMassiveTable.PK_MyMassiveTable 必须是 INCLUDE-s 一个或多个 LOB 列的聚集索引或非聚集索引。

LCX_TEXT_MIX大概表示text mix page:

A text page that holds small chunks of LOB values plus internal parts of text tree. These can be shared between LOB values in the same partition of an index or heap.

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));