1.修改参数列表
(1)执行计划
enable_nestloop = off #默认为on
enable_seqscan = off #默认为on
enable_indexscan = on
enable_bitmapscan = on
max_connections = 1000 #默认为100
 
(2)内存相关
shared_buffers = 16GB # 默认为128MB
effective_cache_size = 24GB #默认为4GB
work_mem = 32MB
temp_buffers = 32MB
wal_buffers = 512MB
maintenance_work_mem = 2GB
 
(3)autovacuum
autovacuum = on
autovacuum_max_workers = 3 #默认为3
autovacuum_work_mem = 256MB
autovacuum_vacuum_scale_factor = 0.05 #默认为0.2
 
(4)检查点
max_wal_size = 4GB #默认为1GB
min_wal_size = 1GB #默认为80MB
checkpoint_completion_target = 0.9 #默认为0.5
checkpoint_timeout = 30min #默认为5min
 
(5)日志
log_destination = csvlog
log_directory = pg_log
logging_collector = on
log_min_duration_statement = 800
log_rotation_size = 1024MB
log_truncate_on_rotation = on
log_filename = 'xl_log_%a.log'
 
2.参数设置公式

这个shell脚本可以使用shell的关联数组对


  1. #!/bin/bash
  2. #command to execute script: su - postgres -c "./create.sh"
  3. #default value refer to standard server(cpu:6cores,memory:32G,storage:12T)
  4. #value according to the actual situation
  5. #List of parameters to be modified
  6. :<<!
  7. enable_seqscan = off
  8. enable_indexscan = on
  9. enable_bitmapscan = on
  10. max_connections = 1000
  11. shared_buffers = 16GB
  12. effective_cache_size = 24GB
  13. work_mem = 32MB
  14. temp_buffers = 32MB
  15. wal_buffers = 512MB
  16. maintenance_work_mem = 2GB
  17. autovacuum_max_workers = 3
  18. autovacuum_work_mem = 256MB
  19. checkpoint_timeout = 30min
  20. max_wal_size = 4GB
  21. min_wal_size = 1GB
  22. checkpoint_completion_target = 0.9
  23. log_destination = csvlog
  24. log_directory = pg_log
  25. logging_collector = on
  26. log_min_duration_statement = 800
  27. log_rotation_size = 1024MB
  28. log_truncate_on_rotation = on
  29. log_filename = 'xl_log_%a.log'
  30. !
  31. ERROR="\033[41;37m ERROR \033[0m"
  32. INFO="\033[42;37m INFO \033[0m"
  33. WARN="\033[43;37m WARN \033[0m"
  34. COMMON_ERROR="some error happened, specific information please see console output"
  35. # Array of parameters
  36. declare -A parameter_array
  37. parameter_array=([enable_seqscan]=off [enable_indexscan]=on [enable_bitmapscan]=on [max_connections]=1000 [shared_buffers]=16GB
  38. [effective_cache_size]=24GB [work_mem]=32MB [temp_buffers]=32MB [wal_buffers]=512MB [maintenance_work_mem]=2GB
  39. [autovacuum_max_workers]=3 [autovacuum_work_mem]=256MB [checkpoint_timeout]=30min [max_wal_size]=4GB
  40. [min_wal_size]=1GB [checkpoint_completion_target]=0.9 [log_destination]=csvlog [log_directory]=pg_log
  41. [logging_collector]=on [log_min_duration_statement]=800 [log_rotation_size]=1024MB [log_truncate_on_rotation]=on [log_filename]=viid_log_%a.log )
  42. #default value :
  43. pgctl_path=
  44. data_directory=
  45. memory=
  46. # check command exit value, 0 is success
  47. function check_fun(){
  48. status=$?
  49. error=${COMMON_ERROR}
  50. if [[ 0 -ne ${status} ]] ; then
  51. echo -e "${ERROR} ${error}"
  52. exit 1
  53. fi
  54. }
  55. # prepare conditions
  56. function prepare_conditions(){
  57. data_directory=$(psql -qtAX -c "show data_directory" | sed 's/[ ]//g')
  58. check_fun
  59. if [[ ! -d "${data_directory}" ]] ; then
  60. echo -e "${ERROR} database's data directory does not exist"
  61. exit 1
  62. fi
  63. # physical machine environment
  64. memory=$(grep MemTotal /proc/meminfo | awk '{print $2 / 1024 / 1024}' | sed 's/\.[0-9]*//' | tail -n 1)
  65. check_fun
  66. # docker environment
  67. memory_limit=$(($(awk '{print $1}' /sys/fs/cgroup/memory/memory.limit_in_bytes) / 1024 / 1024 /1024))
  68. check_fun
  69. # comparing the two, choose the smaller one.
  70. if [[ "${memory_limit}" -le "${memory}" ]] ; then
  71. memory=${memory_limit}
  72. fi
  73. }
  74. # calculate parameters
  75. function calculate_parameters(){
  76. # 50%*memory
  77. parameter_array[shared_buffers]=$((memory * 1024 / 2))"MB"
  78. # 75%*memory
  79. parameter_array[effective_cache_size]=$((memory * 1024 * 3 / 4 ))"MB"
  80. # <1%
  81. parameter_array[work_mem]=${memory}"MB"
  82. # <1%
  83. parameter_array[temp_buffers]=${memory}"MB"
  84. # 32GB => 512MB
  85. parameter_array[wal_buffers]=$((memory * 16 ))"MB"
  86. # 32GB => 2048MB
  87. parameter_array[maintenance_work_mem]=$((memory * 64 ))"MB"
  88. }
  89. # modify parameters
  90. function modify_parameters(){
  91. # modify parameters by modifying file postgresql.conf:
  92. for parameter in ${!parameter_array[*]}
  93. do
  94. #check whether the parameters have been modified
  95. # PostgreSQL's default parameter configuration example: enable_seqscan = on
  96. # viid's example: enable_seqscan='on'
  97. check_out=$(grep "^${parameter}=" "${data_directory}"/postgresql.conf | grep -v '#' | tail -n 1)
  98. # process sleep
  99. sleep 0.2s
  100. if [[ -z "${check_out}" ]] ; then
  101. echo "${parameter}='${parameter_array[${parameter}]}'" >> "${data_directory}"/postgresql.conf
  102. check_fun
  103. echo -e "${INFO} modify ${parameter} successfully"
  104. else
  105. if [[ "${check_out}" = "${parameter}='${parameter_array[${parameter}]}'" ]] ; then
  106. echo -e "${INFO} ${parameter} is already configured, then skip this step"
  107. else
  108. sed -i s!^"${check_out}"!"${parameter}='${parameter_array[${parameter}]}'"!g "${data_directory}"/postgresql.conf
  109. check_fun
  110. echo -e "${INFO} modify ${parameter} successfully"
  111. fi
  112. fi
  113. done
  114. }
  115. # create directory(pg_log and pg_arch), and set user postgres permission
  116. function create_dir(){
  117. directory_array=("pg_arch" "pg_log")
  118. for directory in ${directory_array[*]};
  119. do
  120. # process sleep
  121. sleep 0.2s
  122. if [[ ! -d "${data_directory}/${directory}" ]] ; then
  123. mkdir -p "${data_directory}"/"${directory}"
  124. echo -e "${INFO} path ${data_directory}/${directory} create successfully"
  125. else
  126. echo -e "${INFO} ${data_directory}/${directory} is already exists, then skip this step"
  127. fi
  128. # set user postgres permission
  129. chown postgres:postgres "${data_directory}"/"${directory}"
  130. done
  131. }
  132. # because the environment is different, need to find the path of the database restart command 'pg_ctl'
  133. function find_cmd(){
  134. result=$(find / -name pg_ctl 2> /dev/null | grep bin/pg_ctl$ | tail -n 1 )
  135. # check whether the path exists
  136. if [[ -z "${result}" ]] ; then
  137. echo -e "${ERROR} database restart command 'pg_ctl' not exists"
  138. echo -e "${ERROR} please check to see if the database is installed or the command directory does not have permission to access it"
  139. exit 1
  140. else
  141. echo -e "${INFO} database restart command 'pg_ctl' path: ${result}"
  142. pgctl_path=${result}
  143. fi
  144. }
  145. # user choose whether to restart or not
  146. function check_restart(){
  147. read -r -p "Is it necessary to restart database immediately?[Enter YES or NO]:" result
  148. if [[ "${result,,}" = "yes" ]] ; then
  149. echo -e "${INFO} start to restart database"
  150. ${pgctl_path} restart -D "${data_directory}" >& /dev/null
  151. if [[ 0 -ne ${status} ]] ; then
  152. echo -e "${ERROR} restart database failed"
  153. exit 12
  154. fi
  155. elif [[ "${result,,}" = "no" ]] ; then
  156. echo -e "${WARN} please restart database manually"
  157. echo -e "${WARN} if you don't restart, database may not be available"
  158. exit 11
  159. else
  160. echo -e "${ERROR} invalid input,please enter again"
  161. check_restart
  162. fi
  163. }
  164. # ******* start *******
  165. # prepare conditions:memory ,data_directory
  166. prepare_conditions
  167. # calculate parameters
  168. calculate_parameters
  169. # modify parameters
  170. modify_parameters
  171. # create directory(pg_log and pg_arch)
  172. create_dir
  173. # the path of the database restart command 'pg_ctl'
  174. find_cmd
  175. # remind user that they need to restart database to take effect
  176. # process sleep
  177. sleep 0.5s
  178. echo -e ""
  179. echo -e "*******************************************************************"
  180. echo -e "* *"
  181. echo -e "* *"
  182. echo -e "* restart database to take effect *"
  183. echo -e "* *"
  184. echo -e "* *"
  185. echo -e "*******************************************************************"
  186. # process sleep
  187. sleep 0.5s
  188. # user choose whether to restart or not
  189. # check_restart
  190. echo -e "${INFO} start to restart database"
  191. ${pgctl_path} restart -D "${data_directory}" >& /dev/null
文章知识点与官方知识档案匹配,可进一步学习相关知识
PostgreSQL技能树首页概览6104 人正在系统学习中

[转帖]PostgreSQL 参数优化设置 32GB内存(推荐) 内存参数 检查点 日志参数 自动初始化参数shell脚本的更多相关文章

  1. vm内核参数优化设置

     http://www.cnblogs.com/wjoyxt/archive/2014/06/08/3777042.html (1)vm.overcommit_memory 执行grep -i com ...

  2. ajax 参数data问题 data中的 参数名 参数值为string 提交到后台后,会自动转换参数名相同的 类型 和 js字符串拼接

    latlng"14.6005238,100.43635419999998"Cusid"accb5c1b-6aef-4f3b-a4eb-d60ea1ca5f54" ...

  3. AI人脸识别SDK接入 — 参数优化篇(虹软)

    引言 使用了虹软公司免费的人脸识别算法,感觉还是很不错的,当然,如果是初次接触的话会对一些接口的参数有些疑问的.这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux.andro ...

  4. 虹软AI 人脸识别SDK接入 — 参数优化篇

    引言 使用了免费的人脸识别算法,感觉还是很不错的,但是初次接触的话会对一些接口的参数有些疑问的.这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux.android基本一样), ...

  5. linux——系统内核参数优化

    vim /etc/sysctl.conf net.ipv4.tcp_syncookies = 1 fs.file-max = 999999 net.ipv4.tcp_max_tw_buckets = ...

  6. 使用服务器参数文件(SPFILE)管理初始化参数

    传统上,Oracle数据库的初始化参数存储在文本初始化参数文件中.为了更好的可管理性,您可以选择在二进制服务器参数文件中维护初始化参数,该文件在数据库启动和关闭期间保持不变.本节介绍服务器参数文件,并 ...

  7. Ubuntu 系统服务器初始化配置、安全加固、内核优化和常用软件安装的Shell脚本分享

    转载自:https://www.bilibili.com/read/cv13875402?spm_id_from=333.999.0.0 描述: 适用于企业内部 Ubuntu 操作服务器初始化.系统安 ...

  8. CentOS7 系统服务器初始化配置、安全加固、内核升级优化常用软件安装的Shell脚本分享

    转载自:https://www.bilibili.com/read/cv13875630?spm_id_from=333.999.0.0 描述: 适用于企业内部 CentOS7 系列操作服务器初始化. ...

  9. javaee学习-servlet初始化参数

    1.需要定义ServletConfig对象来接收servlet配置的初始化参数. 2.当servlet配置了初始化参数后,web容器在创建servlet实例对象时, 会自动将这些初始化参数封装到Ser ...

  10. ORACLE初始化参数文件概述

    ORACLE初始化参数文件概述 在9i之前,参数文件只有一种,它是文本格式的,称为pfile,在9i及以后的版本中,新增了服务器参数文件,称为spfile,它是二进制格式的.这两种参数文件都是用来存储 ...

随机推荐

  1. MySQL系列:索引(B+Tree树、构建过程、回表、基本操作、执行计划、应用)

    介绍 https://dev.mysql.com/doc/refman/5.7/en/optimization-indexes.html 作用 优化查询 算法 索引的算法包括 BTree Hash R ...

  2. Java 给PPT中的表格设置分布行和分布列

    在表格中可设置"分布行"或"分布列"将行高.列宽调整为协调统一的高度或宽度,是一种快速实现表格排版的方法之一.下面,通过Java后端程序代码介绍如何在PPT幻灯 ...

  3. 想提高运维效率,那就把MySQL数据库部署到Kubernetes 集群中

    摘要:Kubernetes 很多看起来比较"繁琐"的设计的主要目的,都是希望为开发者提供更多的"可扩展性",给使用者带来更多的"稳定性"和& ...

  4. 大银行数字化升级之后,火山引擎 VeDI 这次要把能力带给中小金融机构

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 数据技术是金融行业数字化转型的重要动力. 近年来,各大银行在全面推进数据技术建设上动作频频.比如,建设银行深化平台经营,依 ...

  5. 火山引擎 DataLeap 一招教你避坑“数据开发”中的资源隔离问题

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在离线数仓开发过程中,研发人员需要根据业务变化,在开发/生产环境中不断切换.解析.调试.以往,企业一般通过人工方式 ...

  6. 大数据 - ClickHouse

    https://clickhouse.com/ 概念 ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C++语言编写,主要用于在线分析处理查询( ...

  7. Kubernetes(K8S) 配置静态资源服务

    Kubernetes(K8S) 配置静态资源服务 --- apiVersion: v1 kind: ConfigMap metadata: name: img-config namespace: vi ...

  8. 2021 VDC :vivo 互联网服务亿级用户的技术架构演进之路

    关注公众号[vivo互联网技术]--回复[2021VDC]获取大会PPT. 2021年12月16日,vivo 开发者大会圆满落幕.在互联网技术专场中,来自vivo 互联网技术的6位研发专家,从基础架构 ...

  9. Kafka的Rebalance机制可能造成的影响及解决方案

    一.kafka的rebalance机制在Kafka中,当有新消费者加入或者订阅的Topic数发生变化时,会触发Rebalance(再均衡:在同一个消费者组当中,分区的所有权从一个消费者转移到另外一个消 ...

  10. mock使用