Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Amazon RDSを参考にしたとりまチューニング

478 views

Published on

2016年08月関西地区PostgreSQL勉強会(初心者向け)での発表資料
https://jpug-kansai.doorkeeper.jp/events/50234

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Amazon RDSを参考にしたとりまチューニング

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

×