PostgreSQL 的性能调优方法

1,344 阅读5分钟

PostgreSQL Performance Tuning

浅谈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中找到长期运行的或缓慢的查询。
select * from pg_stat_activity;

PostgreSQL Performance Tuning output 1

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

PostgreSQL Performance Tuning output 3

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

  • 下面的例子表明,创建一个索引来提高查询的性能。
  • 在上面的例子中,创建索引查询后,性能会自动提高。
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.创建查询的解释计划以提高性能

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

output 5

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

  • 下面的例子显示,改变配置参数以提高数据库的性能。
  • 我们根据分配给数据库服务器的资源来改变配置参数。
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

总结

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