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 Cluster 新機能解説 7.5 and beyond

4,154 views

Published on

db tech showcase 2017 tokyoで使った資料です。

Published in: Software
  • Be the first to comment

MySQL Cluster 新機能解説 7.5 and beyond

  1. 1. MySQL ClusterMySQL Cluster 新機能解説新機能解説 7.5 and beyond7.5 and beyond 奥野 幹也 Twitter: @nippondanji mikiya (dot) okuno (at) gmail (dot) com @DBTS-Tokyo 2017
  2. 2. 免責事項 本プレゼンテーションにおいて示されている見解 は、私自身の見解であって、オラクル・コーポ レーションの見解を必ずしも反映したものではあ りません。ご了承ください。
  3. 3. 自己紹介 ● MySQL サポートエンジニア – 日々のしごと ● トラブルシューティング全般 ● Q&A 回答 ● パフォーマンスチューニング など ● ライフワーク – 自由なソフトウェアの普及 – 趣味はリカンベントに乗ること ● 最近は執筆と子育ての日々・・・ ● ブログ – 漢のコンピュータ道 – http://nippondanji.blogspot.com/
  4. 4. MySQL Cluster の ネーミングについて
  5. 5. MySQL “NDB” Cluster ● マニュアル上での表記が変更 – MySQL Cluster MySQL→ NDB Cluster – https://dev.mysql.com/doc/refman/en/mysql-cluster.html ● MySQL InnoDB Cluster との明確化 ● 製品名としての変更は(今のところ)ナシ – MySQL Cluster Carrier Grade Edition – https://www.mysql.com/products/cluster/ – ややこしや〜 本セッションでは MySQL NDB Cluster に統一
  6. 6. MySQL NDB Cluster 7.5 新機能概要
  7. 7. MySQL NDB Cluster 7.5 新機能概要 ● MySQL 5.7 との統合 ● インデックス統計情報の改良 ● ndbinfo の拡充 ● バックアップレプリカからの参照 ● 全データノードへのレプリカ ● テーブルの容量制限改善 ● ndb_restore コマンドの SQL 出力 2016 年 10 月リリース
  8. 8. MySQL 5.7 との統合
  9. 9. MySQL 5.7 との統合 ● MySQL サーバーの最新版 – 2015 年 10 月リリース – 175 を超える新機能搭載 ● SQL ノード= NDB ストレージエンジンつき MySQL サー バー – ストレージエンジンを変更するだけで同じ SQL でアクセス 可能 – MySQL NDB Cluster でもメリットの享受が可能 ● MySQL NDB Cluster 7.5 MySQL 5.7→ ● MySQL NDB Cluster 7.3, 7.4 MySQL 5.6→ ● MySQL NDB Cluster 7.2 MySQL 5.5→
  10. 10. MySQL 5.7 の機能 ● レプリケーション関連 ● InnoDB 関連 ● オプティマイザー関連 ● セキュリティ関連 ● パフォーマンススキーマ関連 ● GIS 関連 ● JSON 関連 ● etc etc...
  11. 11. 詳解 MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド ● MySQL 5.7 の新機能を網羅的に解説 – 175 の新機能 – WorkLog/Bug Id つき – コンセプト、仕組み、使い方 ● 新機能の理解に必要な前提知識 – 古いバージョンでも適用可能 – アーキテクチャを理解することで 本物の理解を
  12. 12. MySQL 5.7 との 統合による具体的な 改善点
  13. 13. Records-per-key 最適化 ● オプティマイザが JOIN のときに参照する情報 ● 外部表の 1 行に対して、内部表から平均何行がマッチする か – ストレージエンジンが値を返す – MySQL 5.7 においてデータ型が INT から FLOAT に変更 ● より正確な JOIN のコスト見積が可能に ● MySQL NDB Cluster 7.5 も FLOAT に対応
  14. 14. その他のオプティマイザ関連の 新機能 ● EXPLAIN FOR CONNECTION ● 新しいコストモデル ● オプティマイザヒント ● ディスクベースのテンポラリテーブルを InnoDB 化 ● UNION ALL がテンポラリテーブル不要に ● コストに WHERE 句による絞り込みを考慮 ● GROUP BY の動作を SQL 標準準拠に ● FROM 句のサブクエリでテンポラリテーブルが不要な場合 作成しないように etc etc
  15. 15. パフォーマンススキーマと sys スキーマ ● パフォーマンス・スキーマ – 種々の統計情報を取得 – 主にパフォーマンス解析に利用 – 情報の種類が多すぎて使いこなすのが難しいのが難点 – バージョンが上がるごとに情報の種類が増加 ● sys スキーマ – パフォーマンス・スキーマと情報スキーマを横断的にアク セスするビューのコレクション – パフォーマンス・スキーマよりも直感的に利用可能 – MySQL 5.7 で追加 ● 元々は独立したプロジェクトだった ● MySQL 5.6 用もあり
  16. 16. MySQL NDB Cluster とは 無関係の MySQL 5.7 の変更点 ● InnoDB 全般 – SQL ノード上で併用する場合は利点あり – ディスク上のテンポラリテーブルが InnoDB になった点は メリットあり ● レプリケーションのサポートされていない機能 – GTID – 準同期レプリケーション – マルチスレッドスレーブ – マルチソースレプリケーション ● MySQL NDB Cluster には無い機能 – 空間インデックス – フルテキストインデックス
  17. 17. ndbinfo の拡充
  18. 18. ndbinfo とは ● MySQL NDB Cluster 用の情報取得ツール ● ndbinfo スキーマに各種テーブルがある ● データノードからメタデータや統計情報を取得
  19. 19. MySQL NDB Cluster 7.5 における改良点 ● config_params… パラメーターの説明やデフォルト値、 データ型などが追加 ● config_values… 現在のパラメーターの設定値を格納。 ● dict_obj_info... 各種データベースオブジェクトの情報。 ● table_distribution_status... テーブルの LCP 状況等 ● table_fragments... テーブルごとのフラグメントの状態 ● table_info... テーブルの各種情報 ● table_replicas... レプリカの状態
  20. 20. バックアップレプリカ からの参照
  21. 21. Read from backup replica ● これまではプライマリーレプリカのみ R/W 可能 ● プライマリーレプリカを各データノードに分散させることで、 負荷も分散 ● MySQL NDB Cluster 7.5 より、バックアップレプリカからの 参照が可能に – ただしデフォルトではこれまで通りプライマリーのみにアク セス可能 – テーブル作成時に指定した場合のみ
  22. 22. レプリカの動き Data node 1 Data node 2 Primary Secondary Primary Secondary データ同期 データ同期
  23. 23. Read from backup replica を使わない場合 Data node 1 Data node 2 Primary Secondary Primary Secondary Client R/W R/W
  24. 24. Read from backup replica を使った場合 Data node 1 Data node 2 Primary Secondary Primary Secondary Client R/W R/W R R
  25. 25. 全データノードへの レプリカ
  26. 26. 通常のテーブルの場合 ノードグループ 1 ノードグループ 2 Data node 1 Data node 2 Data node 3 Data node 4 F1 primary F3 backup F1 backup F3 primary F2 backup F4 primary F2 primary F4 backup
  27. 27. Fully replicated table (全体複製テーブル) ノードグループ 1 ノードグループ 2 Data node 1 Data node 2 Data node 3 Data node 4 F1,F2, F3,F4 F1,F2, F3,F4 F1,F2, F3,F4 F1,F2, F3,F4
  28. 28. テーブルサイズの 制限の改善
  29. 29. テーブルサイズの制限 ● MySQL NDB Cluster 7.4 まで – FIXED フォーマット部分はフラグメントあたり 16GB まで – フラグメント数はデータノード数と同じ ● MySQL NDB Cluster 7.5 – FIXED フォーマット部分のデータサイズは 128TB まで – ただしデータノードごとの DataMemory の上限が 1TB ● データノードは 48 ノードなので、実質的な上限は 48TB ● レプリカ数2なら 24TB
  30. 30. ndb_restore コマンドの SQL 出力
  31. 31. ndb_restore コマンドの SQL 出力 ● ndb_restore は、ネイティブバックアップをリストアするツー ル – データノードへクライアントとして接続してリストア – バックアップはメタデータ、データ、ログから構成される – データ部分を CSV で、ログをテキストで出力する機能が あった ● MySQL NDB Cluster 7.5 において、ログの出力が SQL 対 応 – InnoDB など、他のストレージエンジンへのデータ移行に – InnoDB へのレプリケーションのセットアップ
  32. 32. MySQL Cluster 7.6DMR の紹介
  33. 33. MySQL Cluster 7.6 DRM 登場 ● MySQL Cluster 7.6 Development Milestone Release とは? – Release Candidate になる前のバージョン – 機能の追加・削除が予告なく変更される場合有り ● 準備が整った機能から順番に統合される – キャンセルされる場合もあり ● MySQL Cluster 7.6.3 dmr – 2017 年 7 月 5 日リリース ● 正式版ではありません! – https://lists.mysql.com/announce/1185
  34. 34. MySQL NDB Cluster 7.6 の (予定された)新機能概要 ● ディスク型テーブルの新フォーマット ● メモリ割り当て設定の改善 ● ndbinfo の拡充 ● CSV データのインポートツール ● 新しいモニタリングツール ● LCP のスループット安定化 ● SPJ の改良 ● システム名の指定
  35. 35. ディスク型テーブルの 新フォーマット
  36. 36. ディスク型テーブルの 新フォーマット ● ページチェックサムの追加 ● CREATE TABLE SCHEMA VERSION ID の導入 – DROP/CREATE により、 Table ID が再利用されてしまう – 同じ Table ID を持ったエクステントが CREATE 後のテー ブルのものだと誤って判定されてしまう ● イニシャルローリングリスタートにより新しいフォーマットへ変 更 – 古いフォーマットを持つバージョンにはダウングレードでき ない
  37. 37. メモリ割り当て 設定の改善
  38. 38. IndexMemory の廃止 ● DataMemory から動的に割り当て – 必要な分だけが割り当てられるように – 無駄がない – 設定がちょっとだけシンプルに ● DataMemory だけサイジングすれば OK
  39. 39. DataMemory から SharedGlobalMemory へ ● メモリ割り当て先の変更 ● DataMemory – データの格納に関する部分に特化 ● SharedGlobalMemory – トランザクション処理に関するメモリはこちらから割り当て – 以前より多く必要になるかも ● 変更されたものの例 – レプリケーション用イベントバッファ – ファイルの初期化処理用バッファ – オフラインのインデックス作成用バッファ etc storage/ndb/src/kernel/blocks/record_types.hpp
  40. 40. ndbinfo の拡充
  41. 41. ndbinfo に2つのテーブルが追加 ● config_nodes – config.ini 内で定義されたノードの一覧 ● processes – 現在接続中のプロセス(ノード)一覧 ndb_mgm -e SHOW の代わりに使うと便利
  42. 42. CSV データの インポートツール ndb_import
  43. 43. ndb_import ● LOAD DATA INFILE のように CSV データをテーブルに取 り込むツール ● データノードへ直接接続 – 高速! – API ノードのひとつとして動作 – データノードへの接続数、接続あたりのスレッド数を指定 可能 ndb_import -c connectstring db_name table_name.csv
  44. 44. モニタリングツール ndb_top
  45. 45. ndb_top ● SQL ノードの ndbinfo からデータノードの負荷を監視 ● スレッドごとに負荷を計測 shell> ndb_top --user=root --passwd -n 2
  46. 46. LCP のスループット 安定化
  47. 47. LCP とは ● Local checkpoint の略 ● データノードは定期的に DataMemory 上のデータを、ファ イルへ書き出している – 全体を順次スキャン – 2 世代分のデータがファイルに保存 – かなりの I/O が発生する ● GCP ( Global checkpoint )とセットでデータを復元 – GCP = Redo logging
  48. 48. LCP のスループット安定化 ● LCP は I/O が遅いと自動的にスループットを調整する機能 がある ● 7.5 までのバージョンでは、 LDM スレッドごとに I/O 遅延を モニタリングし、スループットを調整していた – 他の LDM スレッドはスループットを調整しないかも知れ ない – LDM = Local Data Manager ● 7.6 では I/O 遅延のモニタリングをデータノード全体で統一 して行うようになった – より正確にサーバー全体の I/O の状況を反映するように なった。
  49. 49. SPJ の改良
  50. 50. SPJ とは ● Select-Project-Join の略 – 別名 Pushdown Join ● データノード上で JOIN を実行し、結果を SQL ノードへ返す – 非常に高速! – データノード・ SQL ノード間のラウンドトリップを省略 – 複数のデータノード上で JOIN を並列実行
  51. 51. Pushdown Join が効率化 ● DBSPJ カーネルブロックのシグナル周りの改良 – 余分なシグナルが送信されないように – シグナルフォーマットをコンパクトに ● ロードバランスの改善 – LDM スレッド数が、 TC スレッド数で割り切れない場 合、 DBSPJ の負荷に偏りが生じていた – その場合、 DBSPJ ブロックをラウンドロビンで使うようにす ることで、スレッドごとの負荷を平坦化
  52. 52. システム名の 指定が可能に
  53. 53. システム名とは ● クラスタを識別するためのタグのようなもの ● config.ini 内で指定 [System] Name = system_name ● SHOW GLOBAL STATUS LIKE ‘Ndb_system_name’ で 参照
  54. 54. まとめ
  55. 55. MySQL “NDB” Cluster は 着々と進化中!! ● MySQL NDB Cluster 7.5 、 7.6DMR で着実な進化 – 派手な変更は無いが、役立つ新機能が多数 ● 機能面 – MySQL 5.7 との統合により充実 – ndb_top 、 ndb_import などの新しいツール ● 性能面 – オプティマイザの改善により、 SQL 実行が高速化 – LCP スループットの安定 – バックアップレプリカらからの参照 – DBSPJ の改良 ● 運用面 – ndbinfo による監視の充実 – システム名による識別
  56. 56. 宣伝:書籍が出ます! Pro MySQL NDB Cluster ● Pro MySQL NDB Cluster / Apress Media – MySQL NDB Cluster 7.5 の解説書 – 同僚の Jesper との共著 – 英語です。 – お値段は $49.99
  57. 57. Q&Aご静聴ありがとうございました。
  58. 58. 宣伝:サポートエンジニア募集中!! ● MySQL サポートチームで一緒に働いてみませんか?! ● 技術力が物を言うポジションです! – 技術力に自信のある方、技術を磨きたい方歓迎 – L1 から L3 までの問い合わせをすべて受け持ち ● クエリのチューニングなども行います ● オープンソースなのでソースコード見放題!! – 英語より技術力重視 ● 普段の業務は日本語オンリーです。 ● 日本の顧客がターゲットです。 ● 上司は海外 – やりとりは英語のみ – TOEIC 700 程度が目安 ● 在宅勤務可能

×