• 金仓数据库 KingbaseES插件参考手册(3. amcheck)


    3. amcheck

    3.1. 插件amcheck简介

    amcheck提供的函数可以让用户能验证关系逻辑结构的一致性,如果结构错误会报错。 B树的验证函数会检查逻辑结构中应该满足的多种条件。

    索引扫描以及其他操作的正确性依赖这些结构的正确性。例如,一些函数会验证B树页面中 所有索引项都按照逻辑顺序(比如text类型列上的B树索引项应该按照词典顺序)排列。

    如果这个条件由于某种原因不成立,我们可以预计受影响页面上的二分搜索将无法正确的执行索引扫描,导致整个SQL查询得到错误的结果。

    amcheck函数默认只能由超级用户使用。

    • 插件名为 amcheck

    • 插件版本 V1.2

    3.2. 插件amcheck加载方式

    CREATE EXTENSION amcheck;
    

    3.3. 插件amcheck的参数配置

    无需配置任何参数

    3.4. 插件amcheck的使用方法

    插件提供以下函数

    bt_index_check(index regclass, heapallindexed boolean) returns void
    

    bt_index_check验证指定的B树索引的逻辑结构正确性。

    示例

    SELECT bt_index_check('sys_package_oid_index', false);
     bt_index_check
    ----------------
    
    (1 row)
    

    示例中函数执行没有报错,指定索引的逻辑结构是正确的。

    bt_index_check对目标索引及其所属的堆表加AccessShareLock。这个锁模式和简单SELECT语句在关系上加的锁模式相同。bt_index_check不验证跨越父子关系的结构条件。在heapallindexed为true时会验证堆表的所有元组都有对应的索引项存在。这个行为是在完整验证和减少对业务的影响间的权衡,函数可以作为快速的轻量验证使用。

    bt_index_parent_check(index regclass, heapallindexed boolean, rootdescend boolean) returns void
    

    bt_index_parent_check验证指定的B树索引的逻辑结构正确性。

    当heapallindexed参数为true时,函数验证堆表的所有元组都有对应的索引项存在。和bt_index_check不同,函数会验证索引结构中的父子关系,会检查父节点是否有缺失的down link。当可选参数rootdescend值为true时,函数会通过从根页面开始搜索来查找叶节点的元组。bt_index_parent_check执行的检查是bt_index_check执行检查的超集。

    bt_index_parent_check对目标索引及其所属的堆表加ShareLock,这个所模式会阻塞INSERT、UPDATE以及DELETE的并发数据修改,同时防止所属堆表被VACUUM。

    注意该函数只在其运行期间而不是整个事务期间持有锁。bt_index_parent_check的额外验证有更大可能检测到索引结构的异常,但与bt_index_check不同,函数不能在开启hot_standby的备机上使用。

    3.5. 插件amcheck卸载方法

    DROP EXTENSION amcheck;
    

    3.6. 插件amcheck升级方法

    通过 ALTER EXTENSION升级插件。

    示例,升级到 1.1:

    ALTER EXTENSION amcheck UPDATE TO '1.1';
  • 相关阅读:
    基地树洞 | 自动化小系列之OS脚本篇
    数字签名与数字信封
    每日面试1题-如何防止CDN防护被绕过
    分布式事务解决方案之【Hmily实现TCC事务】
    《Linux运维实战:基于银河麒麟V10+鲲鹏920CPU部署DM8数据库主备集群》
    Hadoop单个节点的磁盘均衡
    git快速上手指南
    安卓APP源码和报告——音乐播放器
    CentOS 7 安装 PostgreSQL12.2
    《线性代数》科教版教材必会习题
  • 原文地址:https://blog.csdn.net/arthemis_14/article/details/126488873