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.

MySQLアーキテクチャ図解講座

18,104 views

Published on

第1回Database Lounge Tokyoで発表したスライドです。ゆるふわにMySQLのアーキテクチャを解説しました。

Published in: Software
  • Be the first to comment

MySQLアーキテクチャ図解講座

  1. 1. MySQLMySQL アーキテクチャアーキテクチャ 図解講座図解講座 奥野 幹也 Twitter: @nippondanji mikiya (dot) okuno (at) gmail (dot) com @Database Lounge Tokyo #1
  2. 2. 免責事項 本プレゼンテーションにおいて示されている見解は、私 自身の見解であって、オラクル・コーポレーションの見 解を必ずしも反映したものではありません。ご了承くだ さい。
  3. 3. 自己紹介 ● MySQL サポートエンジニア – 日々のしごと ● トラブルシューティング全般 ● Q&A 回答 ● パフォーマンスチューニング など ● ライフワーク – 自由なソフトウェアの普及 ● オープンソースではない ● GPL 万歳!! – 最近はまってる趣味はリカンベント(自転車) ● ブログ – 漢のコンピュータ道 – http://nippondanji.blogspot.com/
  4. 4. MySQL 5.7 の アーキテクチャ概要
  5. 5. MySQL のアーキテクチャ 概略図
  6. 6. ストレージエンジンとは ● データの格納と取り出しを担当 – トランザクション管理 ● 行アクセスの排他制御 ● クラッシュリカバリ – 統計情報の管理 ● テーブル ● インデックス – 低レベルの行アクセス API ● 先頭からのスキャン ● 任意のポジションの行を取得 ● キーによる検索 ● インデックススキャン etc
  7. 7. ストレージエンジンによる テーブルスキャンの例 ha_tina::store_lock ha_tina::external_lock ha_tina::info ha_tina::rnd_init ha_tina::extra - ENUM HA_EXTRA_CACHE Cache record in HA_rrnd() ha_tina::rnd_next ha_tina::rnd_next ha_tina::rnd_next ha_tina::rnd_next ha_tina::rnd_next ha_tina::rnd_next ha_tina::rnd_next ha_tina::rnd_next ha_tina::rnd_next ha_tina::extra - ENUM HA_EXTRA_NO_CACHE End caching of records (def) ha_tina::external_lock ha_tina::extra - ENUM HA_EXTRA_RESET Reset database to after open
  8. 8. オプティマイザ
  9. 9. クエリ実行の流れ ● GNU Bison によるパーサー ● コストベースオプティマイザ – コスト係数を調整可能 – ストレージエンジンから 統計情報を取得 ● 行アクセスやトランザクション管 理はストレージエンジンまかせ
  10. 10. Nested Loop Join SELECT … FROM t1 INNER JOIN t2 ON … WHERE … for each row in t1 matching where condition { for each row in t2 matching join and where condition { send joined row to client } }
  11. 11. Block Nested Loop Join
  12. 12. MySQL が利用する文字コード
  13. 13. InnoDB
  14. 14. 教科書通りのトランザクション 対応データストア InnoDB ログバッファ InnoDB ログファイル InnoDB バッファプール InnoDB テーブルスペース
  15. 15. クラスターインデックス
  16. 16. InnoDB の分離レベル 分離レベル 分離性 ダーティー リード インコンシス テントリード ロストアップ デート ファントム READ- UNCOMMITTED 低 ○ ○ ○ ○ READ- COMMITTED × ○ ○ ○ REPEATABLE- READ × × ○ × SERIALIZABLE 高 × × × × ● InnoDB の RR ではファントムは起きない!! – ただしロッキングリードとノンロッキングリードに注意
  17. 17. ネクストキーロック ● ロッキングリードにおいて ファントムを防ぐ仕組み ● 行と行の間の仮想的な 空間にロックをかける ● INSERT をブロック!!
  18. 18. UNDO ログと MVCC
  19. 19. UNDO ログトランケート UNDO ログ空き領域 UNDO ログ使用中の領域 innodb_max_ undo_log_size INACTIVE 初期サイズ = 10MB INACTIVE にして 空になるまで待つ。 その間は他の UNDO ログファイルで凌ぐ。 UNDO ログ ファイルを初期化 UNDO ログファイルの サイズがしきい値を超えた
  20. 20. 圧縮テーブル ● innodb_file_format = Barracuda ● CREATE TABLE tblname (…) ENGINE = InnoDB ROW_FORMAT = COMPRESSED KEY_BLOCK_SIZE=4; バッファプールが 二重に消費される。 オーバーヘッド大。
  21. 21. 透過的テーブル圧縮 CREATE TABLE tblname (…) ENGINE = InnoDB COMPRESSION = lz4;
  22. 22. 透過的テーブルスペース 暗号化の仕組み
  23. 23. レプリケーション
  24. 24. レプリケーションの概要
  25. 25. 準同期レプリケーション
  26. 26. バイナリログの グループコミット
  27. 27. スレーブ上で並列化可能な トランザクション
  28. 28. マルチスレッドスレーブ LOGICAL_CLOCK モード
  29. 29. パフォーマンス スキーマ
  30. 30. パフォーマンススキーマ vs 情報スキーマ パフォーマンススキーマ 情報スキーマ 主目的 パフォーマンスデータの取得 メタデータの取得 アプリケーション パフォーマンスチューニング 監視ツールや管理ツール 導入されたバージョン 5.5 5.1 SQL 標準? いいえ はい 実装方法 ストレージエンジンのひとつ 情報スキーマ API データ収集のタイミング mysqld 内部で任意のタイミ ングでコード実行時 情報スキーマテーブルアクセ ス時 通常時のオーバーヘッド あり なし 表示によるオーバーヘッド 少ない 大きい 類似のツール DTrace, SystemTap SHOW コマンド
  31. 31. 計器( Instrument )
  32. 32. コンシューマー ● 計器をグループ化 ● パフォーマンスデータを保 存するメモリ領域
  33. 33. 宣伝: 新書籍「詳解 MySQL 5.7 」 ● MySQL 5.7 の新機能を網羅 – 175 もの新機能を解説 – 新機能の理解に欠かせ ないアーキテクチャの話 も盛りだくさん – 本日解説しなかった新 機能も詳しく解説!! ● 8 月 23 日発売予定
  34. 34. Q&Aご静聴ありがとうございました。

×