私は如何にして私は如何にして
詳解 詳解 MySQL 5.7MySQL 5.7 をを執筆するに至ったか執筆するに至ったか
奥野 幹也Twitter: @nippondanjimikiya (dot) okuno (at) gmail (dot) com
@詳解MySQL 5.7 出版記念交流会
自己紹介
● MySQL サポートエンジニア– 日々のしごと
● トラブルシューティング全般● Q&A 回答● パフォーマンスチューニング
など● ライフワーク
– 自由なソフトウェアの普及● オープンソースではない● GPL 万歳!!
– 最近はまってる趣味はリカンベント(自転車)● ブログ
– 漢のコンピュータ道– http://nippondanji.blogspot.com/
詳解 MySQL 5.7止まらぬ進化に乗り遅れないためのテクニカルガイド
● MySQL 5.7 の新機能を網羅的に解説– 175 の新機能– WorkLog/Bug Id つき– コンセプト、仕組み、使い方
● 新機能の理解に必要な前提知識– 古いバージョンでも適用可能– アーキテクチャを理解することで
本物の理解を
MySQL 5.7 の数多くの新機能
● 実に 150 以上もの新機能が追加された!!– MySQL 5.7 の新機能完全リスト
https://yakst.com/ja/posts/3037– yoku0825++
● レプリケーション関連● InnoDB 関連● オプティマイザー関連● セキュリティ関連● パフォーマンススキーマ関連● GIS 関連● JSON 関連
etc etc...
レプリケーションの新機能
● マルチスレッドスレーブの改良● マルチソースレプリケーション● 準同期レプリケーションの改良
– ロスレスレプリケーション– パフォーマンスの改善– ACK を返すスレーブ数の指定
● GTID の改良– スレーブでの管理が効率化– 再起動時の GTID 計算方法が効率化
● オンライン操作の拡充– GTID 有効化– CHAMGE MASTER の一部– レプリケーションフィルター
オプティマイザの新機能
● EXPLAIN for CONNECTION● JSON EXPLAIN● コストモデル
– JOIN の順序選択– 統計情報の正確性– コストの係数のユーザーによる設定
● GROUP BY● FROM 句のサブクエリ● IN サブクエリ● UNION ALL● ソート● テンポラリテーブル
InnoDB の新機能
● 一般テーブルスペース● テンポラリテーブルの InnoDB 化● バッファプールのオンラインリサイズ● UNDO ログの自動トランケート● 32/64KB ページのサポート● REDO ログフォーマットの改善● バッファプールをダンプする割合の指定● ページ統合におけるページ充填率の指定● コピーしない ALTER TABLE 操作の増加
InnoDB の新機能 つづき
● 全文検索用プラガブルパーサーのサポート– ngram あるいは MeCab による日本語の全文検索
● 全文検索の最適化● 空間インデックスのサポート● 透過的テーブル圧縮● 透過的テーブルスペース暗号化● ダブルライトが不要なとき自動的に無効化● NUMA サポートの追加● InnoDB モニターの有効化方法変更● 情報スキーマの改良● デフォルト行フォーマットの指定
InnoDB の新機能性能改善系
● テンポラリテーブルのための最適化● RO トランザクションの性能改善● RW トランザクションの性能改善
– index>lock の競合改善( SX ロック)● リードビュー作成の性能改善● trx_t のキャッシュ効率改善● AHI のミューテックス競合改善● ページクリーナーのマルチスレッド化● フラッシュアルゴリズムの改善● クラッシュリカバリの性能改善● ログファイル書き込みの性能改善● インデックス作成の高速化
etc
セキュリティ関係の新機能
● パスワード期限の設定● ユーザーのロック、アンロック● SET PASSWORD コマンドの仕様変更● CREATE USER … IF NOT EXISTS● ログイン不可能なユーザーアカウント● SSL のセットアップが容易に
– キーファイルの自動生成– mysql_ssl_rsa_setup
● 透過的テーブルスペース暗号化● デフォルトの状態がセキュアに
– test データベースの廃止– 匿名ユーザーの廃止– localhost 以外の root の廃止
その他の新機能
● JSON データ型のサポート● 生成カラム● X DevAPI● トリガーが同一種類のものを複数定義できるようになった● sys スキーマが標準で同梱されるようになった● パーティショニングされたテーブルの改良● クライアント系コマンドの改良● STRICT モードと IGNORE のリファクタリング● いくつかのシステムテーブルが InnoDB に変更
etc etc
新機能が多いのはいいけれども・・・
● 素晴らしい新機能の面々!!– MySQL 5.6 からの正常進化– 有用な機能多数– まさに宝の山!!
● 多すぎる色々と問題あるよね– 多すぎて全体像が把握できない
● 宝の持ち腐れでは・・・– マーケティングトークにはいいけれども・・・
● 製品はマーケティングのためのものではない!!– みんな使いこなせるのか?
● 製品は使いこなせてナンボ!!
新機能解説書なんて売れるのか・・・?
● 企画としての不安はあったけれども、ユーザーにとって必要なものだと思った。
● 普段から付き合いのある G社某氏に相談– あれ・・・– 目が曇った・・・– やっぱり、ダメかも。
● 坂井さんに愚痴る– 翔泳社さんを紹介される。– 紹介から詳解へ至る。
ページ数、多いですね。
● 最初に書いた数章で多くなり過ぎないよう釘を刺される。– 余談:鍵本は当初800ページありました・・・w– 新機能が多いんだから仕方がないでしょ!!– と思いつつもスリムな書籍に仕上げなければ・・・
● 多くなり過ぎないよう意識した内容に。– 基本的なコンセプトが理解できる。
● 必要があればアーキテクチャの説明も。– 新機能の効果が分かる。– 使い方、使いどころが分かる。– さらなる詳細は WorkLog で。
新機能が分かるってどういうこと?
● マーケティングトークは核心に触れていない!!● 仕組みが分かる
– そもそものアーキテクチャの理解– どんな課題があったのか– どこがどう変わったのか
● 使い方が分かる– 使いどころ– 具体的な使い方– セットアップ手順など
本書の構成
● 第 1章:MySQL の概要– MySQL の紹介– 過去のバージョンにおける機能追加の歴史
● 以降の章はカテゴリごとの新機能の紹介– 第 2章:レプリケーション– 第 3章:オプティマイザ– 第 4章: InnoDB– 第 5章:パフォーマンススキーマと sys スキーマ– 第 6章: JSON データ型– 第 7章:パーティショニング– 第 8章:セキュリティ– 第 9章:クライアント&プロトコル– 第 10章:その他
各章の構成
● 冒頭部分で新機能を理解するための前提知識を詳解– 基本的なコンセプト– アーキテクチャ– 使い方の詳解など
● 各章のテーマに沿った新機能を詳解– 新機能が何の課題を解決したかを具体的に解説– 新機能にひとつひとつ番号を追加
● ディスカッションするときのリファレンスとして
難しい、あるいは分かりづらいポイントもついでに解説
● 第 3章:オプティマイザ– MySQL の JOIN のアルゴリズム– オプティマイザトレース
● 第 4章: InnoDB– 教科書的なアーキテクチャ– 特徴的なアーキテクチャ
● 第 5章:パフォーマンススキーマと sys スキーマ– パフォーマンススキーマの基本的な使い方
● 第 8章:セキュリティ– 権限システムの概要– プロキシーユーザー