`
lykops
  • 浏览: 86085 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Postgres间隔大量写IO的解决办法

 
阅读更多

概述

为了保证数据可靠性,同时还要保证好的读写性能,以及读写的一致性,经过多年的积累,REDO日志,shared buffer等基本成为关系型数据库的标配。postgres也不例外。

为了保证数据的可靠性,通常在将脏页面写入硬盘前,先将wal日志先写入硬盘,然后将修改的数据异步分批写入。

为了保证好的读写性能,修改的数据先写到shared buffer中,而不是直接写入硬盘,因为数据页很离散(修改的数据分布在不同的表中)。数据库会把wal日志顺序写入硬盘中。

postgres提供两种方式写:write和fsync。区别是:

write:数据库会将buffer中的脏页根据写入策略将老化的脏页面写到OS,OS再根据自己的调度算法将脏页写入硬盘。
fsync:数据库直接调用OS的fsync函数,直接写入硬盘。

OS层面

涉及到几个内核参数,同时还涉及到文件系统。

dirty_background_ratio

设置方法

1、修改systctl:vm.dirty_background_ratio
2、修改文件/proc/sys/vm/dirty_background_ratio

含义

在尝试执行writeback操作(即OS触发background flush线程刷脏页)之前内存脏页面比例。
控制文件系统的pdflush进程,在何时刷新磁盘。
单位是百分比,当写缓冲使用到系统内存多少时,pdflush开始向磁盘写出数据。
增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。
但当需要持续、恒定的写入场合时,应该降低其数值。缺省值5。

dirty_expire_centisecs

设置方法

1、修改systctl:vm.dirty_writeback_centisecs
2、修改文件/proc/sys/vm/dirty_expire_centisecs

含义

background flush线程将存活时间超过该值的脏页刷盘(类似LRU)。
数据可以保持为dirty状态的最大时间,超过该值pdflush进程就开始考虑写到磁盘中去。
单位是1/100s。缺省30000,也就是30s。
对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。
建议设置为1500,也就是15秒算旧。

dirty_ratio

设置方法

1、修改systctl:vm.dirty_ratio
2、修改文件/proc/sys/vm/dirty_ratio

含义

控制文件系统的文件系统写缓冲区的大小,单位是百分比。
当脏页比例达到该值,用户进程在调用write时,会触发flush磁盘的操作。表示当写缓冲使用到系统内存多少时,开始向磁盘写出数据。
当一个任务(或者进程)在脏页面过多的环境中执行文件写操作时,如果脏页面占用总内存的百分比高于dirty_ratio值,那么系统就执行脏页面写入硬盘操作。
增大会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。
但当需要持续、恒定的写入场合时,应该降低其数值,缺省值10。

dirty_writeback_centisecs

设置方法

1、修改systctl:vm.dirty_writeback_centisecs
2、修改文件/proc/sys/vm/dirty_writeback_centisecs

含义

控制内核的脏数据刷新进程pdflush的运行间隔,执行background flush线程的唤醒间隔。
单位是1/100s。缺省值是500,也就是5s。
适当减少该值有写操作削峰作用,如果系统是持续地写入动作,那么降低该值比较好,可以把尖峰写操作削平成多次写操作。
该参数值应小于dirty_expire_centisecs,但太小I/O太频繁,反而使系统性能下降。
据说1:6 (dirty_expire_centisecs: dirty_writeback_centisecs )的比例比较好。

dirty_background_bytes

如果内存非常大,当触发后台线程刷脏页时,可能需要刷很多脏页,导致尖锐的IO需求。

可以通过修改内核参数vm.dirtybackgroundbytes达到削尖的目的。

vm.dirtybackgroundbytes = 102400000 当脏页数达到了100MB,系统触发background flush线程刷脏页

数据库层面

wal日志写入方式fsync

fsync = on   
开启后强制把wal日志同步更新到磁盘,可以保证数据库将在OS或者硬件崩溃的后恢复到一个一致的状态。
虽然关闭,可以提升数据库性能,但无法保证数据库崩溃后数据一致性。
通常情况下需要打开这个参数,除非能经受掉电或硬件故障带来的数据丢失,否则不要关闭。

backend_flush_after

单位:BLCKSZ
当某backend process脏数据超过配置阈值时,触发调用OS sync_file_range,告诉os backend flush线程异步刷盘。  
从而削减os dirty page堆积。  

bgwriter_flush_after

单位:BLCKSZ
当bgwriter process脏数据超过配置阈值时,触发调用OS sync_file_range,告诉os backend flush线程异步刷盘。  
从而削减os dirty page堆积。  

checkpoint_flush_after

单位:BLCKSZ
当checkpointer process脏数据超过配置阈值时,触发调用OS sync_file_range,告诉os backend flush线程异步刷盘。  
从而削减os dirty page堆积。  

wal_writer_flush_after

单位:BLCKSZ
当wal writer process脏数据超过配置阈值时,触发调用OS sync_file_range,告诉os backend flush线程异步刷盘。  
从而削减os dirty page堆积。  

分享到:
评论

相关推荐

    target-postgres:Postgres的Singer.io目标

    目标Postgres postgres目标,与Singer抽头生成的Singer流一起使用。特征为流创建SQL表使对象扁平化到父对象表中将行... 在~/singer.io/target_postgres_config.json创建一个,其中包含postgres连接信息和目标postgres模

    Postgres-XL集群修炼之路—主流MPP解决方案.txt

    曾经风靡一时的MPP解决方案Greenplum是基于postgres-xl的8.2版本封装的,已经停止更新,逐渐被Postgres-XL新版本取代。 Postgres-XL是开源的postgresql集群,是由多个独立的PostgreSQL实例组成,它们分布在不同的...

    CodeSmith8.0.1 连接postgres报错问题解决

    标题 "CodeSmith8.0.1 连接postgres报错问题解决" 涉及到的是在使用CodeSmith工具版本8.0.1时遇到的一个特定问题,即尝试连接到PostgreSQL数据库时出现错误。PostgreSQL是一种开源的关系型数据库管理系统,而...

    postgres 主从

    ### Postgres 主从配置详解 #### 一、概述 PostgreSQL 是一款强大的开源关系型数据库管理系统,被广泛应用于各类业务场景之中。为了提高系统的可用性和数据的安全性,通常会搭建主从架构,即一个主数据库负责写...

    postgres数据库用户手册

    PostgreSQL,通常称为postgres,是一种强大的开源关系型数据库管理系统(RDBMS),在全球范围内被广泛应用于各种规模的应用程序。这份“postgres数据库用户手册”提供了一套详尽的指南,涵盖了从初学者到高级开发...

    postgres数据库中文手册

    《postgres数据库中文手册》是为数据库管理员、开发者和学习者提供的宝贵资源,它详细阐述了PostgreSQL数据库系统的基础知识、语言特性和编程规范。PostgreSQL,通常简称为postgres,是一种功能强大的开源关系型...

    Postgres数据库基于持久内存的优化探索.pptx

    Postgres数据库基于持久内存的优化探索 Postgres数据库基于持久内存的优化探索是指使用持久内存(Persistent Memory,简称PM)来优化Postgres数据库的性能。PM是一种新型的存储硬件,具有高速、低延迟、高容量、...

    postgres用户下ssh无密码登录

    Postgres用户下SSH无密码登录 SSH(Secure Shell)是一种安全的远程登录协议,用于远程管理Linux系统。...本文将详细介绍Postgres用户下SSH无密码登录的实现方法。...这种方法可以提高服务器管理的效率和安全性。

    tomcat、JDK、postgres环境搭建

    Tomcat、JDK、Postgres 环境搭建知识点总结 一、Linux 操作系统简介 Linux 是一套免费使用和自由传播的类 Unix 操作系统,由全世界各地的成千上万的程序员设计和实现。Linux 的出现最早开始于芬兰赫尔辛基大学学生...

    postgres odbc x64

    【Postgres ODBC x64】是针对Windows 64位操作系统的PostgreSQL数据库系统的一个重要组件,它允许用户通过ODBC(Open Database Connectivity)接口与PostgreSQL进行数据交互。ODBC是一种标准的API,使得应用程序能够...

    postgres 代码生成器

    在C#编程环境中,使用Postgres作为数据库时,开发人员往往需要编写大量的重复代码来处理数据库操作。例如,创建ADO.NET实体、数据访问接口、数据访问类、业务逻辑类等。代码生成器则自动完成这些工作,显著提高开发...

    postgres_exporter-0.9.0.linux-amd64.tar.gz

    5. Prometheus配置中添加Postgres Exporter作为目标,设置拉取间隔。 使用Postgres Exporter时,可以自定义监控项,例如: - `pg_stat_database`: 显示每个数据库的统计信息,如连接数、缓存命中率等。 - `pg_stat_...

    postgressql连接数据库

    postgressql 连接数据库 和关闭数据库

    Postgres_Succinctly.pdf

    从给定文件的内容来看,这是一本关于PostgreSQL数据库的电子书,名为《Postgres_Succinctly.pdf》。本书由Peter Shaw编写,并由Daniel Jebaraj作序。这本书的版权属于Syncfusion公司,并且只能通过Syncfusion的网站...

    Postgres-XL数据库集群配置说明

    Postgres-XL是一个开源的SQL数据库集群解决方案,它构建在PostgreSQL之上,提供了横向扩展的能力。横向扩展意味着可以通过增加更多的服务器来提升数据库的处理能力,它特别适合于需要处理大规模并行数据处理任务的...

    postgres-12.19官方离线镜像安装包

    postgres-12.19官方离线镜像安装包

    浅谈基于Postgres-XL的分布式地质大数据集群架构.pdf

    总之,基于Postgres-XL的分布式地质大数据集群架构提供了一种有效的解决方案,用以应对日益增长的地质大数据处理需求。它能够通过分布式架构和并行处理技术,实现大数据的高效管理和分析,对地质信息系统的建设和...

    ARM架构国产操作系统postgres

    postgres_v9.6.8 arm架构 国产操作系统 欧拉操作系统 eulerOS 免安装版本postgres,开箱即用 启动方式:./bin/pg_ctl -D data -l logfile start 默认用户名密码:postgres、ft@135246,也可重命名data目录后执行./...

    Rails.Angular.Postgres.and.Bootstrap.2nd.Edition

    Create a usable and attractive login form using Bootstrap's styles, while ensuring the database table backing it is secure using Postgres' check constraints. See how creating an advanced Postgres ...

    postgres10.3 win64

    postgres,postgis,openlayer,网页GIS开发,geoserver

Global site tag (gtag.js) - Google Analytics