[转帖]PostgreSQL 参数优化设置 32GB内存(推荐) 内存参数 检查点 日志参数 自动初始化参数shell脚本
这个shell脚本可以使用shell的关联数组对
-
#!/bin/bash
-
#command to execute script: su - postgres -c "./create.sh"
-
#default value refer to standard server(cpu:6cores,memory:32G,storage:12T)
-
#value according to the actual situation
-
-
#List of parameters to be modified
-
:<<!
-
enable_seqscan = off
-
enable_indexscan = on
-
enable_bitmapscan = on
-
max_connections = 1000
-
shared_buffers = 16GB
-
effective_cache_size = 24GB
-
work_mem = 32MB
-
temp_buffers = 32MB
-
wal_buffers = 512MB
-
maintenance_work_mem = 2GB
-
autovacuum_max_workers = 3
-
autovacuum_work_mem = 256MB
-
checkpoint_timeout = 30min
-
max_wal_size = 4GB
-
min_wal_size = 1GB
-
checkpoint_completion_target = 0.9
-
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'
-
!
-
-
ERROR="\033[41;37m ERROR \033[0m"
-
INFO="\033[42;37m INFO \033[0m"
-
WARN="\033[43;37m WARN \033[0m"
-
COMMON_ERROR="some error happened, specific information please see console output"
-
-
# Array of parameters
-
declare -A parameter_array
-
parameter_array=([enable_seqscan]=off [enable_indexscan]=on [enable_bitmapscan]=on [max_connections]=1000 [shared_buffers]=16GB
-
[effective_cache_size]=24GB [work_mem]=32MB [temp_buffers]=32MB [wal_buffers]=512MB [maintenance_work_mem]=2GB
-
[autovacuum_max_workers]=3 [autovacuum_work_mem]=256MB [checkpoint_timeout]=30min [max_wal_size]=4GB
-
[min_wal_size]=1GB [checkpoint_completion_target]=0.9 [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]=viid_log_%a.log )
-
-
#default value :
-
pgctl_path=
-
data_directory=
-
memory=
-
-
# check command exit value, 0 is success
-
function check_fun(){
-
status=$?
-
error=${COMMON_ERROR}
-
if [[ 0 -ne ${status} ]] ; then
-
echo -e "${ERROR} ${error}"
-
exit 1
-
fi
-
}
-
-
# prepare conditions
-
function prepare_conditions(){
-
data_directory=$(psql -qtAX -c "show data_directory" | sed 's/[ ]//g')
-
check_fun
-
if [[ ! -d "${data_directory}" ]] ; then
-
echo -e "${ERROR} database's data directory does not exist"
-
exit 1
-
fi
-
# physical machine environment
-
memory=$(grep MemTotal /proc/meminfo | awk '{print $2 / 1024 / 1024}' | sed 's/\.[0-9]*//' | tail -n 1)
-
check_fun
-
# docker environment
-
memory_limit=$(($(awk '{print $1}' /sys/fs/cgroup/memory/memory.limit_in_bytes) / 1024 / 1024 /1024))
-
check_fun
-
# comparing the two, choose the smaller one.
-
if [[ "${memory_limit}" -le "${memory}" ]] ; then
-
memory=${memory_limit}
-
fi
-
}
-
-
# calculate parameters
-
function calculate_parameters(){
-
# 50%*memory
-
parameter_array[shared_buffers]=$((memory * 1024 / 2))"MB"
-
# 75%*memory
-
parameter_array[effective_cache_size]=$((memory * 1024 * 3 / 4 ))"MB"
-
# <1%
-
parameter_array[work_mem]=${memory}"MB"
-
# <1%
-
parameter_array[temp_buffers]=${memory}"MB"
-
# 32GB => 512MB
-
parameter_array[wal_buffers]=$((memory * 16 ))"MB"
-
# 32GB => 2048MB
-
parameter_array[maintenance_work_mem]=$((memory * 64 ))"MB"
-
}
-
-
# modify parameters
-
function modify_parameters(){
-
# modify parameters by modifying file postgresql.conf:
-
for parameter in ${!parameter_array[*]}
-
do
-
#check whether the parameters have been modified
-
# PostgreSQL's default parameter configuration example: enable_seqscan = on
-
# viid's example: enable_seqscan='on'
-
check_out=$(grep "^${parameter}=" "${data_directory}"/postgresql.conf | grep -v '#' | tail -n 1)
-
# process sleep
-
sleep 0.2s
-
if [[ -z "${check_out}" ]] ; then
-
echo "${parameter}='${parameter_array[${parameter}]}'" >> "${data_directory}"/postgresql.conf
-
check_fun
-
echo -e "${INFO} modify ${parameter} successfully"
-
else
-
if [[ "${check_out}" = "${parameter}='${parameter_array[${parameter}]}'" ]] ; then
-
echo -e "${INFO} ${parameter} is already configured, then skip this step"
-
else
-
sed -i s!^"${check_out}"!"${parameter}='${parameter_array[${parameter}]}'"!g "${data_directory}"/postgresql.conf
-
check_fun
-
echo -e "${INFO} modify ${parameter} successfully"
-
fi
-
fi
-
done
-
}
-
-
# create directory(pg_log and pg_arch), and set user postgres permission
-
function create_dir(){
-
directory_array=("pg_arch" "pg_log")
-
for directory in ${directory_array[*]};
-
do
-
# process sleep
-
sleep 0.2s
-
if [[ ! -d "${data_directory}/${directory}" ]] ; then
-
mkdir -p "${data_directory}"/"${directory}"
-
echo -e "${INFO} path ${data_directory}/${directory} create successfully"
-
else
-
echo -e "${INFO} ${data_directory}/${directory} is already exists, then skip this step"
-
fi
-
# set user postgres permission
-
chown postgres:postgres "${data_directory}"/"${directory}"
-
done
-
}
-
-
# because the environment is different, need to find the path of the database restart command 'pg_ctl'
-
function find_cmd(){
-
result=$(find / -name pg_ctl 2> /dev/null | grep bin/pg_ctl$ | tail -n 1 )
-
# check whether the path exists
-
if [[ -z "${result}" ]] ; then
-
echo -e "${ERROR} database restart command 'pg_ctl' not exists"
-
echo -e "${ERROR} please check to see if the database is installed or the command directory does not have permission to access it"
-
exit 1
-
else
-
echo -e "${INFO} database restart command 'pg_ctl' path: ${result}"
-
pgctl_path=${result}
-
fi
-
}
-
-
# user choose whether to restart or not
-
function check_restart(){
-
read -r -p "Is it necessary to restart database immediately?[Enter YES or NO]:" result
-
if [[ "${result,,}" = "yes" ]] ; then
-
echo -e "${INFO} start to restart database"
-
${pgctl_path} restart -D "${data_directory}" >& /dev/null
-
if [[ 0 -ne ${status} ]] ; then
-
echo -e "${ERROR} restart database failed"
-
exit 12
-
fi
-
elif [[ "${result,,}" = "no" ]] ; then
-
echo -e "${WARN} please restart database manually"
-
echo -e "${WARN} if you don't restart, database may not be available"
-
exit 11
-
else
-
echo -e "${ERROR} invalid input,please enter again"
-
check_restart
-
fi
-
}
-
-
# ******* start *******
-
# prepare conditions:memory ,data_directory
-
prepare_conditions
-
# calculate parameters
-
calculate_parameters
-
# modify parameters
-
modify_parameters
-
# create directory(pg_log and pg_arch)
-
create_dir
-
# the path of the database restart command 'pg_ctl'
-
find_cmd
-
# remind user that they need to restart database to take effect
-
# process sleep
-
sleep 0.5s
-
echo -e ""
-
echo -e "*******************************************************************"
-
echo -e "* *"
-
echo -e "* *"
-
echo -e "* restart database to take effect *"
-
echo -e "* *"
-
echo -e "* *"
-
echo -e "*******************************************************************"
-
# process sleep
-
sleep 0.5s
-
# user choose whether to restart or not
-
# check_restart
-
echo -e "${INFO} start to restart database"
-
${pgctl_path} restart -D "${data_directory}" >& /dev/null
-
[转帖]PostgreSQL 参数优化设置 32GB内存(推荐) 内存参数 检查点 日志参数 自动初始化参数shell脚本的更多相关文章
- vm内核参数优化设置
http://www.cnblogs.com/wjoyxt/archive/2014/06/08/3777042.html (1)vm.overcommit_memory 执行grep -i com ...
- ajax 参数data问题 data中的 参数名 参数值为string 提交到后台后,会自动转换参数名相同的 类型 和 js字符串拼接
latlng"14.6005238,100.43635419999998"Cusid"accb5c1b-6aef-4f3b-a4eb-d60ea1ca5f54" ...
- AI人脸识别SDK接入 — 参数优化篇(虹软)
引言 使用了虹软公司免费的人脸识别算法,感觉还是很不错的,当然,如果是初次接触的话会对一些接口的参数有些疑问的.这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux.andro ...
- 虹软AI 人脸识别SDK接入 — 参数优化篇
引言 使用了免费的人脸识别算法,感觉还是很不错的,但是初次接触的话会对一些接口的参数有些疑问的.这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux.android基本一样), ...
- linux——系统内核参数优化
vim /etc/sysctl.conf net.ipv4.tcp_syncookies = 1 fs.file-max = 999999 net.ipv4.tcp_max_tw_buckets = ...
- 使用服务器参数文件(SPFILE)管理初始化参数
传统上,Oracle数据库的初始化参数存储在文本初始化参数文件中.为了更好的可管理性,您可以选择在二进制服务器参数文件中维护初始化参数,该文件在数据库启动和关闭期间保持不变.本节介绍服务器参数文件,并 ...
- Ubuntu 系统服务器初始化配置、安全加固、内核优化和常用软件安装的Shell脚本分享
转载自:https://www.bilibili.com/read/cv13875402?spm_id_from=333.999.0.0 描述: 适用于企业内部 Ubuntu 操作服务器初始化.系统安 ...
- CentOS7 系统服务器初始化配置、安全加固、内核升级优化常用软件安装的Shell脚本分享
转载自:https://www.bilibili.com/read/cv13875630?spm_id_from=333.999.0.0 描述: 适用于企业内部 CentOS7 系列操作服务器初始化. ...
- javaee学习-servlet初始化参数
1.需要定义ServletConfig对象来接收servlet配置的初始化参数. 2.当servlet配置了初始化参数后,web容器在创建servlet实例对象时, 会自动将这些初始化参数封装到Ser ...
- ORACLE初始化参数文件概述
ORACLE初始化参数文件概述 在9i之前,参数文件只有一种,它是文本格式的,称为pfile,在9i及以后的版本中,新增了服务器参数文件,称为spfile,它是二进制格式的.这两种参数文件都是用来存储 ...
随机推荐
- 微软用它取代了`Nginx`吞吐量提升了百分之八十!
Azure应用服务用YARP取代了Nginx,获得了80%以上的吞吐量.他们每天处理160B多个请求(1.9 m RPS).这是微软的一项了不起的技术创新. 首先我们来介绍一下什么是Yarp Yarp ...
- 盘点Python 中字符串的常用操作
摘要:盘点 Python 中字符串的几个常用操作,对新手极度的友好. 本文分享自华为云社区<盘点 Python 中字符串的常用操作,对新手极度友好>,作者:TT-千叶 . 在 Python ...
- 消除视觉Transformer与卷积神经网络在小数据集上的差距
摘要:本文通过多种操作构建混合模型,增强视觉Transformer捕捉空间相关性的能力和其进行通道多样性表征的能力,弥补了Transformer在小数据集上从头训练的精度与传统的卷积神经网络之间的差距 ...
- 对象存储只能按文件名搜索,你out了吧
摘要:不少大公司的一个桶里都是几亿几十亿的对象,那他们都是怎么检索的呢? 本文分享自华为云社区<对象存储只能按文件名搜索? 用 DWR + ElasticSearch 实现文件名.文件内容.图片 ...
- 带你了解NB-IoT标准演进
摘要:本文将带大家详细了解NB-IoT标准演进与产业发展. 本文分享自华为云社区<一文带你了解NB-IoT标准演进与产业发展>,作者:万万万. 我们都知道,物联网的场景和手机.电脑在使用的 ...
- 9月活动回顾(免费领取PPT)|火山引擎DataLeap、ByteHouse多位专家带来DataOps、实时计算等前沿技术分享!
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在上月举行的火山引擎开发者社区 Meetup 第12期暨超话数据专场<数智化转型背景下的火山引擎大数据技 ...
- 火山引擎 DataTester:一次 A/B 测试,帮助产品分享率提升超 20%
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 对 C 端产品而言,增长的核心要素之一是用户活跃度.通过各类激发互动的方式,使信息得以在关系链中流转.传播,达成有效的信息 ...
- Bug生命周期
新建,确认,解决,重新验证,关闭,重新打开 一个Bug由测试人员发现并提交,我们将状态标注为新建:开发人员接收了该Bug,将Bug的状态修改为已分配,表示已经认可:开发人员解决了该bug后,就将bug ...
- python实现微信扫码支付
import datetime import hashlib import time import json import random import string import requests f ...
- MMSC 扩充物料库存地点
当涉及到物料的库存地点时,系统通常会做校验,该物料是否扩充了库存地点,没有扩充则报错.为了不使这样的错误干扰到程序逻辑,通常会在涉及时,先查询MARD表,判断是否存在对应的库存地点.如果没有存在,则直 ...