前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

notes

作者头像
mingjie
发布2022-07-14 13:52:50
3760
发布2022-07-14 13:52:50
举报

sh

删除7天前的文件 注意修改目录.\ 扩展名.csv

代码语言:javascript
复制
find ./ -type f -mtime +7 -name "*.csv" -exec rm -f {} \;
find ./ -type f -mtime +7 -name "*.log" -exec rm -f {} \;

编译

代码语言:javascript
复制
./configure --prefix=/home/mingjiegao/dev/bin/pg1400 \
--enable-tap-tests \
--with-tcl \
--enable-depend \
--enable-cassert \
--enable-debug \
--with-perl \
--with-openssl \
--with-libxml \
CFLAGS="-ggdb -O0"

-- 宏
./configure --prefix=/home/mingjiegao/dev/bin/pg1400 \
--enable-tap-tests \
--with-tcl \
--enable-depend \
--enable-cassert \
--enable-debug \
--with-perl \
--with-openssl \
--with-libxml \
CFLAGS="-ggdb -O0 -g3 -gdwarf-2"

tap

编译参数需要打开--enable-tap-tests

代码语言:javascript
复制
make -C src/bin check
make -C src/test/isolation check
make -C src/test/authentication check PROVE_TESTS="t/001_password.pl"

make -C contrib -j
make -C contrib install
export NO_PGXS=1;make -C contrib install

gdb

代码语言:javascript
复制
define nt
p *(Node*)$arg0
end

define tr
p *(($arg0*)$arg1)
end

define plist
  p ((List*)$arg0)->length
  set $n = ((List*)$arg0)->length
  set $i = 0
  while($i < $n)
    p ((List*)$arg0)->elements[$i]
    set $i = $i + 1
  end
end

world

代码语言:javascript
复制
# first
make check-world -j 2>&1 > checkworld.log
# if error existed
make check-world 2>&1 > checkworld.log

make check-world EXTRA_TESTS=numeric_big
make check-world EXTRA_TESTS=numeric_big -j
make check-world EXTRA_TESTS=numeric_big -j 2>&1 > ck.log

check

配好环境变量,用installcheck在指定实例上测试

代码语言:javascript
复制
make check
make installcheck

OS参数记录

代码语言:javascript
复制
vi /etc/sysctl.conf    
    
# add by digoal.zhou        
fs.aio-max-nr = 1048576        
fs.file-max = 76724600        
        
# 可选:kernel.core_pattern = /data01/corefiles/core_%e_%u_%t_%s.%p                 
# /data01/corefiles 事先建好,权限777,如果是软链接,对应的目录修改为777        
        
kernel.sem = 4096 2147483647 2147483646 512000            
# 信号量, ipcs -l 或 -u 查看,每16个进程一组,每组信号量需要17个信号量。        
        
kernel.shmall = 107374182              
# 所有共享内存段相加大小限制 (建议内存的80%),单位为页。        
kernel.shmmax = 274877906944           
# 最大单个共享内存段大小 (建议为内存一半), >9.2的版本已大幅降低共享内存的使用,单位为字节。        
kernel.shmmni = 819200                 
# 一共能生成多少共享内存段,每个PG数据库集群至少2个共享内存段        
        
net.core.netdev_max_backlog = 10000        
net.core.rmem_default = 262144               
# The default setting of the socket receive buffer in bytes.        
net.core.rmem_max = 4194304                  
# The maximum receive socket buffer size in bytes        
net.core.wmem_default = 262144               
# The default setting (in bytes) of the socket send buffer.        
net.core.wmem_max = 4194304                  
# The maximum send socket buffer size in bytes.        
net.core.somaxconn = 4096        
net.ipv4.tcp_max_syn_backlog = 4096        
net.ipv4.tcp_keepalive_intvl = 20        
net.ipv4.tcp_keepalive_probes = 3        
net.ipv4.tcp_keepalive_time = 60        
net.ipv4.tcp_mem = 8388608 12582912 16777216        
net.ipv4.tcp_fin_timeout = 5        
net.ipv4.tcp_synack_retries = 2        
net.ipv4.tcp_syncookies = 1            
# 开启SYN Cookies。当出现SYN等待队列溢出时,启用cookie来处理,可防范少量的SYN攻击        
net.ipv4.tcp_timestamps = 1            
# 减少time_wait        
net.ipv4.tcp_tw_recycle = 0            
# 如果=1则开启TCP连接中TIME-WAIT套接字的快速回收,但是NAT环境可能导致连接失败,建议服务端关闭它        
net.ipv4.tcp_tw_reuse = 1              
# 开启重用。允许将TIME-WAIT套接字重新用于新的TCP连接        
net.ipv4.tcp_max_tw_buckets = 262144        
net.ipv4.tcp_rmem = 8192 87380 16777216        
net.ipv4.tcp_wmem = 8192 65536 16777216        
        
net.nf_conntrack_max = 1200000        
net.netfilter.nf_conntrack_max = 1200000        
        
vm.dirty_background_bytes = 409600000               
#  系统脏页到达这个值,系统后台刷脏页调度进程 pdflush(或其他) 自动将(dirty_expire_centisecs/100)秒前的脏页刷到磁盘        
#  默认为10%,大内存机器建议调整为直接指定多少字节        
        
vm.dirty_expire_centisecs = 3000                     
#  比这个值老的脏页,将被刷到磁盘。3000表示30秒。        
vm.dirty_ratio = 95                                  
#  如果系统进程刷脏页太慢,使得系统脏页超过内存 95 % 时,则用户进程如果有写磁盘的操作(如fsync, fdatasync等调用),则需要主动把系统脏页刷出。        
#  有效防止用户进程刷脏页,在单机多实例,并且使用CGROUP限制单实例IOPS的情况下非常有效。          
        
vm.dirty_writeback_centisecs = 100                    
#  pdflush(或其他)后台刷脏页进程的唤醒间隔, 100表示1秒。        
        
vm.swappiness = 0        
#  不使用交换分区        
        
vm.mmap_min_addr = 65536        
vm.overcommit_memory = 0             
#  在分配内存时,允许少量over malloc, 如果设置为 1, 则认为总是有足够的内存,内存较少的测试环境可以使用 1 .          
        
vm.overcommit_ratio = 90             
#  当overcommit_memory = 2 时,用于参与计算允许指派的内存大小。        
vm.swappiness = 0                    
#  关闭交换分区        
vm.zone_reclaim_mode = 0             
# 禁用 numa, 或者在vmlinux中禁止.         
net.ipv4.ip_local_port_range = 40000 65535            
# 本地自动分配的TCP, UDP端口号范围        
fs.nr_open=20480000        
# 单个进程允许打开的文件句柄上限        
        
# 以下参数请注意        
# vm.extra_free_kbytes = 4096000        
# vm.min_free_kbytes = 2097152  # vm.min_free_kbytes 建议每32G内存分配1G vm.min_free_kbytes       
# 如果是小内存机器,以上两个值不建议设置        
# vm.nr_hugepages = 66536            
#  建议shared buffer设置超过64GB时 使用大页,页大小 /proc/meminfo Hugepagesize        
# vm.lowmem_reserve_ratio = 1 1 1        
# 对于内存大于64G时,建议设置,否则建议默认值 256 256 32    

limit

代码语言:javascript
复制
vi /etc/security/limits.conf    
    
# nofile超过1048576的话,一定要先将sysctl的fs.nr_open设置为更大的值,并生效后才能继续设置nofile.        
        
* soft    nofile  1024000        
* hard    nofile  1024000        
* soft    nproc   unlimited        
* hard    nproc   unlimited        
* soft    core    unlimited        
* hard    core    unlimited        
* soft    memlock unlimited        
* hard    memlock unlimited       

time

代码语言:javascript
复制
vi /etc/rc.local    
    
touch /var/lock/subsys/local    
         
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then        
   echo never > /sys/kernel/mm/transparent_hugepage/enabled        
fi      
  
# 时钟  
echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource  
  
su - postgres -c "pg_ctl start"      

FIO

代码语言:javascript
复制
vi test    
    
[global]        
thread        
numjobs=64        
ramp_time=6        
size=10g        
exitall        
time_based        
runtime=180        
group_reporting        
randrepeat=0        
norandommap        
bs=8k        
rwmixwrite=35        
        
[rw-rand-libaio-mysql-ext4]        
stonewall        
direct=1        
iodepth=16        
iodepth_batch=8        
iodepth_low=8        
iodepth_batch_complete=8        
rw=randrw        
ioengine=libaio        
filename=/data01/ext4        
        
[rw-seq-libaio-mysql-ext4]        
stonewall        
direct=1        
iodepth=16        
iodepth_batch=8        
iodepth_low=8        
iodepth_batch_complete=8        
rw=rw        
ioengine=libaio        
filename=/data01/ext4        
    
[rw-rand-sync-pgsql-ext4]        
stonewall        
direct=0        
rw=randrw        
ioengine=sync        
filename=/data01/ext4        
        
[rw-seq-sync-pgsql-ext4]        
stonewall        
direct=0        
rw=rw        
ioengine=sync        
filename=/data01/ext4    

fio test --output ./cfq-raw.log

PG参数模板

代码语言:javascript
复制
listen_addresses = '0.0.0.0'      
port = 1921      
max_connections = 2000      
superuser_reserved_connections = 3      
unix_socket_directories = '., /var/run/postgresql, /tmp'      
tcp_keepalives_idle = 60      
tcp_keepalives_interval = 10      
tcp_keepalives_count = 10      
shared_buffers = 64GB      
max_prepared_transactions = 2000      
work_mem = 8MB      
maintenance_work_mem = 2GB      
dynamic_shared_memory_type = posix      
vacuum_cost_delay = 0      
bgwriter_delay = 10ms      
bgwriter_lru_maxpages = 1000      
bgwriter_lru_multiplier = 10.0      
effective_io_concurrency = 0      
max_worker_processes = 128      
max_parallel_maintenance_workers = 64      
max_parallel_workers_per_gather = 0      
parallel_leader_participation = on      
max_parallel_workers = 64      
wal_level = minimal        
synchronous_commit = off      
wal_writer_delay = 10ms      
checkpoint_timeout = 35min      
max_wal_size = 128GB      
min_wal_size = 32GB      
checkpoint_completion_target = 0.1      
max_wal_senders = 0      
effective_cache_size = 400GB      
log_destination = 'csvlog'      
logging_collector = on      
log_directory = 'log'      
log_filename = 'postgresql-%a.log'      
log_truncate_on_rotation = on      
log_rotation_age = 1d      
log_rotation_size = 0      
log_checkpoints = on       
log_connections = on      
log_disconnections = on      
log_error_verbosity = verbose       
log_line_prefix = '%m [%p] '      
log_timezone = 'PRC'      
log_autovacuum_min_duration = 0      
autovacuum_max_workers = 16      
autovacuum_freeze_max_age = 1200000000      
autovacuum_multixact_freeze_max_age = 1400000000      
autovacuum_vacuum_cost_delay = 0ms      
vacuum_freeze_table_age = 1150000000      
vacuum_multixact_freeze_table_age = 1150000000      
datestyle = 'iso, mdy'      
timezone = 'PRC'      
lc_messages = 'C'      
lc_monetary = 'C'      
lc_numeric = 'C'      
lc_time = 'C'      
default_text_search_config = 'pg_catalog.english'      
jit = off      
cpu_tuple_cost=0.00018884145574257426        
cpu_index_tuple_cost = 0.00433497085216479990        
cpu_operator_cost = 0.00216748542608239995        
seq_page_cost=0.014329        
random_page_cost = 0.016     
parallel_tuple_cost = 0      
parallel_setup_cost = 0     
min_parallel_table_scan_size = 0    
min_parallel_index_scan_size = 0    

genv

代码语言:javascript
复制
die() {
    echo "error: $@" >&2
    echo "error: $@" >> $logfile
    exit 1
}

if [ ! $G_DEV_PATH ]
then
    die "Need environment variable G_DEV_PATH"
fi

directory=${G_DEV_PATH}
port=$2
pghome=${directory}/bin/$1
pgdata=${directory}/data/pg${port}

[ ${port} ] ||  die "No port"
[ -d "${directory}" ]          ||  die "No base directory: ${directory}"
[ -d "${pghome}" ]          ||  die "No pghome directory: ${pghome}"
#[ -d "${pgdata}" ]          ||  die "No pgdata directory: ${pgdata}"


export PS1="[\\u@\\h \\w][$1][$2]\\$ "

export PGPORT=${port}
export PGDATA=${pgdata}
export LANG=en_US.utf8
export PGHOME=${pghome}
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export DATE=`date +"%Y%m%d%H%M"`
export PATH=$PGHOME/bin:$PATH:.
export MANPATH=$PGHOME/share/man:$MANPATH
export PGHOST=$PGDATA
export PGUSER=mingjiegao
export PGDATABASE=postgres

alias pa='pg_ctl start'
alias po='pg_ctl stop'
alias pao='pg_ctl stop;pg_ctl stop;pg_ctl start'
alias phome='cd ${pghome}'
alias pdata='cd ${pgdata}'
alias psrc='cd ${directory}/src'
alias remake='make clean;make -j'
alias mc='make clean'
alias mj='make -j'
alias mi='make install

cf() {
sed -ir "s/#*port.*/port = ${PGPORT}/" ${PGDATA}/postgresql.conf
sed -ir "s/#*max_connections.*/max_connections = 1000/" ${PGDATA}/postgresql.conf
sed -ir "s/#*listen_addresses.*/listen_addresses = '0.0.0.0'/" ${PGDATA}/postgresql.conf
sed -ir "s/#*unix_socket_directories.*/unix_socket_directories = '.'/" ${PGDATA}/postgresql.conf
sed -ir "s/#*superuser_reserved_connections.*/superuser_reserved_connections = 13/" ${PGDATA}/postgresql.conf
sed -ir "s/#*logging_collector.*/logging_collector= on/" ${PGDATA}/postgresql.conf
sed -ir "s/#*log_directory.*/log_directory = 'pg_log'/" ${PGDATA}/postgresql.conf
sed -ir "s/#*log_filename.*/log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'/" ${PGDATA}/postgresql.conf
sed -ir "s/#*log_rotation_size.*/log_rotation_size = 10MB/" ${PGDATA}/postgresql.conf
sed -ir "s/#*log_line_prefix.*/log_line_prefix='%p %r %u %d %t %e'/" ${PGDATA}/postgresql.conf
sed -ir "s/#*log_min_duration_statement.*/log_min_duration_statement= 1000/" ${PGDATA}/postgresql.conf
sed -ir "s/#*log_timezone.*/log_timezone = 'UTC'/" ${PGDATA}/postgresql.conf
sed -ir "s/#*log_truncate_on_rotation.*/log_truncate_on_rotation = on/" ${PGDATA}/postgresql.conf
sed -ir "s/#*log_rotation_age.*/log_rotation_age = 0/" ${PGDATA}/postgresql.conf
sed -ir "s/#*log_statement.*/log_statement= 'all'/" ${PGDATA}/postgresql.conf
sed -ir "s/#*max_prepared_transactions.*/max_prepared_transactions= 800/" ${PGDATA}/postgresql.conf
}

valgrind:内存泄漏、踩内存

代码语言:javascript
复制
configure ... --enable-debug -O0

yum install -y valgrind valgrind-devel

src/include/pg_config_manual.h  
#define USE_VALGRIND


valgrind --leak-check=yes --gen-suppressions=all \
    --suppressions=/home/mingjiegao/dev/src/postgresql-10.17/src/tools/valgrind.supp --time-stamp=yes \
    --log-file=/tmp/%p.log --trace-children=yes \
    --track-origins=yes --read-var-info=yes \
    --show-leak-kinds=all -v \
    postgres --log_line_prefix="%m %p " \
    --log_statement=all --shared_buffers=4GB 2>&1 | tee /tmp/postmaster.log
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sh
  • 编译
  • tap
  • gdb
  • world
  • check
  • OS参数记录
  • FIO
  • PG参数模板
  • genv
  • valgrind:内存泄漏、踩内存
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档