首页 > 其他分享 >KingbaseES Reindex concurrently过程

KingbaseES Reindex concurrently过程

时间:2024-03-29 18:47:14浏览次数:33  
标签:index Reindex concurrently sys 索引 膨胀 KingbaseES

前言

KES中我们经常遇到表膨胀情况,然而索引也会膨胀,随着业务DML语句的增长,稍不留神索引就会膨胀的很严重,膨胀后的索引只有VACUUM FULL才会真正释放磁盘空间,对于新构建的索引往往比更新的旧索引提供更好的访问性能。所以,我们需要重建膨胀的索引。

REINDEX命令需要ACCESS EXCLUSIVE锁,这是最高级别的锁,阻塞一切业务语句。所以我们会用到CONCURRENTLY 选项,这样锁级别就变成了SHARE UPDATE EXCLUSIVE锁,不会阻塞DML语句。

锁机制详见文档:KingabseES 锁机制 - KINGBASE研究院 - 博客园

Reindex Concurrently 的主要实现步骤

首先会根据传入的 RelationOid,找到所有需要进行 Reindex 的 IndexId,

拿到需要进行Reindex的索引Oid 之后,然后进入 Reindex Concurrently 的几个阶段:

1.创建新的索引,创建后表中有一个临时的新索引,名称以idx_ccnew开头;
2.build 新创建的索引,即扫描全表数据,构建新索引的内容;
3.validate 新创建的索引,将前一个阶段新插入的数据加入到索引中,这个和 create index concurrently 类似;
4.进行交换索引,将新创建的索引和它对应的需要 reindex 的索引进行交换,旧的索引标识为 invalid;
5.将旧的索引设置为 dead 状态,即 indislive、indisready、indisvalid 均为 false;

6.最后将旧的索引删掉;

如何识别无效索引:

SELECT c.relname as index_name, sys_size_pretty(sys_relation_size(c.oid)) 
FROM sys_index i JOIN sys_class c 
ON i.indexrelid = c.oid
WHERE -- New index built using REINDEX CONCURRENTLY c.relname LIKE '%_ccnew' 
-- In INVALID state AND NOT indisvalid 
LIMIT 10;

标签:index,Reindex,concurrently,sys,索引,膨胀,KingbaseES
From: https://www.cnblogs.com/kingbase/p/17921634.html

相关文章

  • KingbaseES 索引unusable的使用
    前言KingbaseES中,索引不可用原则介绍oracle数据库中,如果索引不可用(unusable),在进行DML操作时,会触发报错:索引不可用。在KES中如果设置索引不可用,插入数据不会报错,因为当索引被置为不可用状态后,如果要重新启动索引需要rebuild索引,此时会在新索引中重新组织表tuple数据。insert......
  • KingbaseES V8R6集群运维案例之---备库register故障
    案例说明:据现场实施人员说,备库执行了clone,启动数据库服务,执行'repmgrstandbyregister'后,无法将备库register到集群。适用版本:KingbaseESV8R6一、问题现象如下图所示,执行'repmgrstandbyregister',register失败:二、问题分析1、repmgrstandbyregister分析如下图所示:......
  • KingbaseES 避免wal日志占用大量磁盘空间
    背景wal日志一直增长很快,查看归档目录也在执行归档,归档无异常,是归档执行太慢的原因吗?还是wal日志生成的太快了的原因呢?现场环境wal日志的磁盘空间比较小。分析首先我们分析可否加速归档速度呢,因为如果能加快归档速度就可以缓解wal日志所在磁盘空间紧张的问题,答案是不可以。arc......
  • KingbaseES 普通用户逻辑导入时权限不足错误
    逻辑导入时权限报错:ERROR:mustbememberofrole"system"实验:1、在超级用户system下新建用户与schema:createuseruser1;createschemas1;修改user1的默认权限:test=#alterdefaultprivilegesinschemas1grantallontablestouser1;ALTERDEFAULTPRIVILEGESt......
  • KingbaseES V8R3集群运维案例之---集群启动“DATA_SIZE_DIFF 16 (MB)”故障
    案例说明:为保证集群数据的一致性安全,在主备库的数据相差“DATA_SIZE_DIFF>=16M"以上时,该备库不能参与主备切换,并且通过kingbase_monitor.sh启动集群时,集群将无法启动;本案例对此种故障做了复现,并测试了解决方法。适用版本:KingbaseESV8R3适用版本:KingbaseESV8R3一、案例......
  • KingbaseES V8R3备份恢复案例之---backup_label does not exist in KINGBASE_DATA
    案例说明:在KingbaseESV8R3集群主库执行sys_rman的全备时,出现‘backup_labeldoesnotexistinKINGBASE_DATA’的故障,如下图所示:适用版本:KingbaseESV8R3一、问题现象如下所示,数据库执行sys_rman物理备份:[kingbase@node201bin]$./sys_rman-Usystem-W123456-dtes......
  • KingbaseES集群运维案例之-- V8R3与V8R6集群wal函数应用
    案例说明:KingbaseESV8R3和V8R6集群在通过函数获取wal日志的相关信息时,两个版本的函数名称不同,本案例做了函数应用的对比和总结。适用版本:KingbaseESV8R3/R6一、KingbaseESV8R3相关函数Tips:在V8R3的版本,事务日志名称为xlog。1、查询数据库支持的函数test=#selectpron......
  • kingbaseES V8R6集群运维案例之---配置priority防止failover切换案例
    案例说明:在一主多备的架构中,需要配置一台备库在主备切换时,不能选举为主库。对于repmgr主备切换主库的选择算法如下:Tips:Repmgr选举候选备节点会以以下顺序选举:LSN---->Priority---->Node_ID。系统会先选举一个LSN比较大者作为候选备节点;如LSN一样,会根据Priority优先级进行比......
  • KingbaseES V8R6集群运维案例之---级联备库upstream节点故障
    KingbaseESV8R6集群运维案例之---级联备库upstream节点故障案例说明:在KingbaseESV8R6集群,构建级联备库后,在其upstream的节点故障后,级联备库如何处理?适用版本:KingbaseESV8R6集群架构:案例一:一、配置集群的recovery参数(allnodes)Tips:关闭备库的aut-recovery机制......
  • KingbaseES生成动态SQL
    1.动态SQL动态SQL在程序启动时会根据输入参数替换相应变量。使用动态SQL可以创建更强大和灵活的应用程序,但在编译时SQL语句的全文不确定,因此运行时编译会牺牲一些性能。动态SQL可以是代码或SQL语句的一部分,动态部分要么由开发人员输入,要么由程序本身创建。1.1动态SQL使用场景......