PostgreSQL调优案例
预先信息
使用中文将以下内容进行释义:m3.xlarge实例
15GB 内存
13 ECU = 3.25ECU(2.6GHz)* 虚拟4核
数据库大小
3.38千兆字节
设定值
max_connections = 100
shared_buffers = 3GB # 実メモリの20%
# ここらへんのはとりあえずこのくらいで。小さすぎる分にはlog_temp_filesの設定で書き出されるので後で気づいて調整できる。
temp_buffers = 32MB
work_mem = 32MB
maintenance_work_mem = 128MB
wal_buffers = 16MB # 迷いどころもなく16MB
checkpoint_segments = 16 # HDへのフラッシュ回数を減らす
effective_cache_size = 7GB # planerのため。実メモリの半分ぐらいがいいらしい
# 7GB max shared mamory
kernel.shmall=1835008
kernel.shmmax=7516192768
运行以下命令以重新加载sudo sysctl -p,sudo /etc/init.d/postgresql restart。
便签
-
- shared_buffersの経験則は実メモリの20%-30%、もしくは頻繁にアクセスするテーブルのデータが載る程度
-
- shared_bufferを50%以上にするとカーネルのキャッシュが溢れスワップする
-
- work_memの最大は(実メモリ-shared_buffers)/max_connections。そうでないと確実にスワップする
-
- work_memの経験は実メモリ/max_connections/[4-16]
log_temp_filesの設定により、一時ファイルを使った場合Logに書き出すことが出来る
wal_buffersは-1でshared_bufferの1/32になる。
通常のWALセグメントの大きさである16MBを超えることはないため、大きすぎる場合は設定しなおしたほうが良い。
日志输出设置
#log_destination = 'stderr'
logging_collector = on
log_rotation_size = 1GB
#log_min_messages = warning
log_min_error_statement = warning # log_min_messages似合わせる
log_line_prefix='[%t][%p][%c-%l][%x][%e]%q (%u, %d, %r, %a) ' #とりあえず全部の情報を出しておけば良いのではという発想
log_min_duration_statement = 500 # 0.5秒以上かかった問い合わせを記録
log_temp_files = 1MB # 1MB以上の一時ファイルを作ったらログに書き出す
清除剩余进程
当AP端掉或与AP的网络连接断开时,DB端的进程会一直等待来自AP的响应,导致连接数达到最大值或者引发长时间事务的问题。为防止这种情况发生,可以将超时时间设定短一些。
tcp_keepalives_idle = 60 # keep alive パケット送出までの待機時間(デフォルト7200秒)
tcp_keepalives_interval = 5 # KeepAliveパケット送出に応答がなかった場合の再送間隔(デフォルト75秒)
tcp_keepalives_count = 6 # KeepAliveパケット送出回数の上限(デフォルト9)
在这个设置中,删除剩余进程只需要1分30秒。
参考:
These are some ways to paraphrase the following sentence into Chinese:
参考:
以下是将以下句子原生地用中文改写的一些方式:
参考:
请用中文将以下句子进行改写,只需要一种选项:
-
- http://www.mindcircus.jp/archives/2734
-
- http://itpro.nikkeibp.co.jp/article/COLUMN/20090703/333173/
- http://www.postgresql.jp/events/event_sozai/Summer_seminar2011_Operation_technique.pdf