amazon rdsを参考にしたとりまチューニング
TRANSCRIPT
Update 2010/7/21
Amazon RDSを参考にした とりまチューニング
2016/08/19 関西地区PostgreSQL勉強会
株式会社ロックオン 三原俊介
1
Update 2010/7/21
自己紹介
2
2012.04 株式会社ロックオン入社 インフラユニット
現在 マーケティングPF 開発部
主にインフラ全般、開発環境の改善、 ロックオフの管理人などなどやってます
三原 俊介– Shunsuke Mihara
自己紹介 3
始める前のアンケート 4
質問: みなさんDBのチューニング経験はありますか
1. PostgreSQLを使ったことがある方
2. PostgreSQLのチューニングをしたことがある方
3. MySQLを使ったことがある方
4. MySQLのチューニングをしたことがある方
今回のテーマ 5
DBの初期構築時に
最低限調整しておきたいパラメータ
目次
1. チューニングの必要性 と とりまチューニング
2. Amazon RDS
3. PostgreSQLのとりまチューニング
4. (おまけ) MySQLのとりまチューニング
Update 2010/7/21
チューニングの必要性 と とりまチューニング
6
チューニングの必要性 7
そもそもDBの構築直後(実装フェイズ前)に
チューニングは必要ない
1. 性能改善は欲を出せばキリがない
達成するべき目標値が決まった上で、どうやれ
ば達成できるかボトルネックを考慮して実施
2. 基準となるDBのアクセス傾向が必要
とりまチューニング 8
とはいえ、 DBのデフォルト値から
とりあえず、まあ変更した方が良い値はあります
なぜデフォルトが最適な初期値になっていないのか
1. 最低限のスペックで動作させるための値
2. 安全側に倒した値
3. 1,2の項目と連動させないと意味が無い値
では、何を基準としてとりまチューニングを行うか
Update 2010/7/21
Amazon RDS
9
AWSのRDBサービス Amazon RDS 10
Amazon RDSのデフォルト値を
とりまチューニングの参考にします
1. デフォルトでチューニング済みの設定で起動
2. RDSのスペックに合わせて動的に設定
3. 世の中で広く使われているDB設定
[注意] RDSのデフォルトパラメータは、Linuxの
DB専用サーバを想定したパラメータ WEBとの同居やWindowサーバ
だと適切ではない場合がある
とりまチューニング項目の調査観点 11
「スペックに連動する値」と
「DBデフォルトの値との差分」に着目
スペックの違うRDS2台を比較
→ どの値はスペックに合わせて変更するべきか
RDSとオンプレにインストールしたDBを比較
→ どの値はスペックに関わらず変更するべきか
とりまチューニング項目の調査方法 12
DB3台を用意し、パラメータを比較
1. インスタンスタイプ(スペック)の違うRDSを2
台起動
2. オンプレに同バージョンのDBをインストール
3. DBに入り設定値を取得
A) PostgreSQLならば「SHOW ALL;」
B) MySQLならば「SHOW VARIABLES;」
13 比較表を作成して確認
Update 2010/7/21
PostgreSQLのとりまチューニング
14
RDSのPostgreSQL 9.5.2 設定 15
スペックと連動する値 4項目
DBデフォルト値と差分がある値 53項目
全パラメータ238項目中
1. スペックと連動する値
shared_buffers, effective_cache_size, max_connections, wal_buffers
2. DBデフォルト値と差分がある値
※53項目は多いので以下に絞ってご紹介
autovacuum系, チェックポイント系, 多言語対応系
shared_buffers 16
shared_buffersはサーバメモリの1/4
■shared_buffersとは
データベースサーバが使用する共有メモリバッファ
のために使用するメモリ量
公式ドキュメントにも25%(1/4)が
良いよと書いてある
effective_cache_size 17
effective_cache_sizeはサーバメモリの1/2
■effective_cache_sizeとは
プランナーがインデックススキャンかシーケンシャ
ルスキャンかの判断に利用する参考値
PostgreSQL wiki
にも全メモリの1/2が保守的な設定と記載
max_connectionsとwal_buffers 18
max_connectionsはサーバメモリ128KB毎1増加
wal_buffersはデフォルト設定で自動調整
■max_connectionsとは
DBへの同時コネクション数の最大
■wal_bufferとは
トランザクションログを書き出すバッファ
デフォルトの自動設定でshared_buffersの1/32
autovacuum系 19
analyzeとvacuumが頻度良く発生するように
トリガーとなる値を半分に調整
■ autovacuum_naptime 60 → 30
autovacuumを起動する間隔を秒単位で指定
■ autovacuum_analyze_scale_factor 0.1 → 0.05
ANALYZEを起動するトリガとなる更新行数の割合
■ autovacuum_vacuum_scale_factor 0.2 → 0.1
VACUUMを起動するトリガとなる更新行数の割合
チェックポイント系 20
チェックポイントの書き出し処理を分散し、
負荷を減らすように調整(リカバリ時間は増加)
■ チェックポイントとは
PostgreSQLの共有バッファとディスク間の整合性
を取る処理
Update ○ Insert △ ・・・・
同期
(チェックポイント)
チェックポイント系 21
チェックポイントの書き出し処理を分散し、
負荷を減らすように調整(リカバリ時間は増加)
■ checkpoint_completion_target 0.5 → 0.9
チェックポイントの書き出し処理が、この値の割合に
なるように調整されて、チェックポイントが実行
■ max_wal_size 1GB → 2GB
■ min_wal_size 80MB → 256MB
※9.5でcheckpoint_segmentsの代わりに導入
多言語対応系 22
マルチバイト文字を扱いやすいように設定
■ lc_collate C → en_US.UTF-8
■ lc_ctype C → en_US.UTF-8
DB作成時の多言語対応のベースになる値
※ DB作成後変更できない値のためハマりやすい
日本での利用の場合、とりま「jp_JP.UTF-8」で
PostgreSQLのとりまチューニング まとめ 23
RDSでデフォルトでチューニングされているもの
1. shared_buffersはサーバメモリの1/4
2. effective_cache_sizeはサーバメモリの1/2
3. max_connectionsはサーバメモリ128kB毎1増加
4. wal_buffersはデフォルト設定で自動調整
5. autovacuumはトリガーとなる値を半分に調整
6. チェックポイントの書き出し処理を分散
7. マルチバイト文字を扱いやすいように設定
Update 2010/7/21
(おまけ)MySQLのとりまチューニング
24
RDSのMySQL 5.6.27 設定 25
スペックと連動する値 5項目
DBデフォルトとの値の差分 83項目
全パラメータ455項目中
1. スペックと連動する値
innodb_buffer_pool_size, max_connections,
back_log, host_cache_size, thread_cache_size
2. デフォルトとの差分
※今回は省略
innodb_buffer_pool_size 26
innodb_buffer_pool_sizeはサーバメモリの3/4
■ innodb_buffer_pool_sizeとは
InnoDBのバッファープールのサイズ
公式ドキュメントには、特に良い値について言及
は無し
max_connections 27
max_connectionsはサーバメモリ1.5MB毎1増加
■max_connectionsとは
DBへの同時コネクション数の最大
(PostgreSQL の 128KB毎より大きい)
ほかのパラメータ 28
残りの3パラメータは、RDSのインスタンスタイプ
にひもづくパラメータがあるらしくロジックが不明
db.t2.micro VCPU1 メモリ1GiB
db.t2.medium VCPU2 メモリ4GiB
back_log 63 112
host_cache_size 194 440
thread_cache_size 66 312
自サーバとほぼ同じスペックのRDSを立てて
パラメータを確認するのが良いのでは?
MySQLのとりまチューニング まとめ 29
RDSでデフォルトでチューニングされているもの
1. innodb_buffer_pool_sizeはサーバメモリの3/4
2. max_connectionsはサーバメモリ1.5MB毎1増加
3. その他パラメータは、同じくらいのRDSを立てて値
を確認する
Update 2010/7/21
まとめ
30
RDSを参考にしたとりまチューニングをご紹介
まとめ 31
あくまでとりまチューニング
デフォルト設定よりマシな環境を作るのが目的
チューニングは、目標数値をもって実施するべき
DB毎にチューニングの定石を紹介したサイトは多
くあるので、RDS以外にも参考にしてください