共计 1159 个字符,预计需要花费 3 分钟才能阅读完成。
PostgreSQL 表分区不同实现的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
pg_pathman 更新提供了更改查询和删除查询的支持. 由于使用了 PostgreSQL 查询计划挂钩,更新和删除规划在对单个分区查询时, 速度会有改善 其他方式的查询,依旧使用缓慢的继承查询规划 当然,UPDATE,DELETE 操作只涉及一个一个分区的情况似乎是最常见, 最需要优化的。
此外,分享一些基准测试。这一基准测试是一年的记账, 按天来做表分区,总计约 1 百万 (1M) 条数据 当然,这只是个测试示列,因为在实际中由于数据量太小, 没有人会分成这么多分区
但它仍然很高兴见到分区开销。下列操作的性能进行比较:
选择单行 (使用时间戳) SELECT one;
选择某一天的全部数据(查询单个分区的全部数据) SELECT one_partation
随机插入单行 (使用随机时间戳) INSERT
随机更新单行 (使用随机时间戳筛选) UPDATE
以下的分区方法进行了比较︰
单表,没有使用分区 pg_partman 扩展 pg_pathman 扩展
在 2xIntel Xeon CPU X5675 @ 3.07GHz, 24 GB 内存的服务器上, 数据库参数配置 fsync=off 使用 10 个线程可以得到如下的结果。
我可以得到以下结论
pg_pathman 显著优于 pg_partman, 主要是由于 pg_pathman 使用查询计划钩子, 而 pg_partman 使用内置的继承机制.
当选择查询或更新单个行时,pg_pathman 和普通表几乎是一样快, 插入单个行的差异是稍大一点,因为触发器用来的
在选择整个分区查询时,pg_partman 和 pg_pathman 时选择整个分区之间的区别不是那样数十倍(在查询单行时)。因为这时, 查询规划时间只占整个语句执行时间的一小部分。
随机 INSERT 时,pg_pathman 的执行速度仍然远远超过与 pg_partman, 是由于其他两者在在父关系上使用了触发器, 但是,pg_pathman 使用了快速的 C 函数来实现。
选择整个分区表分区由 pg_pathman 的时候是略高于从平原表中选择相同的行。这是因为在扫描整个表分区时,使用了顺序扫描,而索引扫描用于选择表的一部分。当数据量很大, 缓存不足以存下时, 这种差异预计会更大。
用于基准测试的 SQL 脚本,请参阅此依据。
create_*.sql 创建日记帐表使用分区的各种方法。pg_bench 的脚本: select_one.sql、select_day.sql、insert.sql 和 update.sql .
看完上述内容,你们掌握 PostgreSQL 表分区不同实现的示例分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!