sqlserver版本:2014 操作,对线上库库存表加CCI。 表:dbo.product
然后就收到开发的消息,被告知查询报错。
消息 35371,级别 16,状态 1,第 1 行 具有聚集列存储索引的表不支持 SNAPSHOT 隔离级别。
嗯?什么情况,怎么会报错呢,把开发的语句拿出来看一下,答题如下:
select * from vproduct where column_a='aaa'
vproduct 是基于dbo.product的一个视图,看到这个。第一感觉就是可能和我们的事物隔离界别室友关系的。于是查看一下事物的隔离级别:
DBCC USEROPTIONS
嗯,看到好像是有点问题,我们指导sqlserver的默认隔离级别都是RC的隔离级别,为什么会被人修改为RC snapshot呢?不过我在本库执行了开发给的语句:
select * from vproduct where column_a='aaa'
什么鬼,没有问题啊,直接执行成功了。难道是视图更新原因,从新更新了一下视图,告诉开发去查,还是同样报错。
这就奇怪了,我不在把这个报错定义到隔离级别上了。发现开发是在alwayson群组的从库进行查询的,于是我也去从库模拟查询一下。
果然报错了。
这样来看就很明显了,主库可以查询,从库不能够查询,应该是CCI的支持原因:
额,最终发现是因为只读副本是不支持CCI的功能的,2016才会支持。结束