Postgresql IO该怎么如何分析

发布时间:2022-01-04 09:51:40 作者:柒染
来源:亿速云 阅读:167

这篇文章将为大家详细讲解有关Postgresql IO该怎么如何分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

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

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

Postgresql IO该怎么如何分析

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

Postgresql IO该怎么如何分析

 其实说白了就是数据在内存和磁盘之间的交互过程,如果提取的数据不在内存中,则需要从磁盘将数据读入到 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

Postgresql IO该怎么如何分析

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

Postgresql IO该怎么如何分析

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

Postgresql IO该怎么如何分析

所以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 的设置是和你查询的性能有很大的关系。

关于Postgresql IO该怎么如何分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. PostgreSQL -- 性能优化的几个小tip
  2. 图解PostgreSQL--buffer的分配

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

postgresql

上一篇:如何求通过groupby()分组运算后每一组最大的值

下一篇:JS的script标签属性有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》