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
广告
将在 10 秒后关闭
bannerAds