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 5.7の次のMySQLは

5,717 views

Published on

2016/12/10 YAPC::Hokkaido 2016

Published in: Technology
  • Be the first to comment

MySQL 5.7の次のMySQLは

  1. 1. MySQL 5.7の次のMySQLは 歴史から 勘で 紐解く8.0  2016/12/10 yoku0825 YAPC::Hokkaido 2016 Sapporo
  2. 2. おしながき 現時点で判明しているMySQL 8.0の新機能をユルくお知ら せせずに MySQL 5.7までの進化の⽅向性から MySQL 8.0の進化の⽅向を 独断と偏⾒で雑に 考察します 1/54
  3. 3. というわ けで 2/54
  4. 4. このスライドに記載された⾒ 解は個⼈の意⾒であり、所属 する組織または所属しない組 織またはNULLの意⾒を ⼀切 代表するわけがありません 3/54
  5. 5. あと俺だいたいこういう 「MySQLの未来」的なや つは外すんで、ネタとし て眺めていてください 4/54
  6. 6. ちなみにどれくらい外すかというと InfiniDB 本番導⼊した1週間後にInfiniDB社が倒産 MySQL Fabric がんばってばんがってがんばってパッチして導⼊したけど、「嘘みたいだ ろ、死んでるんだぜ、こいつ」 InnoDB FTS InnoDBバッファプールで収まってくれないお⾏儀悪いマン 5/54
  7. 7. @kazuho さんの セッションに⾏く なら、今だ︕ 6/54
  8. 8. \おはようございます/ yoku0825@とある企業のDBA オラクれない- ポスグれない- マイエスキューエる- ⽣息域 Twitter: @yoku0825- Blog: ⽇々の覚書- MyNA ML: ⽇本MySQLユーザ会- MySQL Casualʼs Slack: MySQL Casual- 7/54
  9. 9. Do you love MySQL 5.7? 8/54
  10. 10. MySQLとそのフォーク 5.1 5.1 5.5 5.6 5.7 5.1, 5.2, 5.3 5.5 10.0 10.1 10.2 5.5 5.6 5.7 8.0 Percona Server MySQL MariaDB 9/54
  11. 11. イマココ 5.1 5.1 5.5 5.6 5.7 5.1, 5.2, 5.3 5.5 10.0 10.1 10.2 5.5 5.6 5.7 8.0 Percona Server MySQL MariaDB 10/54
  12. 12. ツギココ 5.1 5.1 5.5 5.6 5.7 5.1, 5.2, 5.3 5.5 10.0 10.1 10.2 5.5 5.6 5.7 8.0 Percona Server MySQL MariaDB 11/54
  13. 13. MySQL 5.1 パーティション ⾏ベースレプリケーション プラグインAPI イベントスケジューラー テーブル形式ロギング 12/54
  14. 14. MySQL 5.5 認証プラグイン InnoDBのデフォルトストレージエンジン化 準同期レプリケーションプラグイン utf8mb4の導⼊ ALTER TABLE .. TRUNCATE PARTITION の追加 13/54
  15. 15. MySQL 5.6 InnoDB FTS, InnoDB GIS InnoDBオンラインALTER TABLE InnoDB Memcached Plugin performance̲schemaの強化 GTIDの導⼊ DATETIME型のマイクロ秒対応 マルチスレッドスレーブ クラッシュセーフスレーブ 14/54
  16. 16. MySQL 5.7 アカウント管理ステートメントの強化 暗黙のテンポラリーテーブルのInnoDB化 ⽇本語対応InnoDB FTS, InnoDB GISの空間インデックス サポート InnoDBバッファプールオンラインリサイズ InnoDBテーブルスペース暗号化 JSON型 Generated Column マルチソースレプリケーション GTIDのオンライン有効化 MySQL X Protocol 15/54
  17. 17. MySQL 8.0 InnoDBデータディクショナリー ロールのサポート 共通テーブル式(CTE)の実験的サポート (噂) Group Replicationの標準バンドル (噂) utf8mb4̲unicode̲900̲ci のデフォルト化 16/54
  18. 18. 進化の⽅向 Release Series Common NoSQL side SQL side 5.5 utf8mb4 (HandlerSocket) - 5.6 クラッシュセーフス レーブ, DATETIME 型, オンライン ALTER TABLE InnoDB Memcached InnoDB FTS, InnoDB GIS, オプ ティマイザーの強化 5.7(labs) - MySQL HTTP Plugin - 5.7 InnoDBの強化 InnoDB Memcached + MySQL X, JSON型 Generated Column(?), オプテ ィマイザーの強化 8.0 データディクショナ リー, GR, utf8mb4̲unicode ̲900̲ci - 共通テーブル式, ロ ール, ヒストグラム 17/54
  19. 19. 進化の⽅向 Release Series Common NoSQL side SQL side 5.5 utf8mb4 (HandlerSocket) - 5.6 クラッシュセーフス レーブ, DATETIME 型, オンライン ALTER TABLE InnoDB Memcached InnoDB FTS, InnoDB GIS, オプ ティマイザーの強化 5.7(labs) - MySQL HTTP Plugin - 5.7 InnoDBの強化 InnoDB Memcached + MySQL X, JSON型 Generated Column(?), オプテ ィマイザーの強化 8.0 データディクショナ リー, GR, utf8mb4̲unicode ̲900̲ci - 共通テーブル式, ロ ール, ヒストグラム 18/54
  20. 20. MySQL 5.6以降 MySQLは MySQLプロトコル以外の何か に⼀定の開発リソ ースを割いている InnoDB Memcached Plugin- MySQL HTTP Plugin(labs)- MySQL X Protocol(MySQL Shell)- 19/54
  21. 21. InnoDB Memcached Plugin InnoDBのテーブルに対してmemcachedプロトコルでアク セスできるようにする daemon plugin 2016/12/10現在 5.7以降では動かない HandlerSocketの対抗⾺︖- 今後 HandlerSocket が使いたかったらMariaDB…という世界線︖- 確かにSQLを1⾏ずつパースするよりは速い フェールオーバー, 永続化, 複製という⾯で⾒れば、RDS for MySQL とかではアリなのかも - 20/54
  22. 22. MySQL HTTP Plugin(lab) HTTPをパースしてSQLに変換してからSQLパーサーを通し てる なのでHandlerSocketやInnoDB Memcachedみたいな⾼速化を主眼 に据えたものではない - 「だからAudit PluginやEnterprise Firewallと連携して動かせる」っ て中の⼈が⾔ってて、確かに - 21/54
  23. 23. MySQL HTTP Pugin(lab) $ mysql -e "SELECT * FROM myhttp.simple" +----+------------------+ | id | col_a | +----+------------------+ | 1 | Hello | | 2 | | | 3 | world! | | 4 | yoku0825 is here | +----+------------------+ $ curl --user a:b "127.0.0.1:8080/sql/myhttp/SELECT+%2A+FROM+simple" [ { "meta":[ {"type":3,"catalog":"def","database":"myhttp","table":"simple","org_table":"simple","column":"id","or g_column":"id","charset":63,"length":11,"flags":16899,"decimals":0}, {"type":253,"catalog":"def","database":"myhttp","table":"simple","org_table":"simple","column":"col_a ","org_column":"col_a","charset":33,"length":765,"flags":0,"decimals":0} ], "data":[ ["1","Hello"], ["2"," "], ["3","world!"], ["4","yoku0825 is here"] ], "status":[{"server_status":34,"warning_count":0}] } ] 22/54
  24. 24. SQLインジェク ション #とは なんだったのか 23/54
  25. 25. MySQL HTTP Pugin(lab) MySQL Xに乗っ取られたので未来はない気がする mod̲ndbも流⾏らなかったし- ⾯⽩いんだけどなあ… 俺が⾯⽩いと思ったものはやはり未来がないのか- 24/54
  26. 26. MySQL X Protocol(MySQL Shell) レイヤー的にはMySQL Protocolを置き換える TCPの上に X Protocol を載せてる- 上にSQLまたはX Dev APIが載る- X Protocolをしゃべるコマンドラインクライアントが MySQL Shell- 「NoSQLちっくなライブラリーから使うなら、MySQLプロ トコルは重すぎるよね」「だからProtocol Buffersベースの 新しいプロトコルを実装したよ」 本当にやりたいことはたぶん 非同期処理- 非同期処理は 未実装- 25/54
  27. 27. 非同期処理(未実装) http://mysqlserverteam.com/mysql-5-7-12-part-2-improving- the-mysql-protocol/ 26/54
  28. 28. JSON型 + Generated Column + X Protocol “MySQL Docstore” って命名してた InnoDBのトランザクション性能をそのままにNoSQLちっくなラ イブラリーとの相性を良くしようと思ったんだろう ちなみに “Cross(X)over between relational and document model” で MySQL X らしい SQL Parser MySQL Protocol Parser Storage Engine MySQL X libmysqlclient Ruby/MySQL mysql Ruby tmtms(?) mysqlsh 27/54
  29. 29. 進化の⽅向 Release Series Common NoSQL side SQL side 5.5 utf8mb4 (HandlerSocket) - 5.6 クラッシュセーフス レーブ, DATETIME 型, オンライン ALTER TABLE InnoDB Memcached InnoDB FTS, InnoDB GIS, オプ ティマイザーの強化 5.7(labs) - MySQL HTTP Plugin - 5.7 InnoDBの強化 InnoDB Memcached + MySQL X, JSON型 Generated Column(?), オプテ ィマイザーの強化 8.0 データディクショナ リー, GR, utf8mb4̲unicode ̲900̲ci - 共通テーブル式, ロ ール, ヒストグラム 28/54
  30. 30. SQLアクセスの⾼速化 5.6, 5.7, 8.0と続くオプティマイザーの強化 JOIN時の⾒積もり精度向上- ORDER BY狙いのキー精度向上- ヒストグラムのサポート(8.0)- オプティマイザーの機能強化は透過的に(何も意識せずに) 性能を上げてくれる 29/54
  31. 31. 新しいSQL構⽂ 共通テーブル式(CTE)、いわゆる WITH 句(8.0) derivedテーブル(FROM句サブクエリー)の機能を使って実装され ている - 5.7で暗黙のテンポラリーテーブルのInnoDB化を頑張ったから実現し た ︖ - ロールとデフォルトロールの追加(8.0) 構⽂としては新しい SET ROLE, CREATE ROLE などなど- 30/54
  32. 32. 運⽤⽀援(︖) performance̲schemaの⼤幅な機能強化(5.6) REDOログのリサイズが楽になった(5.6) 各種オンライン操作の範囲拡⼤(5.7) SET PERSIST によってオンライン変更したパラメーターを固 定化(8.0) 31/54
  33. 33. 進化の⽅向 Release Series Common NoSQL side SQL side 5.5 utf8mb4 (HandlerSocket) - 5.6 クラッシュセーフス レーブ, DATETIME 型, オンライン ALTER TABLE, p̲s InnoDB Memcached InnoDB FTS, InnoDB GIS, オプ ティマイザーの強化 5.7(labs) - MySQL HTTP Plugin - 5.7 InnoDBの強化 InnoDB Memcached + MySQL X, JSON型 Generated Column, オプティ マイザーの強化 8.0 データディクショナ リー, GR, utf8mb4̲unicode ̲900̲ci - 共通テーブル式, ロ ール, ヒストグラム 32/54
  34. 34. レプリケーションの⾼速化 5.6, 5.7と (特に準同期) レプリケーションのスループット をとにかく上げようとしてきた バイナリーログのグループコミット(5.6) Bug#70669のFixでロック粒度がすごくでかい(5.6) 5.7でロックを分割し、スループットを向上させた - マルチスレッドスレーブ(5.6) 5.7ではバイナリーログのマスターでのグループコミット状況に合わせたパラレル化が 可能に(いわゆるスキーマ内マルチスレッドスレーブ) - 33/54
  35. 35. レプリケーションの⾼機能化 master̲info, relay̲log̲info のInnoDB化(2015/12/10 現在、デフォルトはファイルのまま) リレーログから取り出したイベントとrelay̲log̲infoを “1つのトラン ザクションとしてコミット” し、 “コミットされていないリレーログ はSQLスレッドが⽌まったら全部消す” ことでクラッシュセーフスレ ーブを構成可能(5.6) - テーブル化することで複数の構造を容易に保存できるようになり、マ ルチソースレプリケーションが実現(5.7) - 34/54
  36. 36. InnoDBの迷⾛ MySQL 5.0リリース直後にInnobaseがOracleに買われて MySQL 5.5時代にMySQL⾃⾝もOracleに買われたことで 最終的に同じ会社で開発されることになったMySQLと InnoDB 35/54
  37. 37. InnoDB単体での強化 デフォルトストレージエンジン化(5.5) バッファプールウォームアップ, REDOログのカジュアルな サイズ変更(5.6) p̲s, i̲sによるモニタリングの強化(5.6) FTS, GISのサポート(5.6) バッファプールオンラインリサイズ(5.7) ロックの分割によるスケーラビリティーの向上(5.7) 素直なAdaptive Flushing(5.7) 36/54
  38. 38. Good-bye MyISAM? 5.1の時点から既に新機能の開発は⽌まっている 5.6のキーワード「MyISAMにできることはInnoDBにもでき るようにする」「MyISAMでだけできることはなくす」 5.7では暗黙のテンポラリーテーブルまでInnoDB化 テンポラリーということは- クラッシュしたら消えるということで- ってことはREDOログ (暗黙のテンポラリーテーブルならUNDOログ も) いらないじゃん︖ という最適化 - そして8.0.0では本丸の mysql スキーマが全てInnoDBに 37/54
  39. 39. Hello, Dictator InnoDB 今まで プラガブルだったからできなかったこと を実現して いく データディクショナリーを .ibd ファイルのヘッダに載せる ことで、InnoDBの耐久性をテーブル定義情報にも適⽤ MyISAMの都合を考えずに特化した結果に得られそうなもの (予定) バッファプールに載ってるかどうかでオプティマイザーコスト を打ち分けられるオプティマイザー - (予定) ネイティブパーティショニング (これ⾃体は実装済み) による 外部キー制約の撤廃 - (噂) ページ内パーシャルアップデート(JSONデータ型だけ︖)- 38/54
  40. 40. Group Replication and InnoDB Cluster データ同期型のマルチマスターソリューションがGroup Replication(5.7 labs Plugin) どうやら標準バンドル(INSTALL PLUGIN だけ⾃分でやる)にしたいら しい - Group Replication + MySQL Router + MySQL Shell(As orchestrator) でオール(︖)インワン(︖)パッケージを 提供するのがInnoDB Cluster 39/54
  41. 41. InnoDB Cluster 40/54
  42. 42. まとめ 41/54
  43. 43. yoku0825的8.0観察ポイント NoSQL Side MySQL X Pluginは5.6 -> 5.7のInnoDB Memcachedのように今度は性能 を上げにくるか︖ 未実装の非同期処理にも期待 SQL Side “特に意識せずに速くなる” ものと、 “新しく導⼊されて意識しないと有効活 ⽤できない” もの両⽅が混在 運⽤ Side SET PERSIST とか今までそれなりに要望があったであろうものが追加、パラ メーターのオンライン変更範囲拡⼤にも期待、p̲sの更なる機能追加(特に 5.7で中途半端に終わったレプリケーション関連) レプリケーション Side 今までのレプリケーションはそろそろひと段落して、Group Replication (≒InnoDB Cluster) をどこまで使い物にできるか 42/54
  44. 44. というわけで 現時点で判明しているMySQL 8.0の新機能をユルくお知ら せせずに MySQL 5.7までの進化の⽅向性から MySQL 8.0の進化の⽅向を 独断と偏⾒で雑に 考察しました 43/54
  45. 45. このスライドに記載された⾒ 解は個⼈の意⾒であり、所属 する組織または所属しない組 織またはNULLの意⾒を ⼀切 合切 代表するわけがありませ ん ;) 44/54
  46. 46. ( ゚д゚) 45/54
  47. 47. (゚д゚) 46/54
  48. 48. (゚д゚ ) 47/54
  49. 49. One more thing, 48/54
  50. 50. 罠 49/54
  51. 51. default_password_lifetime <> 0 5.7.11で暗黙のデフォルトが0に変更されたが “次のメジャーバージョンでまた0以外にする” って⾔ってる から、8.0では来るのではないかと An update on default̲password̲lifetime- MySQL Bugs: #79939: default̲password̲lifetime > 0 should print warning at startup - MySQL Bugs: #79959: SYS should have a view of user accounts expiring - 50/54
  52. 52. 「kamipoのハハ=パパ問題」 SELECT * FROM families; +----+-----------+--------------+ | id | name | relationship | +----+-----------+--------------+ | 1 | ユイ | 本人 | | 2 | キリト | パパ | | 3 | アスナ | ハハ | +----+-----------+--------------+ SELECT * FROM families WHERE relationship = 'パパ'; +----+-----------+--------------+ | id | name | relationship | +----+-----------+--------------+ | 2 | キリト | パパ | | 3 | アスナ | ハハ | +----+-----------+--------------+ (c) kamipo 51/54
  53. 53. 「kamipoのハハ=パパ問題」 In addition to utf8mb4, we are also considering switching the default collation to be utf8mb4̲unicode̲520̲ci. Planning the defaults for MySQL 5.8 MySQL Bugs: #79977: utf8mb4̲unicode̲520̲ci donʼt make sense for Japanese FTS 52/54
  54. 54. MySQL先⽣の次 回作にご期待くだ さい Stay tuned!! 53/54
  55. 55. Questions and/or Suggestions? 54/54

×