View 对象上的 LOP_INSERT_ROWS 和 LOP_DELETE_ROWS 操作是什么?

What is the LOP_INSERT_ROWS and LOP_DELETE_ROWS operation on a View object?

我正在检查 MS SQL 事务日志以调查问题,发现 SQL 上有大量 LOP_INSERT_ROWS 和 LOP_DELETE_ROWS 操作在单个 "user_transaction" 内查看对象持续超过一分钟。

我很好奇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

(抱歉,我不能公开所有源代码,只是打乱了表名,因为代码不是我写的。)

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

维护的原因是该视图的基础 table 之一已被修改。由于一个基础 table 行可以对应任意数量的视图行,因此可能会出现写入 activity.

的爆炸式增长

在table.

基础上执行的DML的执行计划中会发现索引视图的维护

索引视图权衡 DML 速度、存储 space 和缓冲池占用以提高查询速度。您决定这对您来说是否是一个好的权衡。


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