PostgreSQL数据库配置文件

PostgreSQL数据库配置文件

  • 配置文件postgresql.conf
    • 数据库连接认证参数
    • 数据库内存参数
    • WAL日志参数
    • 错误日志参数
  • 配置文件pg_hba.conf

PostgreSQL版本:10.5

检查数据库参数:

postgres=# select name,setting,unit from pg_settings 
where name in 
('max_connections','shared_buffers','Effective_cache_size',
'work_mem','maintenance_work_mem','wal_sync_method','wal_buffers',
'synchronous_commit','default_statistics_target',
'checkpoint_timeout','checkpoint_completion_target',
'max_wal_size','min_wal_size');name             |  setting  | unit 
------------------------------+-----------+------checkpoint_completion_target | 0.5       | checkpoint_timeout           | 300       | sdefault_statistics_target    | 100       | maintenance_work_mem         | 16384     | kBmax_connections              | 100       | shared_buffers               | 131072    | 8kBsynchronous_commit           | on        | wal_buffers                  | 2048      | 8kBwal_sync_method              | fdatasync | work_mem                     | 1024      | kB
(10 rows)

配置文件postgresql.conf

数据库连接认证参数

与数据库连接和安全认证相关的参数,可以参考pg_settings视图中的说明。

  • listen_address:监听客户端连接的TCP/IP地址。修改后需要重启数据库。支持逗号分隔的多个地址。设置成*或者0.0.0.0表示监听本机的所有IP地址,并且支持IPv6地址。
  • port:监听的TCP端口,默认为5432。修改后需要重启数据库。
  • max_connections:数据库的最大并发连接数。默认为100,修改后需要重启数据库。
  • authentication_timeout:客户端建立连接的超时时间,单位是秒。如果在该时间内没有完成客户端认证操作,则连接将被拒绝。默认为60s。

数据库内存参数

与数据库缓存和I/O相关的参数,对数据库性能调优非常重要。

  • shared_buffers:数据库使用的共享内存缓冲区大小。默认为128MB。建议配置为操作系统内存的25%~40%
  • temp_buffers:单个会话使用的临时缓冲区大小。默认值为8MB。可以在会话层面进行设置。
  • work_mem:工作内存,用于SORT操作和HASH操作。默认值为4MB。如果设置过小,排序操作和哈希操作会使用磁盘SWAP,会极大的降低系统性能;如果设置过大,进行排序和哈希操作的并发连接数大时,会耗费大量的系统内存。
  • maintenance_work_mem:维护工作内存,用于VACUUM、CREATE INDEX、REINDEX和ALTER DATABASE ADD FOREIGN KEY等数据库维护工作。默认为64MB。
  • autovacuum_work_mem:每个自动清理工作能够使用的最大内存。默认值为-1,表示使用maintenance_work_mem的值。
  • huge_pages:是否开启大页,可取值包括try、on和off。默认为try,会尝试使用大页启动服务,如果失败将通过普通的内存申请启动数据库服务。

🐬 内存参数配置须满足:

max_connections*work_mem + shared_buffers + temp_buffers + maintenance_work_mem < OS_PHYSIC_MEMORY

为PostgreSQL配置大页内存的方法如下:

#查看操作系统大页大小
grep Hugepage /proc/meminfo#计算所需大页数量
num_hpages = shared_buffers/Hugepagesize#设置大页数量
sed -i '\$ a\vm.nr_hugepages = ${num_hpages}' /etc/sysctl.conf#在数据库中启用大页
sed -i 's/.*huge_pages.*/huge_pages = on/g' $PGDATA/postgresql.conf#重启操作系统和数据库
reboot
pg_ctl start#检查大页
cat /proc/meminfo | grep -i huge

WAL日志参数

WAL日志的作用是保证数据一致性和事务完整性,对于数据库崩溃时进行事务恢复至关重要。

  • wal_level:WAL日志级别,可取值包括minimal、replica、logical。默认为replica,表示记录WAL日志归档和流复制所需的数据,包括在备库进行的只读操作。设置为minimal时,表示只写入在数据库崩溃后事务恢复所需要的信息。修改该参数后需要重启数据库。
  • fsync:默认为on,表示数据库将调用fsync函数来确保被更新的数据写入磁盘。该参数用于保证数据库在操作系统或硬件崩溃后能够恢复到一个一致性状态。关闭该参数可以提升数据库性能,但是会带来数据安全问题。
  • synchronous_commit:用于指定事务提交后何时向客户端返回成功。可取值包括on、remote_apply、remote_write、local、off。默认值为on。

错误日志参数

错误日志输出策略相关:

  • log_destination:指定数据库输出日志的格式,包括stderr、csvlog、syslog。默认为stderr,表示将错误日志重定向到标准错误输出;syslog表示输出到操作系统syslog日志中;csvlog表示生成CSV格式的错误日志。
  • logging_collector:设置为on时,表示启用日志收集器,会将捕捉到的stderr日志消息重定向到日志文件。
  • log_directory:日志文件所在的目录。
  • log_filename:日志文件名称格式。默认是postgresql-%y-%m-%d_%h%m%s.log
  • log_rotation_age:单个日志文件的最大生命周期,默认为1d。超过该时间后,会生成一个新的日志文件。
  • log_rotation_size:单个日志文件的最大大小,默认为10MB。超过该大小后,会生成一个新的日志文件。
  • log_truncate_on_rotation:表示是否开启日志轮转,默认为off。
  • log_file_mode:日志文件权限。默认为0600,表示只有数据库OS用户才能读写日志。

未开启日志轮转时,生成的日志文件不会过期,需要手动清理,否则可能导致文件系统空间被占满。假如日志文件只需保留7天,可以进行如下设置:

alter system set logging_collector=on;
alter system set log_filename="server_%a.log";
alter system set log_truncate_on_rotation=on;

然后重启数据库。这样每周会依次生成server_Mon.log、server_Tue.log、…、server_Sun.log七个日志文件,并且最新的日志文件会覆盖上一周生成的同名文件。

错误日志输出内容相关:

  • log_connections:是否记录每一次对数据库的连接尝试以及客户端认证成功的信息。默认为off。
  • log_disconnections:是否记录会话终止事件。默认为off。
  • log_duration:是否记录已完成SQL语句的执行时间。默认为off。
  • log_min_duration_statement:慢SQL执行时长。超过该时间的SQL文本和执行时间会被记录。默认为-1,表示不记录慢SQL。
  • log_lock_waits:是否记录锁等待信息,默认为off。
  • log_statement:是否记录特定类型SQL语句,可取值包括none、ddl(只记录DDL语句)、mod(记录DDL和DML语句)和all。默认为none。

🐟postgresql.auto.conf文件:

通过ALTER SYSTEM修改的配置参数会被记录到postgresql.auto.conf文件中。该文件不能手动修改。

配置文件pg_hba.conf

HBA即Host-Based Authentication,该配置文件记录了允许哪些IP地址的机器可以访问数据库。

[postgres@dbhost ~]$ cat $PGDATA/pg_hba.conf | grep -v '^$' | grep -v '^#'
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               trust 
host    all             all             ::1/128                 trust
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

其中:

  • 第一列表示允许的数据库访问协议。例如loal(UNIX域套接字连接)、host(TCP/IP连接)、hostssl(使用SSL加密的TCP/IP连接)、hostnossl(不使用SSL加密的TCP/IP连接)。
  • 第二列匹配数据库名称。all匹配所有数据库,replication表示允许流复制连接。
  • 第三列匹配数据库用户名。all匹配所有用户。
  • 第四列匹配客户端服务器地址。可以是主机名或者IP地址范围。
  • 第五列匹配认证方式。PostgreSQL支持的认证方式包括trust、reject、md5、ident等。

常用的认证方式:

  • trust:表示无条件地允许连接,不需要口令和其他任何认证。数据库服务器上的任何操作系统用户都可以使用数据库超级用户连接到数据库,存在安全隐患。
  • md5:表示在连接数据时需要使用密码验证。该认证方法要求客户端提供一个双重MD5加密口令来进行认证。
  • cert:表示使用SSL客户端证书进行认证。该认证方法只适用于SSL连接。

References
【1】https://www.postgresql.org/docs/current/runtime-config-resource.html
【2】https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server
【3】https://www.percona.com/blog/2018/08/31/tuning-postgresql-database-parameters-to-optimize-performance/
【4】https://pgtune.leopard.in.ua/#/

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

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

相关文章

vue3+koa+axios实现前后端通信

vue3koaaxios实现前后端通信 写了一个小demo来实现前后端通信,涉及跨域问题&#xff0c;非常简单可以给大家平时开发的时候参考 服务端&#xff1a; 目录结构如下&#xff1a; router index.js // router的入口文件 // 引入路由 const Router require("koa-router&quo…

记一次mysql事务并发优化

记一次mysql事务并发优化 背景 事情的情况大致是这样的。一个扣减库存的业务上线以后&#xff0c;隔几天会报一次错&#xff0c;错误内容如下&#xff1a; ERROR - exception: UncategorizedSQLException,"detail":"org.springframework.jdbc.UncategorizedSQ…

[蓝桥杯 2022 省 B] 统计子矩阵

题目描述 给定一个 NM 的矩阵 A&#xff0c;请你统计有多少个子矩阵 (最小 11, 最大 NM) 满足子矩阵中所有数的和不超过给定的整数 K。 输入格式 第一行包含三个整数 N, M和 K。 之后 N 行每行包含 M 个整数, 代表矩阵 A。 输出格式 一个整数代表答案。 输入输出样例 输入 #1 3…

Spring framework Day22:Aware接口

前言 在Spring框架中&#xff0c;有许多接口和类都有一个非常重要的作用——让我们能够更方便地构建应用程序和管理组件。其中&#xff0c;Aware接口就是其中一个非常重要的接口之一。通过实现该接口&#xff0c;我们可以让Spring容器感知到特定的组件和资源&#xff0c;并进行…

讲解 CSS 过渡和动画 — transition/animation (很全面)

前言 由于用户越来越注重 Web应用 的使用体验&#xff0c;随之而来的是 Web应用 需要提供了更加完善的 Web 动画 效果来实现以平滑的状态贯穿于用户的整个使用过程中。现在&#xff0c;这已经是司空见惯了&#xff0c;用户潜意识是希望可以获得更快的反馈响应和更友好的用户界…

Elasticsearch系列组件:Beats高效的日志收集和传输解决方案

Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎&#xff0c;设计用于云计算环境中&#xff0c;能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性&#xff0c;可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个…

接口自动化测试持续集成,Soapui接口功能测试参数化

按照自动化测试分层实现的原理&#xff0c;每一层的脚本实现都要进行参数化&#xff0c;自动化的目标就是要实现脚本代码与测试数据分离。当测试数据进行调整的时候不会对脚本的实现带来震荡&#xff0c;从而提高脚本的稳定性与灵活度&#xff0c;降低脚本的维护成本。Soapui最…

C#,数值计算——KMeans分类的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// K-Means classification /// </summary> public class Kmeans { private int nn { get; set; } private int mm { get; set; } private …

优维低代码实践:片段

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

5.12.webrtc接口调用过程

嗨&#xff0c;大家好&#xff0c;我是李超&#xff0c;在上节课中呢&#xff0c;我向你介绍了外接口的设计以及我们红接口展开之后的样子&#xff0c;对吧&#xff1f;那今天呢&#xff1f;我们再来看看整个接口调用过程。那整个这个调用过程啊&#xff0c;非常的复杂&#xf…

QCustomPlot实现曲线拖拽

本文内容目录 需求场景&#xff1a;一、选择控件二、将QCustomPlot库整合到你的Qt项目中1、下载源代码2、创建.pri 三、鼠标框选&#xff0c;实现坐标缩放四、曲线拖动1、定位曲线2、移动时改变曲线 五、问题的产生与解决1、查看源码2、修改本项目代码 需求场景&#xff1a; 曲…

【算法题】2906. 构造乘积矩阵

题目&#xff1a; 给你一个下标从 0 开始、大小为 n * m 的二维整数矩阵 grid &#xff0c;定义一个下标从 0 开始、大小为 n * m 的的二维矩阵 p。如果满足以下条件&#xff0c;则称 p 为 grid 的 乘积矩阵 &#xff1a; 对于每个元素 p[i][j] &#xff0c;它的值等于除了 g…

excel 日期与时间戳的相互转换

1、日期转时间戳&#xff1a;B1INT((A1-70*365-19)*86400-8*3600)*1000 2、时间戳转日期&#xff1a;A1TEXT((B1/10008*3600)/8640070*36519,"yyyy-mm-dd hh:mm:ss") 以上为精确到毫秒&#xff0c;只精确到秒不需要乘或除1000。 使用以上方法可以进行excel中日期…

行业追踪,2023-10-18

自动复盘 2023-10-18 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

Redis LFU缓存淘汰算法

前言 Redis 在 4.0 版本之前的缓存淘汰算法&#xff0c;只支持 random 和 lru。random 太简单粗暴了&#xff0c;可能把热点数据给淘汰掉&#xff0c;一般不会使用。lru 比 random 好一点&#xff0c;会优先淘汰最久没被访问的数据&#xff0c;但是它也有一个缺点&#xff0c;…

英语——分享篇——每日200词——1001-1200

1001——responsibility——[rɪˌspɒnsəbɪlətɪ]——n.责任——responsibility——res热死(拼音)ponsi胖子(谐音)bili比利(拼音)ty题(谐音)——热死的胖子比利做题时很有责任心——The responsibility for her family bears down on a young woman.——家庭的责任沉重地落…

攻防世界web篇-PHP2

直接点击进入到http网页中&#xff0c;会得到这样一个界面 这里&#xff0c;我最开始使用了burp什么包也没有抓到&#xff0c;然后接着又用nikto进行探测&#xff0c;得到的只有两个目录&#xff0c;当时两个目录打开后&#xff0c;一个是fond界面&#xff0c;一个是这个网页的…

【QT】常用控件——按钮组

继承Widget PushButton 设置图片&#xff0c;先导入图片资源&#xff0c;见&#xff1a;【QT】资源文件导入_复制其他项目中的文件到qt项目中_StudyWinter的博客-CSDN博客 在布局中添加图片 调整尺寸 toolButton 显示图片、文本 显示图片&#xff08;图片和文字都有时&#…

容器安全 - 利用容器的特权配置实现对Kubernetes容器的攻击

《OpenShift / RHEL / DevSecOps 汇总目录》 文章目录 准备环境利用特权配置对Kubernetes容器攻击privileged hostpathprivileged hostpidprivilegedhostpathhostpidhostipchostnetwork 参考 通过将运行 Pod 的 privileged 设为 true&#xff0c;容器就以特权模式运行在宿主…

使用Python+selenium实现第一个自动化测试脚本

这篇文章主要介绍了使用Pythonselenium实现第一个自动化测试脚本&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧 最近在学web自动化&#xff0c;记录一下学习过程。…