预读和预扩展

本文介绍了堆表预读、堆表预扩展以及索引创建预扩展的简介、原理以及使用方法等。

前提条件

支持的PolarDB PostgreSQL版的版本如下:

  • PostgreSQL 14(内核小版本14.5.1.0及以上)

  • PostgreSQL 11(内核小版本1.1.1及以上)

说明

您可通过如下语句查看PolarDB PostgreSQL版的内核小版本的版本号:

  • PostgreSQL 14

    select version();
  • PostgreSQL 11

    show polar_version;

背景信息

PolarDB PostgreSQL版底层使用PolarFS(以下简称为PFS)作为文件系统。不同于 ext4 等单机文件系统,PFS在页扩展过程中,元数据更新开销较大。且PFS的最小页扩展粒度为4 MB。而PostgreSQL 8 KB的页扩展粒度并不适合PFS,将会导致写表或创建索引时性能下降。同时,PFS在读取大块页面时I/O效率更高。

为了适配上述特征,PolarDB PostgreSQL版设计了堆表预读、堆表预扩展、索引创建预扩展的功能,使运行在PFS上的PolarDB PostgreSQL版能够获得更好的性能。

简介

  • 堆表预读

    在PostgreSQL读取堆表的过程中,会以8 KB页为单位通过文件系统读取页面至内存缓冲池(Buffer Pool)中。PFS对于这种数据量较小的I/O操作并不是特别高效。因此,PolarDB PostgreSQL版为了适配PFS而设计了堆表批量预读。

    当读取的页数量大于1时,将会触发批量预读,一次I/O读取128 KB数据至缓冲池中。预读对顺序扫描(Sequential Scan)、Vacuum两种场景性能可以带来一倍左右的提升,在索引创建场景下可以带来18%的性能提升。

  • 堆表预扩展

    在PostgreSQL中,表空间的扩展过程中将会逐个申请并扩展8 KB的页。即使是PostgreSQL支持的批量页扩展,进行一次N页扩展的流程中也包含了N次I/O操作。这种页扩展不符合PFS最小页扩展粒度为4 MB的特性。因此,PolarDB PostgreSQL版设计了堆表批量预扩展。

    在扩展堆表的过程中,一次I/O扩展4 MB页。在写表频繁的场景下(例如装载数据),能够带来一倍的性能提升。

  • 索引创建预扩展

    索引创建预扩展与堆表预扩展的功能类似。索引创建预扩展特别针对PFS优化索引创建过程。在索引创建的页扩展过程中,一次I/O扩展4 MB页。这种设计可以在创建索引的过程中带来30%的性能提升。

    说明

    当前索引创建预扩展只适配了B-Tree索引。其他索引类型暂不支持。

原理介绍

  • 堆表预读

    堆表预读的实现步骤主要分为以下四步:

    1. 在Buffer Pool中申请N个Buffer。

    2. 通过palloc在内存中申请一段大小为N*页大小的空间,简称为p

    3. 通过PFS批量读取堆表中N * 页大小的数据拷贝至p中。

    4. p中N个页的内容逐个拷贝至从Buffer Pool申请的N个Buffer中。

    后续的读取操作会直接命中Buffer。数据流图如下所示:堆表预读

  • 堆表预扩展

    预扩展的实现步骤主要分为以下三步:

    1. 从Buffer Pool中申请N个Buffer,不触发文件系统的页扩展。

    2. 通过PFS的文件写入接口进行批量页扩展,并且写入为全零页。

    3. 对申请出来的页逐个进行页初始化,标识页的可用空间,结束预扩展。

  • 索引创建预扩展

    索引创建预扩展的实现步骤与预扩展类似,但没有涉及Buffer的申请。步骤如下:

    1. 写索引页时,通过PFS的文件写入接口进行批量页扩展,并且写入为全零页。

    2. 将Buffer Pool中已经构建好的索引页写入文件系统中。

使用指南

  • 堆表预读

    堆表预读的参数名为polar_bulk_read_size,功能默认开启,默认大小为128 KB。

    说明

    不建议用户自行修改该参数,128 KB是贴合PFS的最优值,自行调整并不会带来性能的提升。

    • 关闭堆表预读功能。

      ALTER SYSTEM SET polar_bulk_read_size = 0;
      SELECT pg_reload_conf();
    • 开启堆表预读功能并设置预读大小为128 KB。

      ALTER SYSTEM SET polar_bulk_read_size = '128 KB';
      SELECT pg_reload_conf();
  • 堆表预扩展

    堆表预扩展的参数名为polar_bulk_extend_size,功能默认开启,预扩展的大小默认是4 MB。

    说明

    不建议用户自行修改该参数值,4 MB是贴合PFS的最优值。

    • 关闭堆表预扩展功能。

      ALTER SYSTEM SET polar_bulk_extend_size = 0;
      SELECT pg_reload_conf();
    • 开启堆表预扩展功能并设置预扩展大小为4 MB。

      ALTER SYSTEM SET polar_bulk_extend_size = '4 MB';
      SELECT pg_reload_conf();
  • 索引创建预扩展

    索引创建预扩展的参数名为polar_index_create_bulk_extend_size,功能默认开启。索引创建预扩展的大小默认是4 MB。

    说明

    不建议用户自行修改该参数值,4 MB是贴合PFS的最优值。

    • 关闭索引创建预扩展功能。

      ALTER SYSTEM SET polar_index_create_bulk_extend_size = 0;
      SELECT pg_reload_conf();
    • 开启索引创建预扩展功能并设置预扩展大小为4 MB。

      ALTER SYSTEM SET polar_index_create_bulk_extend_size = '4 MB';
      SELECT pg_reload_conf();

性能对比

为了展示堆表预读、堆表预扩展、索引创建预扩展的性能提升效果,在PostgreSQL 14版本的PolarDB PostgreSQL版集群上进行了测试。

  • 规格:8核32 GB内存。

  • 测试场景:400 GB pgbench测试。

  • 堆表预读

    • 400 GB表的Vacuum性能对比如下所示:vacuum性能对比

    • 400 GB表的SeqScan性能对比如下所示:seqscan性能对比

    结论:

    • 堆表预读在Vacuum和SeqScan场景下性能提升了1-2倍。

    • 堆表预读大小在超过默认值128 KB之后对性能提升没有明显帮助。

  • 堆表预扩展

    400 GB表数据装载性能对比如下所示:数据装载性能对比

    结论:

    • 堆表预扩展在数据装载场景下带来一倍的性能提升。

    • 堆表预扩展大小在超过默认值4 MB后对性能没有明显帮助。

  • 索引创建预扩展

    400 GB表创建索引性能对比如下所示:创建索引性能对比

    结论:

    • 索引创建预扩展在索引创建场景下能够带来30%的性能提升。

    • 索引创建预扩展大小超过默认值4 MB对性能没有明显帮助。

    相关内容推荐

    crbc天才爱豆河南中学折纸枪大全简单雍正极品后宫红盖汾英睿达和镁光抖音直播怎么开花的结构示意图豪华车排行罗斯人周易和易经六年级生字表赛博朋克是什么情境化教学正常痣的样子图片话题作文题目大全祁连山在哪骆王宇平撇的写法古董评估维普科技期刊托福成绩几天出来厦大就业展信佳是什么意思酸梅汤饮料超星数据库乱色视频照片加水印怎么弄mpdf飞花令花的诗句压饼刘玥和黑人囍葛东琪耳机什么品牌的好石泉古镇直通车怎么开才有效果就蹭蹭变速圆周运动《菜根谭》c语言闰年蜀道难原文朗诵壁虎看看amfori厦门普陀山geneious册数量纲分析法玲珑塔绕口令全文选区优秀家长出阳神青花瓷绘画容量瓶图片国际刊号塞班岛之战3万左右最受欢迎二手车80后头像问题教学法急救包配置清单喉结照片附近车管所在哪里武当山紫霄宫苹果折叠手机ps评分标准图像尺寸投媒网durgodicm是什么意思香港居民轻松筹手续费汝南公主钟汉良多少岁smart分析法盛趣游戏鲁滨逊定律斗兽棋游戏规则名著段落摘抄金耀汉arctgx毁灭全人类欧美无毛多肉名字直流偏置拉伸强度计算公式五分硬币怎么要女生微信费蒙格新疆gdp排名成人片日本pr九狐狸保利天珺正反论证1t内存马凳钢筋npy文件胶水的主要成分桃夭赏析金镯子图片表达谢意的图片辩证的否定哈啰出行顺风车云之翼四年级生字表7步洗手法图片夸女人漂亮的成语寻求合作 国家信访网英文谐音劝学课文后朋克草莓番石榴眼位诗配画图片n倍角公式定制机器人重制版是什么意思铝合金微弧氧化主谓宾怎么区分我爱你意大利语jacobi矩阵读书节手抄报图片诗经300首全集优美的开头和结尾日本地址生成器贾玲多大短诗五首就去涩涩cnc什么意思旧镇自然犯游泳刘湘超个人心理学RSN企业授信节气门是什么东西盛趣游戏速买通中国年号英国下午茶文化五块钱如何花三天夺魂咒病犬男女激情啪啪农药分类二阶魔方还原教程职场人操老妇女如何查成绩童话书有哪些独特性坐腿杀武修正宗八段锦花小猪司机端新疆大列巴开封古城墙纸包澳标插头什么是渠道成语有什么l字母发音十四主星领英登陆阳安中学语文符号日期间隔计算叠被子图片梨泰院class洋葱螺八字对照表就业补贴怎么申请运动套装女款世界十大长河欧美无毛泥板荷兰人说什么语言普通话考试要求文盲率武汉市审计局诺曼底在哪里云服移动应用程序王的部首是什么秀茂坪童党烧尸案电化学极化定体问猪孩王显凤摄影师证怎么考齿轮渐开线gopro7中国果树宠物托运怎么弄绿僵菌禄丰龙红斑癣图片鸡飞狗跳图片鸡首壶稻盛和夫语录ai智能

    合作伙伴

    卡姆驱动平台

    idc.urkeji.com
    www.karczford.com
    www.wangluohr.cn
    www.andmedia.cn
    www.ddtxly.cn
    www.bbswimming.cn
    jl.urkeji.com
    dw.urkeji.com
    niu.seo5951.com
    www.maijichuang.cn
    idc.urkeji.com
    www.jsfengchao.com
    roldt.yhzu.cn
    top1.urkeji.com
    baidu.07yue.com
    www.clhczx.cn
    dw.urkeji.com
    dh.jsfengchao.com
    www.maijichuang.cn
    roldt.yhzu.cn