【发布时间】:2016-04-27 03:05:05
【问题描述】:
我正在检查 MS SQL 事务日志以调查问题,并发现在单个“user_transaction”中的 SQL 视图对象上存在大量 LOP_INSERT_ROWS 和 LOP_DELETE_ROWS 操作,持续时间超过一分钟。
我只是好奇对 View 对象执行 LOP_INSERT_ROWS 和 LOP_DELETE_ROWS 操作的含义是什么?它们是指创建和删除 View 对象的操作吗?
谢谢。
[2016-05-12 更新]
下面是我上面提到的user_transaction(0000:0f20ab9b)。它从 10:00:12 开始,到 10:01:44 结束。它在约 1.5 分钟内生成了超过 3,000,000 个事务日志操作。本次交易前半部分的 99% 是对 PartitionId=72057594040877056 的 LOP_DELETE_ROWS 操作,本次交易后半部分的 99% 是对同一个 PartitionId 的 LOP_INSERT_ROWS 操作。
因此,我通过以下查询检查了属于此 PartitionId=72057594040877056 的对象名称和 id,查询显示它是用户视图对象(id=125243501)。
以前有人见过这种症状吗?
[2016-05-25 更新] 视图定义如下:
CREATE VIEW [dbo].[get_xxxxxxxxxxxxxxxxxxxxx_vw]
WITH SCHEMABINDING
AS
SELECT Apple.rr_id, Apple.r_date, Apple.r_num, Apple.rr_num,
Apple.h_code, Apple.j_code, Apple.t_code,
Apple.is_scratch, Apple.result, Apple.is_replaced,
Apple.draw, Apple.weight, Apple.rating, Apple.gear,
Orange.s_id, Banana.p_id,
Orange.l_index, Orange.e_index, Banana.c_key,
Grape.price, Grape.ss_id, Grape.price_time, Grape.price_trend, Grape.choice_id,
Banana.c_id
FROM dbo.Apple, dbo.Pear, dbo.Orange, dbo.Grape, dbo.Banana
WHERE Apple.r_date = Pear.curr_r_date
AND Orange.c_id = Banana.c_id
AND Banana.c_id = Grape.c_id
AND Orange.rr_id = Apple.rr_id
(对不起,我不能透露所有的源代码,只是打乱了表名,因为代码不是我写的。)
【问题讨论】:
-
请张贴您看到的截图。
-
它应该说
LOP_INSERT_ROWS into <something>关心启发我们什么?您可能正在更改数据或索引......等等(查看 AllocUnitName 的内容) -
@TheGameiswar 贴出tlog内容截图。
-
选择特定交易ID的原因是什么..?请也发布您的视图定义
-
@TheGameiswar 由于有许多事务同时运行,我选择这个特定的 id 来显示这个事务的奇怪行为,它对视图对象做了很多 INSERT 和 DELETE 操作。此外,还发布了视图定义。
标签: sql-server sql-server-2005 transactions