【PostgreSQL】如何通过调整PostgreSQL配置参数提高数据库性能

news/2025/2/24 2:39:58

如何通过调整PostgreSQL配置参数提高数据库性能

      • 1. 数据库初始性能
      • 2. 内存相关参数
      • 3. WAL(Write-Ahead Logging)相关参数
      • 4. 并行查询相关参数
      • 5. 连接相关参数
      • 6. 根据情况调整

1. 数据库初始性能

使用pgbench在更新PostgreSQL数据库配置前先测试下数据库性能。测试PG数据库使用工具——pgbench。如何使用的PostgreSQL数据库没有安装该插件需要先进行安装。
然后,创建一个测试数据库性能用的测试库pgbench_test,命令:

createdb pgbench_test

接着,执行如下命令初始化数据:

pgbench -i -s 10 pgbench_test

-i: 表示初始化;
-s: 缩放因子,用于控制生成测试数据的数据量,-s 10 表示生成 10 倍于默认数据量的测试数据(默认 100,000 行数据)。
pgbench_test: 指定生成数据的数据库
执行如下命令进行基准测试:

pgbench -c 10 -j 2 -t 1000 pgbench_test

-c 10: 表示使用10个并发的客户端连接;
-j 2: 使用2个线程处理;
-t 1000: 每个客户端发起1000个事务;

我的测试结果如下:
在这里插入图片描述

2. 内存相关参数

  • shared_buffers
    • 建议设置为系统内存的 25%-40%
    • 这是PostgreSQL用于缓存数据的内存区域。
  • maintenance_work_mem
    • 这是维护操作(如VACUUMCREATE INDEX)可以使用的内存。
    • 建议设置为系统内存的 5%-10%

3. WAL(Write-Ahead Logging)相关参数

  • wal_buffers
    • 这是WAL日志缓存的大小。
    • 默认值为-1(自动调整),通常不需要修改。如果需要手动设置,建议为16MB。
  • checkpoint_timeout
    • 这是检查点的时间间隔。增加此值可以减少检查点频率,从而减少I/O压力。
    • 建议设置为15分钟到30分钟。

4. 并行查询相关参数

  • max_parallel_workers_per_gather
    • 这是每个查询可以使用的并行工作进程数:
    • 建议设置为CPU核心数的 50%-75%
  • max_worker_processes:
    • 这是PostgreSQL可以使用的最大工作进程数;
    • 议设置为CPU核心数的 2倍

5. 连接相关参数

  • max_connections
    • 这是PostgreSQL允许的最大连接数
    • 根据应用需求设置,避免设置过高导致资源耗尽
  • effective_cache_size
    • 这是操作系统和PostgreSQL可以使用的缓存大小;
    • 建议设置为系统内存的 50%-75%

6. 根据情况调整

因为我是在云服务器上进行的测试,服务器规格2核4G,能榨取的性能有限:
在这里插入图片描述
在这里插入图片描述

但是调整之后还是略有提高,如下:
在这里插入图片描述
PS:调整时切记根据自己服务器规格和数据库的使用场景来,盲目调整可能导致性能恶化。


http://www.niftyadmin.cn/n/5863932.html

相关文章

算法与数据结构(环形链表)

题目 思路 方法一:哈希表 我们可以这样想,若目标是环形链表,我们就会不断地在里面循环,若不是,最后肯定会遍历到nullpter。 我们可以遍历链表的所有节点,每当遍历到一个节点时,我们可以判断此…

【深度学习】Unet的基础介绍

U-Net是一种用于图像分割的深度学习模型,特别适合医学影像和其他需要分割细节的任务。如图: Unet论文原文 为什么叫U-Net? U-Net的结构像字母“U”,所以得名。它的结构由两个主要部分组成: 下采样(编码…

深度学习学习笔记(34周)

目录 摘要 Abstracts 简介 Hourglass Module(Hourglass 模块) 网络结构 Intermediate Supervision(中间监督) 训练过程细节 评测结果 摘要 本周阅读了《Stacked Hourglass Networks for Human Pose Estimation》&#xf…

Hutool - Http:基于 HttpUrlConnection 的 Http 客户端封装

一、简介 在现代的软件开发中,与外部服务进行 HTTP 通信是非常常见的需求,比如调用第三方 API、获取网页内容等。Java 标准库中的 HttpUrlConnection 提供了基本的 HTTP 请求功能,但使用起来较为繁琐,需要处理很多细节&#xff0…

Spring框架中的AI

随着科技的飞速发展,人工智能(AI)技术已经渗透到我们生活的方方面面,而Spring框架作为Java领域最受欢迎的开源框架之一,其在AI领域的应用也日益广泛。本文将从Spring框架与AI的结合点出发,探讨AI在Spring中…

记录Unity一个奇妙bug

Unity 2022.3.51f1c1 同一个使用了单例模式的脚本,在SceneA能运行使用,在SceneB却不能,并且两个场景都是空白场景,没有任何东西,两个场景也不会同时运行。然后,我禁用了SceneA的脚本,再去运行S…

Java 集合:单列集合和双列集合的深度剖析

引言 在 Java 编程中,集合是一个非常重要的概念。它就像是一个容器,能够存储多个数据元素,帮助我们更方便地管理和操作数据。Java 集合框架主要分为单列集合和双列集合两大类,它们各自有着独特的特点和适用场景。接下来&#xff0…

ROS2学习

前言 本篇文章属于ROS2humble的学习笔记,来源于B站鱼香ROSup主。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 《ROS 2机器人开发从入门到实践》课程介绍_哔哩哔哩_bilibili …