栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Phoenix 索引失效及重建

Phoenix 索引失效及重建

Phoenix 索引失效及重建 失效原因

phoenix端数据写入时,hbase宕机或重启,导致写入中断,写入更新索引表失败,导致索引失效,很多情况下是重启hbase没有停phoenix服务导致索引数据不一致

现象 如下所示,可以看到有两个索引的状态为 PENDING_DISABLE ,其余是__active__的
 !tables 
TABLE_CATTABLE_SCHEMTABLE_NAMETABLE_TYPEREMARKSTYPE_NAMESELF_REFERENCING_COL_NAMEREF_GENERATIONINDEX_STATEIMMUTABLE_R
DZODS_DB-A_TB-A_INDEX_1INDEXPENDING_DISABLEfalse
DZODS_DB-A_TB-A_INDEX_1_2INDEXACTIVEfalse
DZODS_DB-B_TB-B_INDEX_1INDEXACTIVEfalse
DZODS_DB-B_TB-B_INDEX_2INDEXACTIVEfalse
DZODS_DB-B_TB-B_INDEX_3INDEXACTIVEfalse
DZODB_DB-X_TB-X_INDEX_5INDEXACTIVEfalse
DZODB_DB-X_TB-X_INDEX_6INDEXPENDING_DISABLEfalse
DZODB_DB-X_TB-X_INDEX_6_2INDEXACTIVEfalse
DZODB_DB-X_TB-X_INDEX_7INDEXACTIVEfalse

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kyIsqAfF-1640838170623)(C:/Users/ship1/AppData/Roaming/Typora/typora-user-images/image-20211230110212614.png)]

其中INDEX_STATE为pending_disable的为不可用索引,需要修复

也可在catlog表中查看索引状态,如下:
select 
TABLE_NAME -- 表名(索引表也是个表) 
,DATA_TABLE_NAME -- 数据表(我们保存数据的表,不包括索引表,虽然他也存数据)
,INDEX_TYPE -- 索引类型
,INDEX_STATE -- 索引状态
,INDEX_DISABLE_TIMESTAMP -- disable的时间 
from system.catalog 
where INDEX_TYPE is not null;

INDEX_STATE会有a,w,x,b等枚举

如果为a,e则为正常服务,x或d则为索引挂起,不可使用需要重建或者修复,i为不可用,但在自动修复,b为重建中

简写类型描述
aACTIVEACTIVE 表示索引表能被正常用于查询中。
bBUILDINGBUILDING 表示将从索引不可用的时间戳处重建索引直到重建完成。
dUNUSABLEUNUSABLE 表示索引将不能用于查询中,但索引仍然在不可用的维护状态
eUSABLEUSABLE 表示索引表能被正常用于查询中。
iINACTIVEINACTIVE 表示索引将不能用于查询中,但索引仍然在不可用的维护状态
xDISABLEDISABLE 表示索引将处于不可用的维护状态,同时将不能用于查询中。
rREBUILDREBUILD 表示索引将完成重建,同时一旦重建完成此索引将能被在此用于查询中。
修复
  1. 自动修复

    一般索引失效其会自动修复,但是基本上修复不好。

  2. 新建一张和失效索引一样的索引表

    数据量比较小的可以新建一张和原来一样的索引表,已解燃眉之急。但是如果数据量比较大那就BBQ了,可能会建很久(大几个小时。。

  3. 手动修复

    3.1 先找到失效的索引

    select TABLE_NAME,DATA_TABLE_NAME,INDEX_TYPE,INDEX_STATE,INDEX_DISABLE_TIMESTAMP from system.catalog where INDEX_TYPE is not null and INDEX_STATE in ('w', 'x', 'i', 'd');
    
    TABLE_NAMEDATA_TABLE_NAMEINDEX_TYPEINDEX_STATEINDEX_DISABLE_TIMESTAMP
    DZ_TR_NB_CMER_INDEX_2DZ_TR_NB_CUOMER1x1636963156228
    DZ_TR_NB_HEOTIFY_INDEX_1DZ_TR_NB_HENOTIFY1w1632738818454
    DZ_TR_NB_POLY_INDEX_6DZ_TR_NB_POY1w1634723285293

    3.2 设置索引为disable

    alter index DZ_TR_NB_HEFY_INDEX_1  on DZ.DZ_TR_NB_HEFY DISABLE;
    
    TABLE_NAMEDATA_TABLE_NAMEINDEX_TYPEINDEX_STATEINDEX_DISABLE_TIMESTAMP
    DZ_TR_NB_CMER_INDEX_2DZ_TR_NB_CUOMER1x1636963156228
    DZ_TR_NB_HEFY_INDEX_1DZ_TR_NB_HEFY1x1632738818454
    DZ_TR_NB_POLY_INDEX_6DZ_TR_NB_POY1w1634723285293

    3.3 重建

    alter index DZ_TR_NB_HEALTHNOTIFY_INDEX_1  on DZ.DZ_TR_NB_HEALTHNOTIFY REBUILD;
    
    TABLE_NAMEDATA_TABLE_NAMEINDEX_TYPEINDEX_STATEINDEX_DISABLE_TIMESTAMP
    DZ_TR_NB_HEOTIFY_INDEX_1DZ_TR_NB_HENOTIFY1b1632738818454
    DZ_TR_NB_POLY_INDEX_6DZ_TR_NB_POY1w1634723285293

3.4

!tables
INDEX_STATE刚开始为BUILDING,建好就ACTIVE了

比较

数据量小推荐方法2,生产推荐2和3其中3需要看运气我试过几次有可能会重建失败。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/687699.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号