PG插件之amcheck用于检查B-Tree索引的完整性

0    596    1

Tags:

👉 本文共约3995个字,系统预计阅读时间或需16分钟。

pg11中新增了amcheck扩展来检查B-Tree索引的完整性

amcheck

amcheck 模块提供的函数让用户能验证关系结构的逻辑一致性。如果结构有效,则不会发生错误。

这些函数验证特定关系的结构表达中的各种不变条件\。索引扫描以及其他重要操作背后的访问方法的正确性都要依仗这些不变条件的成立。例如,在这些函数中,有一些负责验证所有B树页面中的项都按照“逻辑”顺序(比如,对于text上的B树索引,索引元组应该按照词典顺序排列)摆放。如果特定的不变条件由于某种原因无法成立,则我们可以预料受影响页面上的二分搜索将无法正确地引导索引扫描,最终导致SQL查询得到错误的答案。

验证过程采用索引扫描自身使用的同种过程来执行,这些过程可能是用户定义的操作符类代码。例如,B树索引验证依赖于由一个或者多个B树支持函数1例程构成的比较。操作符类支持函数的详情请见第 37.16.3 节

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

1. 函数

  • bt_index_check(index regclass, heapallindexed boolean) returns void

    bt_index_check测试一个B树索引,检查各种不变条件。用法实例:

    这个例子中的会话执行对数据库“test”中10个最大目录索引的验证。对于唯一索引会要求验证堆元组是否有对应的索引元组存在。由于没有错误报出,所有的被测索引都处于逻辑一致的状态。自然地,很容易将这个查询改为对支持验证的数据库中的每一个索引调用bt_index_checkbt_index_check要求目标索引及其所属的堆关系上的AccessShareLock。这种锁模式与简单SELECT语句在关系上所要求的锁模式相同。bt_index_check不验证跨越父子关系的不变条件,但是在heapallindexedtrue时将验证所有堆元组是否作为索引中的索引元组存在。当在生产环境中要求一个使用bt_index_check的例程进行轻量化损坏测试时,它常常需要在验证彻底性和减小对应用性能及可用性的影响之间做出权衡。

    本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
    PG插件之amcheck用于检查B-Tree索引的完整性后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
    验证码:
    请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部