概述
为了保证数据可靠性,同时还要保证好的读写性能,以及读写的一致性,经过多年的积累,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堆积。
分享到:
相关推荐
目标Postgres postgres目标,与Singer抽头生成的Singer流一起使用。特征为流创建SQL表使对象扁平化到父对象表中将行... 在~/singer.io/target_postgres_config.json创建一个,其中包含postgres连接信息和目标postgres模
曾经风靡一时的MPP解决方案Greenplum是基于postgres-xl的8.2版本封装的,已经停止更新,逐渐被Postgres-XL新版本取代。 Postgres-XL是开源的postgresql集群,是由多个独立的PostgreSQL实例组成,它们分布在不同的...
标题 "CodeSmith8.0.1 连接postgres报错问题解决" 涉及到的是在使用CodeSmith工具版本8.0.1时遇到的一个特定问题,即尝试连接到PostgreSQL数据库时出现错误。PostgreSQL是一种开源的关系型数据库管理系统,而...
### Postgres 主从配置详解 #### 一、概述 PostgreSQL 是一款强大的开源关系型数据库管理系统,被广泛应用于各类业务场景之中。为了提高系统的可用性和数据的安全性,通常会搭建主从架构,即一个主数据库负责写...
PostgreSQL,通常称为postgres,是一种强大的开源关系型数据库管理系统(RDBMS),在全球范围内被广泛应用于各种规模的应用程序。这份“postgres数据库用户手册”提供了一套详尽的指南,涵盖了从初学者到高级开发...
《postgres数据库中文手册》是为数据库管理员、开发者和学习者提供的宝贵资源,它详细阐述了PostgreSQL数据库系统的基础知识、语言特性和编程规范。PostgreSQL,通常简称为postgres,是一种功能强大的开源关系型...
Postgres数据库基于持久内存的优化探索 Postgres数据库基于持久内存的优化探索是指使用持久内存(Persistent Memory,简称PM)来优化Postgres数据库的性能。PM是一种新型的存储硬件,具有高速、低延迟、高容量、...
Postgres用户下SSH无密码登录 SSH(Secure Shell)是一种安全的远程登录协议,用于远程管理Linux系统。...本文将详细介绍Postgres用户下SSH无密码登录的实现方法。...这种方法可以提高服务器管理的效率和安全性。
Tomcat、JDK、Postgres 环境搭建知识点总结 一、Linux 操作系统简介 Linux 是一套免费使用和自由传播的类 Unix 操作系统,由全世界各地的成千上万的程序员设计和实现。Linux 的出现最早开始于芬兰赫尔辛基大学学生...
【Postgres ODBC x64】是针对Windows 64位操作系统的PostgreSQL数据库系统的一个重要组件,它允许用户通过ODBC(Open Database Connectivity)接口与PostgreSQL进行数据交互。ODBC是一种标准的API,使得应用程序能够...
在C#编程环境中,使用Postgres作为数据库时,开发人员往往需要编写大量的重复代码来处理数据库操作。例如,创建ADO.NET实体、数据访问接口、数据访问类、业务逻辑类等。代码生成器则自动完成这些工作,显著提高开发...
5. Prometheus配置中添加Postgres Exporter作为目标,设置拉取间隔。 使用Postgres Exporter时,可以自定义监控项,例如: - `pg_stat_database`: 显示每个数据库的统计信息,如连接数、缓存命中率等。 - `pg_stat_...
postgressql 连接数据库 和关闭数据库
从给定文件的内容来看,这是一本关于PostgreSQL数据库的电子书,名为《Postgres_Succinctly.pdf》。本书由Peter Shaw编写,并由Daniel Jebaraj作序。这本书的版权属于Syncfusion公司,并且只能通过Syncfusion的网站...
Postgres-XL是一个开源的SQL数据库集群解决方案,它构建在PostgreSQL之上,提供了横向扩展的能力。横向扩展意味着可以通过增加更多的服务器来提升数据库的处理能力,它特别适合于需要处理大规模并行数据处理任务的...
postgres-12.19官方离线镜像安装包
总之,基于Postgres-XL的分布式地质大数据集群架构提供了一种有效的解决方案,用以应对日益增长的地质大数据处理需求。它能够通过分布式架构和并行处理技术,实现大数据的高效管理和分析,对地质信息系统的建设和...
postgres_v9.6.8 arm架构 国产操作系统 欧拉操作系统 eulerOS 免安装版本postgres,开箱即用 启动方式:./bin/pg_ctl -D data -l logfile start 默认用户名密码:postgres、ft@135246,也可重命名data目录后执行./...
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 ...
postgres,postgis,openlayer,网页GIS开发,geoserver