Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

MySQL Cluster 新機能解説 7.5 and beyond

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

  • Identifiez-vous pour voir les commentaires

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 程度が目安 ● 在宅勤務可能

×