暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

快戳进来!PostgreSQL数据库通用优化模板!

呆呆的私房菜 2024-07-17
181
    Whoami:5年+金融、政府、医疗领域工作经验的DBA
    Certificate:OCP、PCP
    Skill:Oracle、Mysql、PostgreSQL
    Platform:CSDN、墨天伦、公众号(呆呆的私房菜)



    阅读本文可以了解PostgreSQL数据库配置上的内容,包含操作系统配置、环境变量配置、数据库相关参数配置。




    01

    操作系统配置

    操作系统的优化主要针对防火墙、内核参数、系统限制上做优化。

      ## 内核参数优化
      vi etc/sysctl.conf
      kernel.shmmax = 976257024 #1/2 of physical RAM
      kernel.shmall = 2097152 #physical RAM size pagesize For most systems, this will be the value 2097152
      kernel.shmmni = 819200
      vm.nr_hugepages = 65536 #hugepage, when memory is bigger than 64G
      kernel.shmmni = 4096
      kernel.sem = 250 32000 100 128
      fs.aio-max-nr = 1048576
      net.ipv4.ip_local_port_range = 9000 65500
      net.core.rmem_default = 262144
      net.core.rmem_max = 4194304
      net.core.wmem_default = 262144
      net.core.wmem_max = 4194304
      fs.file-max = 6815744


      ## 应用生效
      sysctp -p

      注意:上述内核参数配置规则为通用模板,优化过程中的参数的设定要以业务实际情况为准。

        ## 系统限制优化
        vi etc/security/limits.conf
        * soft    nofile  1024000   #当前系统生效的打开文件的数目
        * hard nofile 1024000 #系统中所能设定的打开文件的最大值
        * soft nproc unlimited #当前系统生效的进程的数目
        * hard nproc unlimited #系统中所能设定的进程数目的最大值
        * soft core unlimited #当前系统生效的内核文件的大小
        * hard core unlimited #系统中所能设定的内核文件的最大值
        * soft memlock unlimited #当前系统生效的锁定内存地址空间的大小
        * hard    memlock unlimited #系统中所能设定的的锁定内存地址空间最大值

        02

        环境变量配置

        建议在PostgreSQL数据库部署过程中,配置对应安装用户的环境变量。

          su - postgres


          vi ~/.bashrc
          ## 添加以下:
          export PGUSER=postgres
          export PGPORT=5432
          export PATH=$PATH:$HOME/bin:/pg/pg13/bin/
          export PGDATA=/pg/pg13/data
          $ source ~/.bashrc

          03

          数据库配置

          数据库配置主要涉及连接配置和数据库参数配置。

          • 1. 连接配置(pg_hba.conf)

          该文件用于控制访问安全性,管理客户端对于PostgreSQL服务器的访问权限。简单理解就是:允许哪个IP(或哪个网段)的哪个用户通过连接到哪个数据库,以及指定连接时使用的身份验证模式。

          文件路径:$PGDATA/pg_hba.conf

          选项

          选项说明

          TYPE

          local:本地使用套接字(socket)登陆

          host:通过tcp/ip登陆

          ADDRES

          IP地址,指定连接的地址。0.0.0.0表示所有地址。/32表示特定IP0.0.0.0/32表示本地回环地址127.0.0.1

          /24表示小网段下的全部IP192.168.99.0/24表示192.168.99.0-192.168.99.255的所有IP

          /16表示大网段下的全部IP192.168.0.0/16表示192.168.0.0-192.168.255.255所有IP

          /128表示ipv6的地址

          METHOD

          trust:免密认证,无需密码直接登录

          reject:拒绝登录,拒绝某个特定IP或网段登录

          MD5加密,密码将转化为md5值进行验证

          Password明文密码验证,切勿在非信任网路使用password认证方式

          scram-sha-256加密,将密码值转化为scram-sha-256的值进行验证,是postgresql10后新增的SASL  的认证方式也是当下最安全的方法

          注意:scram-sha-256是PostgreSQL10中新增的基于SASL的认证方式,也是最安全的认证方式。但这种方式不支持旧版本的客户端库。如果10以前的客户端库连接数据库,会有如下错误:

            /usr/pgsql - 9.6/bin/psql - h pghostl -p 1921 - U postgres mydb
            psql : SCRAM authentication requires libpq version 10 or above


            • 2. 数据库参数配置

            文件路径:$PGDATA/postgresql.conf

            数据库参数优化分为如下几块内容:

            • 监听参数

              ## 数据库监听地址
              alter system set listen_addresse = '*';
              • 内存参数

                ## shared_buffers 默认128M,建议为主机内存的1/4。
                alter system SET shared_buffers = '4096M';


                ## maintenance_work_mem 默认64M,建议设置为min(8G,(主机内存/8)/max_parallel_maintenance_workers)
                alter system set maintenance_work_mem = '2GB';


                ## wal_buffers,默认值为4M,建议值 min(wal_segment_size,shared_buffers/32)
                alter system set wal_buffers = '16M';


                ## effective_cache_size,默认值4GB,建议设置为0.75*主机内存
                alter system set effective_cache_size = '4GB';
                • 日志参数

                  ## 数据库运行日志,默认不开启
                  alter system set logging_collector = 'on'


                  ## 日志格式,默认stderr,建议csvlog
                  alter system set log_destination = 'csvlog';


                  ## 慢SQL记录,单位ms
                  alter system set log_min_duration_statement = 120000;


                  ## 审计记录,可选参数:none\ddl\mod\all
                  alter system set log_statement = 'ddl';


                  ## 死锁等待时间,默认1000,单位m
                  alter system set log_lock_waits = on;
                  alter system set deadlock_timeout = 1000


                  ## 临时文件超过某个值时会记录到日志,单位KB
                  alter system set log_temp_files = 250000;


                  ## 记录更详细的信息
                  alter system set log_error_verbosity = verbose;


                  ## 记录检查点信息
                  alter system set log_checkpoints = on;
                  • 强制检查点

                    ## 单位s,不建议频繁检查点,否则xlog会产生很多的full page write
                    alter system set checkpoint_timeout = 1800;
                    • wal保留数量

                      ## pg_wal日志文件段的最小大小
                      alter system set wal_keep_size = '1GB';
                      • 连接数设置

                        ## 设置最大连接数
                        alter system set max_connections = 1000;


                        ## 设置super最大连接数
                        alter system set superuser_reserved_connections = 10;
                        • 分组提交

                          ## 默认分组提交是即时提交,高并发
                          alter system set commit_siblings = 5;
                          alter system set commit_delay = 10;
                          • autovacuum

                            ## 自动清理进程,建议配置为max(min(8,cup核数/2),5)
                            alter system set autovacuum_max_workers = 8;
                            • 归档配置

                              ## 启用归档配置
                              alter system set archive_mode = on;
                              alter system set archive_command  = 'cp %p /pg/arch/archive_wal_%f' #此处%p表示归档文件全路径,%f表示归档文件名字。



                              本文内容就到这啦,阅读完本篇,相信你也顺利学会了PostgreSQL数据库的基础优化了吧!我们下篇再见!

                              点击上方公众号,关注我吧!

                              文章转载自呆呆的私房菜,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论