📈

MySQL High Performance Tuning Guide in Udemy Section 4

2022/12/28に公開

MySQL High Performance Tuning Guide in Udemy Section 4

25. Section Overview

  • innoDBのindexはテーブルのデータの組織化に使われている
  • indexはprimary keyに基づいて作成される
  • primary keyはランダムIOとシーケンシャルIOの比率や、セカンダリインデックスのサイズ、どのくらいのページをバッファプールに読み込むかといったことに影響を与える

26. The clustered Indexes

  • indexはClusterings Indexと呼ばれる
  • 名前の由来は、indexの値が実際にクラスタリングされているところから
  • InnoDBはデフォルトではprimary keyでclustered indexを作る
  • primary keyがない場合、Uniqueでnon nullableなindexを作り、それもない場合はhidden primary keyを作る
  • clustered primary keyは性能を良くすることも悪くすることもある
  • 特にテーブルのストレージエンジンを変更するときは、クラスタリングに注意したほうがよい

英語

  • laid out
    • lay outの過去分詞形
    • records are laid out
      • レコードが配置されている

27. Choosing a Good Primary Key

  • secondary indexはprimary keyを保持している
SELECT username FROM userinfo WHERE email = 'john@doe.com'
  • というSQLを考えると、まずはemailに張られたsecondary indexを探しに行く

  • secondary indexのリーフにはprimary keyがある

  • それをつかってprimary key indexを探索する

  • MySQLに限らずデータベースはデータを固定されたサイズのページに保存している

  • なぜなら関係するデータを近い場所に保存しておけば、データフェッチするときにページをたくさん読み込まなくてすむから

  • mailboxを実装するとして、user_idでクラスタリングしておけば、1ユーザーのすべてのメッセージはすくないページの読み込みで済む

  • クラスタリングしてなければ、ばらばらに保存されているのでIOのコストが高く付く

  • clustred indexにはindexとそのデータを保持することも可能

  • もしテーブルがclustred indexの利点を活かすように作られてなければ不利な点が出てくる

  • ページがいっぱいのときに、新しい行を挿入したりprimary keyをアップデートしたりするとページが分割される

  • primary key順にデータが挿入される場合は早い

  • 大量のデータを挿入したらOPTIMIZE TABLE name;でフラグメンテーションを解消できる

  • データがメモリに乗り切る場合はデータの順番はあまり重要ではないから、clustered indexの利点はうけずらい

英語

  • tremendously
    • 副詞
    • ものすごく、すさまじく
    • that can boost performance tremendoysly.
      • そいつはすさまじくパフォーマンスをブーストできる
  • drawback
    • 名詞
    • 欠点、不利な点
    • some drawback can apper.
      • いくつかの欠点が現れるだろう
  • accommodate
    • 他動詞
    • を収容できる
    • the storage engine accommodate the new row.
      • ストレージエンジンは新しい行を収容できる

参考

28. Use Case:Inserting rows in primary key order with InnoDB

  • UUIDをprimary keyに使う場合の不利な点
  • pageがスパースになる
  • insertしたらキャッシュに乗ってるページをキャッシュしなおさないといけないが、insertする対象のページもランダムなので、更新対象のキャッシュもランダムピックな振る舞いになる
  • ページスプリットがしょっちゅう発生し、それは大量にデータの移動が必要になるのでコストがでかい

29. Optimal Primary Key in Practice

  • primary keyはなるべくシーケンシャルなものを使うのが重要
GitHubで編集を提案

Discussion