Sql server fn_dblog()函数的说明';s在SQL Server 2008 R2上的输出
我有一个查询来获取有关事务日志(Sql server fn_dblog()函数的说明';s在SQL Server 2008 R2上的输出,sql-server,tsql,ldf,Sql Server,Tsql,Ldf,我有一个查询来获取有关事务日志(.ldf)文件的一些基本信息。这是: WITH CTE AS ( SELECT AllocUnitName, Operation, Context, [Lock Information], SUM(CONVERT(BIGINT, [Log Record Length])) AS TotalTranLogBytes, SUM(CONVERT(BIGINT, [Lo
.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\u MODIFY\u ROW
和LCX\u TEXT\u MIX
究竟意味着什么呢
显然,我可以模糊地理解它与该表的主键有关,它与UPDATE命令关联,并且文本列发生了一些事情
但我需要精确
任何能帮助我理解为什么事务日志的这一特定部分如此庞大的人都会帮上大忙 这表示该表包含某个大型对象数据类型的列,该数据类型将进行插入或更新活动(即
MAX
datatype、XML
、CLR数据类型或IMAGE
或[N]Text
)
dbo.MyMassiveTable.PK_MyMassiveTable
必须是包含一个或多个LOB列的聚集索引或非聚集索引
LCX\u TEXT\u MIX
一个文本页面,其中包含LOB值和内部部分的小块
文本树。这些可以在同一环境中的LOB值之间共享
索引或堆的分区
LOP\u MODIFY\u行
通常在更新值时出现在日志中,但下面的示例显示insert也可以复制相同的日志结果
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));