sqlserver 重建聚集索引后,记录丢失 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shyrock
V2EX    数据库

sqlserver 重建聚集索引后,记录丢失

  •  
  •   shyrock 2022-03-28 09:29:07 +08:00 1348 次点击
    这是一个创建于 1298 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近遇到一个怪异的现象,给大家分享一下。 有一张存储了 36w 条记录的表,存储了从 2013 年到现在的历史数据,并基于主键 retID 建了聚簇索引。

    最近新增的应用访问这张表的时候,发现有些条件查不出来数据, [现象 1 ] :比如同一条记录,用 BarCode 字段能查出来,用 CKCode 就不出来。我比较两者的查询计划,发现走的索引不一样。 于是尝试重建了该表的对应字段的索引,发现没有变化。 又尝试建了该表的聚簇索引,这下好了,建完之后,之前的 [现象 1 ] 消失了,但是整个表的记录数变成了 33w 条,有 3w 条消失了。。。

    有人知道这个问题的根本原因吗?

    6 条回复    2022-03-28 18:33:58 +08:00
    tzigone
        1
    tzigone  
       2022-03-28 11:23:10 +08:00
    10 年的数据 30w ,每个月几千条,主键数据丢失涉及数据文件损坏了,找备份 roll back 吧
    thinkershare
        2
    thinkershare  
       2022-03-28 11:44:40 +08:00
    你最好将数据先全部先备份,数据库以页为存储, 索引和页数据都在页上, 我怀疑物理某些页在磁盘扇区上物理损坏了.
    xsm1890
        3
    xsm1890  
       2022-03-28 14:03:07 +08:00
    不知道这个 36w 和 33w 是不是 count()计算出来的总数;如果不是的话,那很正常,对于很多数据库及存储引擎,表总数只是维护一个大概数,并不精确。不然的话,得备份恢复下了
    shyrock
        4
    shyrock  
    OP
       2022-03-28 14:36:40 +08:00
    @xsm1890 #3 厉害了,我又看了一下,count ()出来的总数没变,只是数据表属性页里面的条数少了 3w 。
    而且按 id 排序的话,发现中间 58000 到 90000 的 id 缺失了。
    如果总数没变,不知道这些 id 跑到哪里去了。。。
    shyrock
        5
    shyrock  
    OP
       2022-03-28 15:29:58 +08:00
    对这个现象我有一个 90%可能性的猜测:
    这个表本来有 36w 行数据,但是因为某些物理损坏,在聚集索引中丢失了中间 3w 行记录的引用。这时候从表的属性看,数据仍然有 36w 行,而且其他非聚集索引仍然完整指向了这 36w 行记录。
    当使用聚集索引时,中间的 3w 行数据查不到,但是用非聚集索引查找时能查到所有 36w 行记录。

    我尝试重建聚集索引,数据库引擎为了保持数据完整性,把 3w 行记录删除掉,并且通知其他非聚集索引重建。
    之后所有方式的查询结果一致,但是 3w 行记录就消失了。
    xsm1890
        6
    xsm1890  
       2022-03-28 18:33:58 +08:00
    @shyrock 关于 id 不见了,从你的表述来看,可能没你想的那么复杂;如果是自增 id ,可能只是单纯的 id 跳过,有很多种情况都会发生,这对业务,对数据都没有任何的影响。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1045 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 18:31 PVG 02:31 LAX 11:31 JFK 14:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86