Postgresql-11.X 性能优化详解

postgres 性能优化

系统优化

修改 /etc/grub.conf

关闭 numa=off ,修改磁盘IO调度方式 elevator=deadline

修改方法:

grubby --update-kernel=ALL --args="transparent_hugepage=never" --args="elevator=deadline"
验证:
grubby --info=ALL
返回
args="ro crashkernel=auto rhgb quiet numa=off elevator=deadline"

关闭内存大页 hugepage

验证是否开启方法1: 
如果以下文件不存在,则是THP已经从内核中移除。
/sys/kernel/mm/transparent_hugepage or /sys/kernel/mm/redhat_transparent_hugepage
验证是否开启方法2: 
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

[always] == 》表示开启

禁用内存大页

方法:

修改 /etc/rc.local

# vi /etc/rc.local #追加,禁用大页

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
  echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

内核优化

vi /etc/sysctl.conf  

添加内容如下:

vm.swappiness = 0
kernel.shmmax=135497418752
net.core.rmem_max = 4194304
net.core.wmem_max = 4194304
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.ipv4.ip_local_port_range = 9000 65535
kernel.sem = 50100 64128000 50100 1280
vm.dirty_background_bytes = 102400000
vm.dirty_ratio = 80
vm.nr_hugepages = 102352

/etc/security/limits.conf
* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
* soft stack unlimited
* hard stack unlimited
* soft   memlock    250000000
* hard   memlock    250000000

块设备预读

blockdev --setra 16384 /dev/sda

设置开机启动生效:

echo "blockdev --setra 16384 /dev/sda" >> /etc/rc.local 

postgres 数据层面优化

涉及命令令

ALTER SYSTEM SET
ALTER SYSTEM SET configuration_parameter { TO | = } { value | 'value' | DEFAULT }

Case:

alter system set max_connections='50';
SHOW configuration_parameter

Case:

show max_connections

实现原理:

调用该命令的用户必须具有超级用户权限。修改系统配置文件postgresql.conf,通过系统信号,重新加载该配置文件.

查询postgresql配置选项生效级别和默认值信息;

select name, context,setting,unit,source,sourcefile from pg_settings;
internal: 编译期间的设置,只有重新编译才能生效。
postmaster: 只有服务重启才能生效。
sighup: 给服务器发送HUP信号会是服务器重新加载postgresql.conf配置,可以立即生效。
backend: 与sighup类似,但是不影响正在运行的会话,只在新会话中生效
superuser: 使用superuser(如postgres)才能更改,不用重新加载所有配置即可生效。
user: 单个会话用户可以在任意时间做修改,只会影响该会话。

优化数据库主机配置

系统
more /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
内核
uname  -a
Linux jp33e506-3-22.ptengine.com 3.10.0-862.2.3.el7.x86_64 #1 SMP Wed May 9 18:05:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
内存
Mem:         128763   

核心优化选项:

postmaster: 只有服务重启才能生效。

alter system set max_connections='50';
alter system set shared_buffers='30GB';
alter system set wal_buffers='64MB';

sighup: 给服务器发送HUP信号会是服务器重新加载postgresql.conf配置,可以立即生效。

alter system set checkpoint_completion_target='0.9';
alter system set checkpoint_timeout='15min';
alter system set fsync='off';

superuser: 使用superuser(如postgres)才能更改,不用重新加载所有配置即可生效。

alter system set commit_delay='10';

user: 单个会话用户可以在任意时间做修改,只会影响该会话。

alter system set autovacuum_work_mem='1GB';
alter system set commit_siblings='6';
alter system set effective_cache_size='50GB';
alter system set maintenance_work_mem='1GB';
alter system set work_mem='16MB';

查看 优化结果

show max_connections;
show shared_buffers;
show wal_buffers;
show checkpoint_completion_target;
show checkpoint_timeout;
show fsync;
show commit_delay;
show autovacuum_work_mem;
show commit_siblings;
show effective_cache_size;
show maintenance_work_mem;
show work_mem;

重新数据库配置的方法

部分优化项重启后才能生效:

1.用超级用户运行
postgres=# 

SELECT pg_reload_conf();

2.用UNIX的kill手动发起HUP信号

$kill -HUP PID

3.使用pg_ctl命令触发SIGHUP信号

$pg_ctl reload

优化后性能对比

绿线为分界线

CPU

avatar

参考文档:
https://www.kancloud.cn/taobaomysql/monthly/140098
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: postgresql-42.2.5.jar是一个用于连接和操作 PostgreSQL 数据库的 Java 驱动程序。PostgreSQL 是一种免费开源的关系型数据库管理系统,它提供了高度的可靠性、可扩展性和安全性。 postgresql-42.2.5.jar 是一个可用于 Java 应用程序的库文件。它提供了一组类和方法,用于连接到 PostgreSQL 数据库,并执行各种数据库操作,如查询、插入、更新和删除数据。这个 JAR 文件可以被导入到 Java 项目中,并通过代码调用其提供的功能。 使用 postgresql-42.2.5.jar 可以方便地连接到 PostgreSQL 数据库,并与数据库进行交互。通过这个驱动程序,我们可以使用 Java 语言来编写应用程序,并通过 JDBC(Java 数据库连接)API 来执行数据库操作。这使得开发人员能够更轻松地访问和操作 PostgreSQL 数据库,并将数据库集成到他们的 Java 应用程序中。 postgresql-42.2.5.jar 还支持与其他相关工具和框架的整合,如 Hibernate、Spring 和 JPA(Java 持久化 API)。这些工具可以使开发人员更加便捷地处理数据库操作,提高开发效率。 总之,postgresql-42.2.5.jar 是一个重要的 Java 驱动程序,使开发人员能够连接和操作 PostgreSQL 数据库。它为我们提供了一些功能强大的类和方法,方便我们在 Java 应用程序中使用 PostgreSQL 数据库,并通过 JDBC API 进行各种数据库操作。 ### 回答2: postgresql-42.2.5.jar 是一个用于连接和操作 PostgreSQL 数据库的 Java 数据库连接驱动。它是由 PostgreSQL 全球开发组开发并维护的,是目前最新版本的 PostgreSQL 驱动程序。 postgresql-42.2.5.jar 可以在 Java 应用程序中提供与 PostgreSQL 数据库的连接和交互功能。通过使用该驱动程序,开发人员可以实现与数据库的通信,执行数据库查询,更新和删除数据等操作。它提供了与数据库服务器之间的稳定和可靠的连接,保证了数据的有效传输和一致性。 postgresql-42.2.5.jar 遵循 Java 数据库连接(JDBC)规范,因此可以与任何支持 JDBC 规范的 Java 应用程序配合使用。无论是基于 Java 的 Web 应用程序、桌面应用程序还是移动应用程序,都可以使用该驱动程序进行与 PostgreSQL 数据库的交互。 通过使用 postgresql-42.2.5.jar,开发人员可以轻松地实现与 PostgreSQL 数据库的连接和数据操作功能,无需手动处理连接和查询的复杂细节。它提供了一组方便的 API 和方法,使得数据库操作变得简单和高效。 总之,postgresql-42.2.5.jar 是一个重要的 Java 数据库连接驱动,它为开发人员提供了与 PostgreSQL 数据库进行稳定连接和数据交互的功能。使用该驱动程序,开发人员能够轻松地在 Java 应用程序中操作 PostgreSQL 数据库,实现高效的数据管理和查询。 ### 回答3: postgresql-42.2.5.jar是PostgreSQL数据库的Java连接器。它是用Java编写的,用于将Java应用程序与PostgreSQL数据库进行连接和交互。 该jar文件提供了一些类和方法,使开发人员能够在Java应用程序中执行各种数据库操作,如查询数据、插入数据、更新数据和删除数据。 通过使用postgresql-42.2.5.jar,开发人员可以轻松地在他们的Java应用程序中访问PostgreSQL数据库。它提供了简单易用的API,使开发人员能够以一种直观的方式与数据库进行交互。 此外,postgresql-42.2.5.jar还提供了一些额外的功能,如支持数据库事务处理、连接池管理等。它还具有高性能和可靠性,可用于处理大量的数据和复杂的数据库操作。 使用postgresql-42.2.5.jar可以帮助开发人员快速构建可靠和高效的Java应用程序,与PostgreSQL数据库进行数据交互。它是PostgreSQL社区开发的开源项目,得到了广泛的社区支持和更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值