前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Postgresql IO 花落知多少

Postgresql IO 花落知多少

作者头像
AustinDatabases
发布2019-11-04 16:04:46
1.2K0
发布2019-11-04 16:04:46
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

今天要讲的是POSTGRESQL I/O系统的及周边一些系统的学习sharing .

首先我们先看一个图,这是一个PG内存结构的简图

但今天不是要说内存,而是要说关于buffer cache的问题,

其实说白了就是数据在内存和磁盘之间的交互过程,如果提取的数据不在内存中,则需要从磁盘将数据读入到 page change 并且如果数据在内存中改变了,需要将数据刷入到磁盘的一个过程。

同时我们需要了解以下几点

缓冲写:通常是非阻塞的 缓冲读取:通常阻塞

顺序写比随机写快 覆盖较大数据块的操作通常更快

除此之外,checkpointer ,Background writer , wal writer 等等这些都会用到I/O 系统。所以调优PostgreSQL I/O对于构建高性能、可伸缩的数据库架构是必不可少的。

如:

1 数据是否有预读机制,何种的预读机制能更有效的利用内存,而不是大量的I/O 读取。

2 更好的并发读取,可以采用更多的线程将需要的数据同时读取到系统中

由于POSTGRESQL 本身的buffer cache 并不全部HOLD 主, 而是联合OS的buffer 共同的对数据库进行处理,我们对比四种情况

1 没有 postgresql buffer ,OS buffer

2 没有 仅有OS 的cache 没有postgresql cache

3 POSTGRESQL OS cache 和 POSTGRESQL buffer 共有的情况

所以POSTGRESQL 对相关的操作做了更多的优化例如

1 当工作集不适合共享缓冲区时,将数据写回操作系统

2 减少后端写的操作

3 提高IO吞吐量/利用率,特别是随机IO

4 减少随机I/O ,将其更多合并,变为顺序I/O

5 通过shared_buffer映射数据结构与排序支持

与其他的数据库不同,postgresql 更加强调系统在数据存取中的作用,更新的系统例如LINUX 的核心的版本的提升,对postgresql本身是有利的。

在Postgresql 中有一些需要注意的地方

1 Checkpoint 的设置 ,例如 max_wal_size , min_wal_size, checkpoint_timeout and comkpoint_completion_target 等配置参数会提高你的或者降低你的磁盘系统的负担,可以将脏页集中的或者分散的刷入你的磁盘系统。

2 需要注意你每天的事务量,WAL arvhive 文件的归档数量, 监控你checkpoint 的频率,以及以上的参数是否适合你当前繁忙或者不繁忙的数据库 系统。

3 Vacuum ,清理已经废弃的数据也是很重要的,防止表膨胀,而vacuum 也会造成磁盘的系统的负担,同时也要对 log_autovacuum_min_duration 进行关注,查看自动的真空的时间长度。一般来说自动真空就可以满足大部分系统的需求,但对于大表或者热表,可以在夜间工作不繁忙的情况下,进行手动或者半自动的真空,例如repack 等

4 与MYSQL 在某些方面有一些一致性,例如尽量给每个查询分配适合的work_men尤其在一些经常用到 group by , order by 的系统,增加在内存可以解决的排序活动,避免更多要在磁盘进行排序后在给出结果的方式。

5 更合理有效的利用表空间,如同其他的数据库系统,将一个数据库分散在多个物理磁盘的方式,在POSTGRESQL 也是适用的,并且如果将 wal 日志放置在高级的I/O系统,例如SSD 磁盘,也是对系统性能有效的保证。

6 一般来说,在配置POSTGRESQL 中更倾向于将系统shared_buffer 进行合理的设置,但会忽略 effective_cache_size 的设置,如果想进行一个初始的设置可以将 shared_buffer 设置为总内存的 25%, 将effictive_cache_size设置为系统的额 50% 或更大。重要的 effictive_cache_size 的设置是和你查询的性能有很大的关系。

OK今天就到这里,有兴趣的DBER们可以发私信,可以将相关的PDF 和你们分享。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档