Upgrade to Pro — share decks privately, control downloads, hide ads and more …

やさしいDBパフォーマンス最適化@関西エンジニア学生Meetup in 大阪 #1

やさしいDBパフォーマンス最適化@関西エンジニア学生Meetup in 大阪 #1

DBパラメータチューニングにおけるLT会登壇資料

"パフォーマンス最適化"という言葉は曖昧で、何をどうすればいいか迷いがちです。本資料ではMySQLのInnoDBを題材に、メモリ構成の式 最大メモリ使用量 ≧ Global Buffer + Thread Buffer × コネクション数 を軸に解説。メモリを増やせばOOM、コネクションを絞れば枯渇、ディスクに逃がせばI/Oバウンドと、どこかを立てれば別が崩れるトレードオフの構造を整理し、限られたリソースの中でパラメータをどう調整するかの考え方を紹介します。

イベント名「関西エンジニア学生Meetup in 大阪 #1 〜LT会&交流会〜」
https://connpass.com/event/387136/

Avatar for Masamichi Kanakubo

Masamichi Kanakubo

May 18, 2026

More Decks by Masamichi Kanakubo

Other Decks in Technology

Transcript

  1. パフォーマンス最適化とは 4 パフォーマンス: - 提供速度 (スループット・レイテンシ ) が定めた基準より上であること - 提供効率

    (コスト・リソース ) が予想を超えないこと パフォーマンス最適化するとは 提供効率を保ったまま、提供速度を改善すること あるいはその逆
  2. 我々はパフォーマンスを上げたい 5 より速く、より安く、より正確にサービスをデリバリーする DBパフォーマンス最適化が求められるケース • XやThreadsなどの大規模データでのタイムライン表示 • ゲームのランキング表示 • Youtube上の動画推薦

    etc… なぜ必要なのか • 超大規模 (10TB+など) なデータ量に耐えるDBの運用 • 大量なデータから適切なものを推薦するために複雑なクエリを 使う • ロード遅延がサービスの根幹を揺るがす
  3. InnoDBストレージエンジンの仕組み 11 実はメモリ構成をシンプルな式で表せられる 最大メモリ使用量 ≧ Global Buffer + Thread Buffer

    × コネクション数 + C(その他) [GiB] 各コンポーネント • Global Buffer Size: サーバ全体で必要な計算リソースの確保 innodb_buffer_pool_size + innodb_log_buffer_pool_size + key_buffer_size + … (複数要素) • Thread Buffer Size: スレッド単位で必要な計算リソースの確保 binlog_cache_size + join_buffer_size + read_buffer_size + sort_buffer_size + … (複数要素) 最初に全体確保するメモリ領域 スレッドができてから確保されるメモリ領域 全体で利用するような各計算領域 各スレッドでの計算領域 MySQLは内部的にInnoDBというストレージエンジンを利用している
  4. パフォーマンス最適化の工夫 19 実はメモリ構成をシンプルな式で表せられる 最大メモリ使用量 ≧ Global Buffer + Thread Buffer

    × コネクション数 + C(その他) [GiB] 各コンポーネント • Global Buffer Size: サーバ全体で必要な計算リソースの確保 innodb_buffer_pool_size + innodb_log_buffer_pool_size + key_buffer_size + … (複数要素) • Thread Buffer Size: スレッド単位で必要な計算リソースの確保 binlog_cache_size + join_buffer_size + read_buffer_size + sort_buffer_size + … (複数要素) 最初に全体確保するメモリ領域 スレッドができてから確保されるメモリ領域 全体で利用するような各計算領域 各スレッドでの計算領域 ゴリゴリ資源が使えるわけではなく制御が必要 (最大メモリを越えてはならない )
  5. パフォーマンス最適化の難工夫 22 実はメモリ構成をシンプルな式で表せられる 最大メモリ使用量 ≧ Global Buffer + Thread Buffer

    × コネクション数 + C(その他) [GiB] 各コンポーネント • Global Buffer Size: サーバ全体で必要な計算リソースの確保 innodb_buffer_pool_size + innodb_log_buffer_pool_size + key_buffer_size + … (複数要素) • Thread Buffer Size: スレッド単位で必要な計算リソースの確保 binlog_cache_size + join_buffer_size + read_buffer_size + sort_buffer_size + … (複数要素) 最初に全体確保するメモリ領域 スレッドができてから確保されるメモリ領域 全体で利用するような各計算領域 各スレッドでの計算領域 コネクションを渋るとコネクション枯渇が起きてアプリが遅延 (Too Many Connections Error)
  6. パフォーマンス最適化の難しさ 25 実はメモリ構成をシンプルな式で表せられる 最大メモリ使用量 ≧ Global Buffer + Thread Buffer

    × コネクション数 + C(その他) [GiB] 各コンポーネント • Global Buffer Size: サーバ全体で必要な計算リソースの確保 innodb_buffer_pool_size + innodb_log_buffer_pool_size + key_buffer_size + … (複数要素) • Thread Buffer Size: スレッド単位で必要な計算リソースの確保 binlog_cache_size + join_buffer_size + read_buffer_size + sort_buffer_size + … (複数要素) 最初に全体確保するメモリ領域 スレッドができてから確保されるメモリ領域 全体で利用するような各計算領域 各スレッドでの計算領域 あるいは限られた資源の中で 過剰資源から不足資源にリソースを割り当てる必要がある