2、postgresql运行架构

2 运行架构

以为编译安装为模板讲解各个文件功能作用,切换为postgres用户

目录位置
数据库数据目录/pgdata/10/data
安装包目录/opt/pg10/

2.1 安装包目录详解

-bash-4.2$ pwd
/opt/pg10
-bash-4.2$ tree -L 1 .
.
├── bin				#应用程序
├── include			#c/c++的头文件
├── lib				#编译链接
└── share			#文档示例和拓展4 directories, 0 files
应用名称应用功能
clusterdb更多操作应用功能应用功能对一个PostgreSQL数据库中的表进行重新聚簇
createdb创建数据库命令
createuser创建一个postgresql的用户
dropdb删除数据库
dropuser删除用户
ecpg嵌入式 SQL C 预处理器,将把命令行中给出的每一个输入文件转换为相应的 C 输出文件
initdb创建一个新的数据库集群
pg_archivecleanup清理过期的 archive log 使用的命令
pg_basebackup对集群进行备份的基础命令
pgbench压测工具
pg_config打印当前安装版本的PostgreSQL的配置参数,便于想与PostgreSQL交互的软件包能够找到所需的头文件和库。
pg_controldata显示一个PostgreSQL数据库集簇的控制信息
pg_ctl初始化、启动、停止或控制一个PostgreSQL服务器
pg_dump备份数据库数据
pg_dumpall备份数据库,还有角色表空间
pg_isready检查一个PostgreSQL数据库服务器的连接状态的工具
pg_receivewal被用来从一个运行着的PostgreSQL集簇以流的方式得到预写日志
pg_recvlogical逻辑解码的插件,可用于脑裂时找回数据
pg_resetwal用于清理不需要的WAL文件,还可以用于篡改当前事务ID,可以恢复未被vacuum回收的元组
pg_restore用于恢复由 pg_dump 创建的任何非纯文本输出格式中的 PostgreSQL 数据库的应用
pg_rewindpg_rewind可以做实例间的同步
pg_test_fsync测试 wal_sync_method设置哪个值最快,还可以在发生认定的 I/O 问题时提供诊断信息。
pg_test_timing测量系统计时开销的工具,并确认系统时间永不倒退。
pg_upgrade用作大版本升级
pg_waldumpWAL日志解析工具
postgres可以启动数据库命令
postmaster守护进程
psql执行命令
reindexdb用于重建一个PostgreSQL数据库中索引的工具。
vacuumdb对一个PostgreSQL数据库进行垃圾收集和分析

2.2数据库数据目录详解

-bash-4.2$ pwd
/pgdata/10/data
-bash-4.2$ tree -L 1 .
.
├── base
├── global
├── pg_commit_ts
├── pg_dynshmem
├── pg_hba.conf
├── pg_ident.conf
├── pg_logical
├── pg_multixact
├── pg_notify
├── pg_replslot
├── pg_serial
├── pg_snapshots
├── pg_stat
├── pg_stat_tmp
├── pg_subtrans
├── pg_tblspc
├── pg_twophase
├── PG_VERSION
├── pg_wal
├── pg_xact
├── postgresql.auto.conf
├── postgresql.conf
├── postmaster.opts
└── postmaster.pid17 directories, 7 files
数据库数据目录对应功能
base每个数据库对应的子目录的存储
global包含pg_database及pg_control等公共文件视图
pg_commit_ts事物提交时间戳数据
pg_dynshmem动态共享内存子系统中使用的文件
pg_hba.conf客户端认证
pg_ident.conf用户名映射
pg_logical用户名映射
pg_multixact多事物状态数据
pg_notifyLISTEN/NOTIFY状态数据
pg_replslot复制槽数据
pg_serial已提交的可串行化事物相关信息
pg_snapshotspg_export_snapshot在此子目录中创建的快照信息文件
pg_stat统计子系统的永久文件
pg_stat_tmp统计子系统的临时文件
pg_subtrans子事物状态数据
pg_tblspc表空间的软连接
pg_twophase两阶段事物的状态文件
PG_VERSION版本信息
pg_wal事务日志文件预写日志
pg_xact事物提交状态数据
postgresql.auto.confalter system修改的配置参数
postgresql.conf参数配置文件
postmaster.opts上次启动的命令行选项
postmaster.pid守护进程

2.2 进程与内存架构

逻辑结构和物理存储结构

在这里插入图片描述

在这里插入图片描述

内存结构

本地内存:pg后台进程使用的内存

共享内存:由pg服务器所有进程使用

在这里插入图片描述

pg后端进程:由pg服务器启动,通过单个TCP和数据库连接,多个客户端连接时,设置max_connections可以控制客户端连接数量。

如果业务存在频繁的和数据库连接断开操作,会对性能有影响,最好接入连接池如pgbouncer或pgpllo-II

进程和相关参数

在这里插入图片描述

max_connections 活跃的并发连接数,最大连接数。

superuser_reserved_connections 为管理员保留的连接数。

checkpointer process

检查点进程,主要是缩短数据库实例恢复的时间。重要:在重启数据库之前,可以执行这个命令,加快后续数据库的恢复

检查点进程的职责:
数据刷新:检查点进程负责将数据库缓存中的数据块刷新到磁盘上。这是通过创建检查点来完成的,检查点是数据库状态的一个快照,包括了所有修改的数据块。
写前日志(WAL)管理:PostgreSQL使用WAL来记录所有修改,以便在系统崩溃后恢复数据。检查点进程会定期刷新WAL,减少恢复时间。
减少恢复时间:通过定期进行检查点,可以减少数据库启动时的恢复时间,因为需要恢复的数据量会减少。
释放WAL文件:随着WAL的刷新,旧的WAL文件可以被释放,避免无限制地占用磁盘空间。
配置检查点:检查点进程的行为可以通过参数进行配置,如checkpoint_timeout(检查点间隔时间)和max_wal_size(WAL文件的最大大小)。检查点的类型:
定期检查点:根据checkpoint_timeout参数设置的时间间隔自动触发。
请求检查点:由数据库管理员手动触发,或者在达到max_wal_size限制时自动触发。
检查点的执行过程:
检查点开始:检查点进程被触发,开始将内存中的数据刷新到磁盘。
刷新共享缓冲区:共享缓冲区中的数据块被写入到磁盘。
更新控制文件:更新控制文件以记录检查点的完成,包括WAL的位置和时间戳。
清理WAL:不再需要的WAL文件被清理,释放磁盘空间。

数据库默认配置

[root@localhost data]# cat postgresql.conf |grep checkpoint_timeout
#checkpoint_timeout = 5min		# range 30s-1d
[root@localhost data]# cat postgresql.conf |grep max_wal_size
#max_wal_size = 1GB

优化该参数建议

调整checkpoint_timeout参数:这个参数决定了触发检查点的时间间隔。对于大多数生产系统,可以使用30分钟到1小时之间的值,例如设置为checkpoint_timeout = 30min。
设置max_wal_size参数:这个参数定义了WAL日志文件的最大大小。它应该设置得足够高,以便检查点主要由checkpoint_timeout参数触发,而不是因为WAL日志量达到上限。例如,可以设置为max_wal_size = 4GB。
调整min_wal_size参数:这个参数定义了WAL日志文件的最小大小,通常可以设置为max_wal_size的一半,例如min_wal_size = 1GB。
设置checkpoint_completion_target参数:这个参数用于控制检查点的完成目标,其值在0到1之间。较高的值(例如0.9)意味着数据库会在更短的时间内完成检查点的写操作,留给操作系统更多的时间来刷新脏页到磁盘。
监控和评估:建议设置log_checkpoints=on,这样可以在服务器日志中记录检查点的统计信息,帮助评估和修正上述参数。
操作系统层面的调整:在Linux系统上,还需要考虑内核参数的设置,以避免因为大量脏页同时刷新到磁盘导致的IO风暴问题。例如,可以调整vm.dirty_ratio和vm.dirty_background_ratio等参数来控制脏页的刷新行为。
根据磁盘性能调整参数:如果评估发现磁盘的写能力无法满足检查点期间的IO需求,可能需要增加checkpoint_timeout的值,或者减少shared_buffers和max_wal_size的大小,以降低检查点的频率和每次检查点的IO压力。
考虑业务特点:不同的业务特点可能对检查点参数的设置有不同的要求。例如,写入密集型的业务可能需要更频繁的检查点,而读取密集型的业务则可能更注重减少检查点对性能的影响。
wal writer process

WAL记录了数据库的所有更改,使得在系统崩溃后可以从日志中恢复数据。WAL Writer进程(通常称为bgwriter,即后台写入器)是负责将这些事务日志写入磁盘的后台进程。

先写日志后写库,如果崩溃了,可以通过该日志恢复数据,减小了磁盘读写次数,为啥?因为日志提交的时候只需要文件刷新磁盘,不是修改所涉及到的数据文件。将就随机IO,变为顺序IO

相关参数配置

bgwriter_delay:控制WAL Writer进程写入WAL日志的时间间隔,单位为毫秒。较小的值可以减少WAL日志的延迟,但可能会增加CPU的使用率。
bgwriter_lru_maxpages:每次WAL Writer运行时,从最近最少使用的(LRU)列表中刷新到磁盘的最大页面数。
bgwriter_lru_multiplier:这个参数决定了WAL Writer进程刷新脏页的速率,相对于检查点进程的刷新速率。
checkpoint_completion_target:这个参数影响WAL Writer在检查点期间的行为,决定了检查点完成前应该完成多少写操作的比例。

优化参数建议

调整bgwriter_delay参数:这个参数控制WAL Writer进程休眠的时间,减少这个值可以使WAL Writer更频繁地运行,更快地将脏页刷新到磁盘,从而减少数据库缓冲区的负担。但是,设置得过小可能会增加CPU的使用率。根据测试,调整bgwriter_delay和其他相关参数后,性能测试的分数并没有提高,反而有所降低,说明需要根据实际情况进行细致调整 。
优化bgwriter_lru_maxpages和bgwriter_lru_multiplier参数:这两个参数影响WAL Writer进程每次运行时刷新的脏页数量。bgwriter_lru_maxpages设置每次WAL Writer运行可以刷新的最大页面数,而bgwriter_lru_multiplier则是根据系统新申请的缓冲页数来计算需要刷新的页面数的一个乘数。应该将maxpages和multiplier调整到允许的最大值,并减小delay到最小,以提高WAL Writer的效率 。
合理配置checkpoint_timeout和checkpoint_completion_target参数:checkpoint_timeout参数决定了触发检查点的时间间隔,而checkpoint_completion_target参数则用于平滑调度检查点的完成。根据磁盘性能和业务需求,适当增加checkpoint_timeout的值,并调整checkpoint_completion_target以优化检查点的频率和性能 。
监控和使用pg_stat_bgwriter视图:通过pg_stat_bgwriter视图可以了解WAL Writer的工作状态,如buffers_clean、buffers_backend和maxwritten_clean等字段,这些统计信息有助于评估WAL Writer的效率并进行相应的调整 。使用effective_cache_size参数:此参数提供给优化器一个内存大小的估计值,影响其选择扫描方式的决策。适当增加此值可以减少顺序扫描,提高索引扫描的可能性 。
调整shared_buffers参数:增加此参数的值可以增加数据库缓存的数据量,减少对物理存储的访问次数,从而提高性能 。
异步提交:通过设置synchronous_commit参数为off,可以使事务提交变得更快,但需要注意这可能会以牺牲数据一致性为代价 。
压缩WAL日志:使用wal_compression参数可以在存储WAL日志时节省空间,并减少I/O操作 。
autovacuum launcher process /workers

有时候数据库统计信息不准确,就可能和该参数有关。

Autovacuum Launcher Process

启动和监督:autovacuum launcher负责启动autovacuum worker进程,并监督它们的运行状态。调度任务:根据数据库的负载和配置参数,launcher会决定何时启动workers来执行维护任务,如自动清理(vacuuming)和重构索引(index rebuilding)。资源管理:launcher还负责管理autovacuum使用的系统资源,确保不会消耗过多的CPU或内存。配置参数:autovacuum的行为可以通过多个参数配置,如autovacuum_max_workers(最大工作进程数)、autovacuum_vacuum_threshold(触发清理的行数阈值)等。

Autovacuum Workers

执行任务:每个autovacuum worker进程都会执行具体的清理任务,如对表执行VACUUM或对索引执行REINDEX。
并发操作:多个workers可以并发运行,以提高维护效率。
智能调度:workers会根据当前数据库的负载情况智能地安排任务,避免在高负载时段执行影响性能的维护操作。
日志记录:workers在执行任务时会记录详细的日志信息,便于数据库管理员进行监控和故障排查

优化Autovacuum

监控pg_stat_activity:通过这个系统视图,可以查看当前运行的autovacuum进程和它们的状态。
调整配置参数:根据数据库的工作负载和性能需求,适当调整autovacuum相关的配置参数
分析日志文件:定期检查PostgreSQL的日志文件,了解autovacuum的工作情况和可能的瓶颈。
使用pg_autovacuum视图:这个视图提供了关于autovacuum触发和运行的统计信息,有助于分析和调整autovacuum的配置。
避免在高峰时段运行:如果可能,配置autovacuum避免在业务高峰时段执行,以减少对性能的影响。
定期手动执行维护任务:在某些情况下,根据业务特点,可能需要手动执行VACUUM或REINDEX,以补充自动维护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/389007.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Debian12 安装Docker 用 Docker Compose 部署WordPress

服务器准备: 以root账号登录,如果不是root,后面指令需要加sudo apt update apt install apt-transport-https ca-certificates curl gnupg lsb-release添加GPG密钥,推荐国内源 curl -fsSL https://mirrors.aliyun.com/docker…

c语言指针中“数组名的理解”以及“一维数组传参”的本质

数组名的理解 数组名就是数组首元素的地址。 例如:输入一个数组的所有元素,再打印出来。 另一种写法 以上可以看出:*arri) arr[i] 也即是:*(iarr)i[arr] 本质上无区别 1:数组就是数组,是一块…

DirectX修复工具下载安装指南:电脑dll修复拿下!6种dll缺失修复方法!

在日常使用电脑的过程中,不少用户可能会遇到“DLL文件缺失”的错误提示,这类问题往往导致程序无法正常运行或系统出现不稳定现象。幸运的是,DirectX修复工具作为一款功能强大的系统维护软件,能够有效解决大多数DLL文件缺失问题&am…

8.Redis的List类型

Redis中的list跟java中的LinkedList比较相似,可以看做是一个双向链表的结构。 既可以支持正向检索和反向检索。 特点 1.有序 2.元素可以重复 3.插入和删除快 4.查询速度一般 应用场景 点赞和评论功能,都会存在一个顺序,谁先评论&…

从入门到自动化:一篇文章掌握Python的80%

Python作为一种高级编程语言,以其简洁明了的语法和强大的功能性,在全球编程社区内享有极高的声誉。本文将带领你从Python的基础语法入手,介绍其常用库的应用,以及如何将Python用于数据分析、网络爬虫和简单的自动化任务&#xff0…

写一个图片裁剪的js,JavaScript图片裁剪插件PlusCropper

在前端开发中,图片裁剪是一个常见的需求。本文将深入解析一个功能完善的JavaScript图片裁剪插件——PlusCropper,带你一步步了解其实现原理和使用方法。 一、插件概述 PlusCropper是一个轻量级的JavaScript插件,它允许用户在网页上交互式地…

报表系统之Cube.js

Cube.js 是一个开源的分析框架,专为构建数据应用和分析工具而设计。它的主要目的是简化和加速构建复杂的分析和数据可视化应用。以下是对 Cube.js 的详细介绍: 核心功能和特点 1. 多数据源支持 Cube.js 支持从多个数据源中提取数据,包括 SQ…

为什么我工作 10 年后转行当程序员?逆袭翻盘!

今天文章的主人公暂且称他为 A 君。不过 A 君有点特别,非科班,工作 10 年后才转行 iOS 程序员。今年 36 岁,目前在某行业头部企业任职前端负责人,管理 40 人的前端团队。 废话不多说,我们开始 A 君(为了描…

二维码门楼牌管理应用平台建设:重塑社区管理新篇章

文章目录 前言一、平台背景与意义二、平台核心功能解析三、平台应用成效与展望 前言 随着智慧城市建设的不断深入,社区管理迎来了前所未有的变革。二维码门楼牌管理应用平台的诞生,正是这一变革中的璀璨明珠。该平台依托先进的地理信息系统(…

10年仓库管理经验:“管、存、发、盘”一文搞定!

前段时间去一家仓储设备公司交流学习,和一位有着10年经验的老仓管聊了个痛快,从他那儿学到了不少仓库管理的实践方法。 回来自己整理了一套仓库管理高效的实用方法,现在就来跟大家伙儿聊聊仓库管理中那些常见问题,以及我是怎么琢…

AI技术和大模型对人才市场的影响

012024 AI技术和大模型 2024年AI技术和大模型呈现出多元化和深入融合的趋势,以下是一些关键的技术方向和特点: 1. 生成式AI 生成式AI(Generative AI)在2024年继续快速发展,它能够创造全新的内容,而不仅仅…

月薪竟然高达60k,AI大模型凭什么?

你是不是最近经常看到或听到“AI大模型”这个关键词?我也是!所以好奇去Boss直聘上搜了下工作机会。看到结果时,我有点不淡定了!薪资竟然这么高! 这是我随便搜的结果,发出来给大家看看。 下面,我…

微信小程序之计算器

在日常生活中,计算器是人们广泛使用的工具,可以帮助我们快速且方便地计算金额、成本、利润等。下面将会讲解如何开发一个“计算器”微信小程序。 一、开发思路 1、界面和功能 “计算器”微信小程序的页面效果如图所示 在计算器中可以进行整数和小数的…

MySQL基础练习题16-电影评分

题目 准备数据 分析数据 总结 题目 查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。 查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。 准备数据 ## 创建库 create database db; u…

【C++】初识C++

目录 命名空间域的概念命名空间的概念示例1示例2 命名空间的嵌套定义命名空间的访问指定命名空间访问using访问命名空间对于嵌套命名空间的访问 输入&输出输入输出输入输出的特性换行 命名空间 在C/C中,变量、函数和类的定义很多,在某些方面我们难免…

一刷代码随想录(贪心5)

56. 合并区间 题意: 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: intervals [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: intervals [[1,4],[4…

windows子系统wsl完成本地化设置locale,LC_ALL

在 Windows 的子系统 Linux(WSL)环境中,解决本地化设置问题可以采取以下步骤: 1. **检查本地化设置**: 打开你的 WSL 终端(比如 Ubuntu、Debian 等),运行以下命令来查看当前的本…

51单片机和STM32区别

51单片机和 STM32 区别 51单片机和 STM32 是两种常见的微控制器,它们在架构、性能、外设接口、功耗和开发环境等方面有所不同。 1. 架构差异 51单片机基于传统的哈佛总线结构,采用 CISC 架构,而 STM32 基于 ARM Cortex-M 系列的32位处理器核…

CRMEB-众邦科技 使用笔记

1.启动项目报错 Unable to load authentication plugin ‘caching_sha2_password’. 参考&#xff1a;http://t.csdnimg.cn/5EqaE 解决办法&#xff1a;升级mysql驱动 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</ar…

【天机学堂】面试总结

写在前面&#xff0c;首先要将天机学堂包装一下&#xff0c;智慧教育平台》&#xff0c;暂时就想到这个。天机学堂文档 1.包装简历 待更新。。。