【问题标题】:What is the LOP_INSERT_ROWS and LOP_DELETE_ROWS operation on a View object?什么是视图对象的 LOP_INSERT_ROWS 和 LOP_DELETE_ROWS 操作?
【发布时间】: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


【解决方案1】:

这是一个正在维护的索引视图。这是完全正常的。

维护的原因是该视图的其中一个基表已被修改。由于一个基表行可以对应于任意数量的视图行,因此写入活动可能会激增。

您会在对基表执行的 DML 的执行计划中找到索引视图维护。

索引视图权衡 DML 速度、存储空间和缓冲池占用以提高查询速度。您决定这是否适合您。


屏幕截图显示了在基表中修改的一行(第 2 行)。这会导致视图中出现大量删除/插入对。这可能是因为基表中的修改值导致视图索引中的行移动到不同的位置。

【讨论】:

  • 是的!谢谢!此视图中有两个索引,我刚刚检查过,每次更新“Pear”表时都会生成大量 LOP_DELETE_ROWS 和 LOP_INSERT_ROWS 操作。但是,当我删除索引时,此症状消失了。 :)
  • 我的视图没有索引,但仍然遇到同样过多的 lop 插入和删除。
  • @Asher 如果视图没有索引,则肯定没有物理维护操作。也许这些操作是在表上的普通索引上?还是由某些触发因素引起的?
猜你喜欢
  • 2012-02-15
  • 2011-04-02
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多