[转帖]PostgreSQL 的性能调优方法

postgresql,性能,方法 · 浏览次数 : 0

小编点评

## PostgreSQL 性能调校示例 以下是使用 `pg_stat_activity` 表来进行性能调优的示例: ```sql select * from pg_stat_activity; -- 找到长期运行的查询 select * from pg_stat_activity where log_line = 'select * from my_table where id = 5' and execution_time > 600 -- 1 小时 and plan_type = 'SELECT' -- 找到慢速查询 explain select * from performance_table where id = 5; -- 创建索引来提高查询性能 create index test_pkey on performance_table (id); -- 创建查询的解释计划以提高查询性能 explain select * from performance_table where id = 5; -- 改变配置参数以提高性能 -- 例如: -- change shared_buffers to 512M -- change maintenance_work_mem to 128MB ``` **其他调整建议:** * **设置 `max_connections` 和 `effective_cache_size` 来优化连接和缓存使用。 * **设置 `shared_buffers` 和 `wal_buffers` 来优化内存使用。 * **设置 `work_mem`、`maintenance_work_mem` 和 `checkpoint_completion_target` 来优化 I/O 流量。 * **设置 `random_page_cost` 和 `effective_io_concurrency` 来优化数据读取性能。 * **调整 `work_mem` 和 `min_wal_size` 来控制 wal 文件的大小。 * **设置 `max_wal_size` 来限制 wal 文件的大小。

正文

https://juejin.cn/post/7119489847529570334

 

浅谈PostgreSQL的性能调校

PostgreSQL的性能调校是指调校数据库以提高性能和快速访问数据;我们可以通过调校查询和数据库性能相关的参数来调校PostgreSQL的数据库性能。为了提高性能,我们需要通过使用pg_stat_activity目录表从数据库中找到一个缓慢和长期运行的查询;在找到一个缓慢的查询后,我们需要找到一个查询的解释计划。为了提高数据库的性能,我们需要调整与性能相关的参数,如shared_buffers, wal_buffers, effective_cache_size, work_mem, maintainance_work_mem, and synchronous_commit;我们需要根据资源来改变这些参数。

如何在PostgreSQL中进行性能调优?

我们可以通过使用以下条件在PostgreSQL中进行性能调优。下面是我们必须调整的参数,以提高数据库的性能。

  1. 查询调优
  2. 索引调优
  3. 内存调优
  4. 存储调优
  5. 操作系统调整
  6. 网络调优
  7. 应用调优
  8. 配置参数调整

1.查询调优

  • 为了调整数据库的性能,我们需要找到一个在数据库服务器上运行的查询的日志。
  • 我们可以通过使用pg_stat_activity目录表找到一个长期运行的查询。下面的例子显示,在PostgreSQL中找到长期运行的或缓慢的查询。
 
csharp
复制代码
select * from pg_stat_activity;

PostgreSQL Performance Tuning output 1

  • 在上面的例子中,使用准确的开始时间,我们可以找到长期运行的查询。
  • 在找到慢速查询后,我们需要创建该查询的解释计划;解释计划将显示与该慢速查询相关的以下信息:
  1. 节点
  2. 成本
  3. 实际时间
  4. 行数
  5. 宽度
  6. 索引扫描
  7. 循环
  8. 索引条件
  • 使用上述参数,我们正在调整查询以提高数据库的性能。
  • 下面的例子显示了在PostgreSQL中查找解释和解释分析查询计划。
 
csharp
复制代码
explain select * from performance_table;   
explain analyze select * from performance_table;

PostgreSQL Performance Tuning output 2

  • 我们也在查询中使用了解释分析;它将显示与查询执行时间有关的额外信息。
  • 节点被定义为在PostgreSQL中查询执行时正在执行的代码块。
  • 解释计划中的节点包括工作的逻辑单位。
  • 成本被定义为执行查询需要多少工作。成本被定义为两个数字,第一个数字包含启动成本,第二个数字包含发生的过程成本。
  • 实际时间被定义为执行查询和检索其输出需要多少时间。这个时间以毫秒为单位显示。
  • 行被定义为在查询中定义的行的数量。行是重要的因素,同时发现和解释查询的计划。

2.索引调整

  • 索引的调整在PostgreSQL中也很重要,因为索引会增加选择查询的性能。
  • 为了调整PostgreSQL中的索引,我们需要打开统计收集器。统计收集器将收集性能统计数据。
  • 另外,我们还要调整查询中丢失的索引。在找到缺失的索引后,我们需要在该列上创建同样的索引。

3.存储调优

  • 存储调整对于PostgreSQL数据库的巨大性能也很重要。我们需要定义正确的文件系统和正确的RAID级别,以提高数据库的性能。
  • 正确的文件系统和正确的RAID级别将增加数据库服务器的I/O。

4.内存调整

  • 在调整PostgreSQL数据库系统时,内存的调整也很重要。我们可以调整与内存相关的性能参数。

5.网络调优

  • 我们还检查了应用服务器和客户端服务器之间的连接。在调优PostgreSQL的数据库服务器时,我们必须配置网络的适当链接。

6.操作系统调优

  • 为了提高查询的性能,我们需要为PostgreSQL中的数据库选择合适的操作系统。
  • 为数据库选择一个准确的操作系统也是调优PostgreSQL数据库的一个重要任务。

7.应用调优

  • 在PostgreSQL性能调优中,我们需要调优PostgreSQL中的应用程序。我们必须检查应用程序与数据库的适当兼容性。

8.配置参数的调整

  • 我们正在调整下面的配置参数,以提高PostgreSQL数据库的性能。
  1. 共享缓冲区(Shared_buffers
  2. 有效缓存大小
  3. 工作内存(Work_mem)
  4. 维护工作内存(Maintainance_work_mem
  5. 缓冲区
  6. 同步提交(Syncronous_commit
  • 我们根据资源分配给PostgreSQL数据库系统的情况来调整上述配置参数。
  • 提高数据库配置参数的性能起着非常重要的作用。

PostgreSQL性能调校的例子

下面是PostgreSQL性能调优的例子。

  • 下面是一个PostgreSQL的性能调优的例子。我们使用performance_table来描述PostgreSQL性能调优的例子。
  • 下面是performance_table的计数和结构。
 
csharp
复制代码
select count(*) from performance_table;
\d+ performance_table;

PostgreSQL Performance Tuning output 3

1.创建一个索引来提高性能 -

  • 下面的例子表明,创建一个索引来提高查询的性能。
  • 在上面的例子中,创建索引查询后,性能会自动提高。
 
csharp
复制代码
explain analyze select * from performance_table where id = 5;
create index test_pkey on performance_table (id);
explain analyze select * from performance_table where id = 5;

output 4

2.创建查询的解释计划以提高性能

  • 下面的例子表明,为查询创建一个解释计划以提高查询的性能。
 
csharp
复制代码
explain select * from performance_table where id = 5;
explain analyze select * from performance_table where id = 5;

output 5

3.改变配置参数以提高性能

  • 下面的例子显示,改变配置参数以提高数据库的性能。
  • 我们根据分配给数据库服务器的资源来改变配置参数。
 
ini
复制代码
free–m
vi /var/lib/pgsql/10/data/postgresql.conf
max_connections = 200
shared_buffers = 256MB
effective_cache_size = 768MB
maintenance_work_mem = 64MB
checkpoint_completion_target = 0.7
wal_buffers = 7864kB
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 1310kB
min_wal_size = 1GB
max_wal_size = 4GB

output 6

总结

我们可以通过使用查询调优、索引调优、内存调优、存储调优、操作系统调优、网络调优、应用程序调优、配置参数调优来提高性能。解释计划是用来显示查询的执行计划将显示我们查询的正确执行时间。

与[转帖]PostgreSQL 的性能调优方法相似的内容:

[转帖]PostgreSQL 的性能调优方法

https://juejin.cn/post/7119489847529570334 浅谈PostgreSQL的性能调校 PostgreSQL的性能调校是指调校数据库以提高性能和快速访问数据;我们可以通过调校查询和数据库性能相关的参数来调校PostgreSQL的数据库性能。为了提高性能,我们需要通过

[转帖]用sysbench进行数据库OLTP基准测试

https://www.cnblogs.com/ariesblog/p/13847740.html 基于TPC-C的OLTP基准测试,对比Mysql和PostgreSQL的性能 一、什么是TPC-C和tpmC 1、TPC-C TPC-C是一种旨在衡量联机事务处理(OLTP)系统性能与可伸缩性的行业标

[转帖]PostgreSQL 参数调整(性能优化)

昨天分别在外网和无外网环境下安装PostgreSQL,有外网环境下安装的相当顺利。但是在无外网环境下就是两个不同的概念了,可谓十有八折。感兴趣的同学可以搭建一下。 PostgreSQL安装完成后第一件事便是做相关测试,然后调整参数。 /*CPU 查看CPU型号*/ cat /proc/cpuinfo

[转帖]PostgreSQL配置文件--WAL

2022-12-23 3.1 Settings 3.1.1 fsync 字符串 默认: fsync = on 开启后强制把数据同步更新到磁盘,可以保证数据库将在OS或者硬件崩溃的后恢复到一个一致的状态。 虽然关闭,可以提升数据库性能,但无法保证数据库崩溃后数据一致性。 通常情况下需要打开这个参数,除

[转帖]MySQL该使用哪种CPU架构服务器?

https://www.cnblogs.com/zhoujinyi/p/16880861.html 1. 摘要 近期,阿里云推出基于 ARM 架构的 RDS MySQL 和 RDS PostgreSQL 实例,现处于邀测阶段,阿里云宣传 ARM 架构的亮点是:在价格下降13%的基础上,平均性能 AR

[转帖]老外惊呼: 世界变化快! PostgreSQL 14 on ARM 8.1 加上LSE patch性能飙升到140万tps

https://www.modb.pro/db/91515 PostgreSQL , arm , lse , 14 背景 老外惊呼: 世界变化快! ARM 8.1 defines a set of LSE instructions, which, in particular, provide the

[转帖]postgresql 的 pg_hba.conf 的行记录顺序

postgresql: 9.6 一直觉得 pg_hba.conf 的行记录与顺序无关,遵循细化优先的规则。今天在回顾 pg_hba.conf 文档时发现这种认识是错的。 下面这段话是从文档拷贝过来的: 因为每一次连接尝试都会顺序地检查pg_hba.conf记录,所以这些记录的顺序是非常关键的。通常,

[转帖]postgresql 的 .pgpass密码文件的使用

.pgpass 是 连接 postgresql 时使用的密码文件,通常位置为 ~/.pgpass。 在使用某些组件时还真的必须使用。具体的格式为: hostname:port:database:username:password 常见的使用如下: # su - postgres $ vi ~/.pg

[转帖]PostgreSQL的MVCC vs InnoDB的MVCC

任何一个数据库最主要功能之一是可扩展。如果不删除彼此,则尽可能较少锁竞争从而达到这个目的。由于read、write、update、delete是数据库中最主要且频繁进行的操作,所以并发执行这些操作时不被阻塞则显得非常重要。为了达到这种目的,大部分数据库使用多版本并发控制(Multi-Version

[转帖]postgresql 的一些变量和密码文件

https://www.cnblogs.com/ctypyb2002/p/9792872.html 一些变量 下列环境变量能被用于选择默认的连接参数值,如果调用代码没有直接指定值,它们将被用于PQconnectdb、PQsetdbLogin和PQsetdb。例如,这些有助于防止数据库连接信息被硬编码