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,简单!
但是,还有其他列,AllocUnitName
、Operation
和 Context
。就我而言,我得到:
dbo.MyMassiveTable.PK_MyMassiveTable LOP_MODIFY_ROW LCX_TEXT_MIX 3848564 61.6838
...作为我的输出。但是 LOP_MODIFY_ROW
和 LCX_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));
我想查询有关事务日志 (.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,简单!
但是,还有其他列,AllocUnitName
、Operation
和 Context
。就我而言,我得到:
dbo.MyMassiveTable.PK_MyMassiveTable LOP_MODIFY_ROW LCX_TEXT_MIX 3848564 61.6838
...作为我的输出。但是 LOP_MODIFY_ROW
和 LCX_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));