20年前のMySQL、今のMySQL

 20年前のMySQL、今のMySQL

2019/12/01 PHP Conference Japan 2019
https://phpcon.php.gr.jp/2019/

0deae06ab5d86b39feeec2e23a30b88a?s=128

yoku0825
PRO

December 01, 2019
Tweet

Transcript

  1. 20年前のMySQL、今のMySQL ノストラダムスの予言を超えて 2019/12/01 yoku0825 PHP Conference Japan 2019

  2. 20回目のPHPカン ファレンス おめで とうございます!! 1/65

  3. TL;DR 2/65

  4. 2019年のMySQLが大事にしている(ように見える)もの レプリケーション SQLそのものの強化 SQLだけでできること、の拡充 3/65

  5. 免責事項 このスライドはyoku0825個人の見解に基づいて作成されており、所属する組織お よび所属しない組織あるいはNULLの一切の意見を代表するわけがありません ついでにPHPネタも出てきません 4/65

  6. \こんにちは/ yoku0825@とある企業のDBA オラクれない ‐ ポスグれない ‐ マイエスキューエる ‐ 生息域 Twitter:

    @yoku0825 ‐ Blog: 日々の覚書 ‐ 日本MySQLユーザ会 ‐ MySQL Casual ‐ 5/65
  7. overview 1995年 MySQL誕生(ただしこの時点では一般公開されていなかった) 1997年 3.21.x 最初の日本語対応 2000年(3月) 日本MySQLユーザ会発足 2000年(6月) MySQL

    3.23.19 からGPLv2での頒布が始まる 第1回目の日本でのPHPカンファレンスらしい 2001年 MySQL 3.23.31製品リリース 2003年 MySQL 4.0製品リリース 2003年 libmysqlclient.so がLGPLからGPLv2に変更 2004年 MySQL 4.1製品リリース 2004年 GPLv2にFOSS例外規定を追加 6/65
  8. overview 2005年 MySQL 5.0製品リリース 2005年 InnobaseがOracleに買収される 2008年 MySQL ABがSun Microsystemsに買収される

    2008年 Mariaストレージエンジンの開発がスタート 2008年 MySQL 5.1製品リリース 2009年 MariaDBのフォーク 2009年 MySQL 6.0の息の根が止まる 2010年 Sun MicrosystemsがOracleに買収される 2010年 MySQL 5.5製品リリース 7/65
  9. overview 2013年 MySQL 5.6製品リリース 2015年 MySQL 5.7製品リリース 2015年 MySQL Fabric製品リリース

    2017年 InnoDB Cluster製品リリース 2018年 MySQL 8.0製品リリース 8/65
  10. MySQLが割と昔から大 事にしていて、最近大 事にしなくなったもの 9/65

  11. 組み込み用 mysqld 10/65

  12. 組み込み用mysqld 2003年 MySQL 4.0から 2018年 MySQL 8.0サポート終了 MySQL :: MySQL

    Classic Edition 11/65
  13. 組み込み用mysqld 主にCのアプリケーションに「直接MySQLの機能を埋め込む」ためのライブラリ群 「直接埋め込む」ため、GPL版のコピーレフトの影響が回避できない プロセスなしでSQLでアクセスできてクラッシュアンセーフ… SQLite3に取って代わられたんじゃないかしら(推測) ‐ 12/65

  14. 組み込み用mysqld 以前のMySQLがバイナリのサイズを小さく保とうとしていた理由の一つはこれだ と思う 今後、小さなフットプリントで…というのは期待できなくなるかも知れない ‐ “Linux - Generic” で “Minimal

    Install”版というパッケージを提供し始めたので多少はがんば るのかも ‐ rpm全部入りtarボール( *.rpm-bundle.tar )のサイズがこんな 5.7.28のうち200MB弱がembedded ‐ Version size 8.0.18 653.1M 8.0.18-minimal 178.1M 5.7.28 581.3M 5.6.46 297.9M 5.5.62 165.3M 13/65
  15. MySQLがここ5年 以上やっていること 14/65

  16. MyISAM撲 滅 15/65

  17. MyISAM撲滅 2010年 MySQL 5.5 デフォルトストレージエンジンがInnoDBに変更 ‐ 2012年 MySQL 5.6 「MyISAMにできてInnoDBにできないことをなくす」

    ‐ InnoDB FTSのサポート ‐ 2014年 MySQL 5.7 mysql スキーマの一部がInnoDBに ‐ InnoDB GISのサポート ‐ SELECT時に暗黙で作られるテンポラリーテーブルがInnoDBに ‐ 2018年 MySQL 8.0 mysql スキーマが完全にInnoDBに ‐ 暗黙のテンポラリーテーブルにもうMyISAMは選べない ‐ 16/65
  18. Good-bye マイア勇 17/65

  19. MySQLが大事にしよう として、最近そうでもな くなったかも知れないも の 18/65

  20. プラガブルスト レージエンジン 19/65

  21. プラガブルストレージエンジン 2005年 MySQL 5.0 ARCHIVEストレージエンジン, FEDERATEDストレージエンジン ‐ InnobaseがOracleに買収された年でもある(2005年) おかげさまで(?)ストレージエンジン戦国時代の幕開けに ‐

    2008年 MySQL 5.1 「プラガブルストレージエンジン」APIが公開 ‐ 2018年 MySQL 8.0 データディクショナリーの一新によりストレージエンジンプラグイン冬の時代到来 ‐ 20/65
  22. プラガブルストレージエンジン CREATE TABLE .. Engine = ? だけでデータフォーマットが変えられる素敵機能 トランザクション非対応でスキャンに強いMyISAM ‐

    トランザクション対応でフツーのRDBMSとして使えるInnoDB ‐ 日本語全文検索といえばMroonga ‐ データウェアハウス用のカラムナーInfiniDB ‐ 一時期、雨後のたけのこのように育ったストレージエンジンのエコシステムは 今はもうかつてほどの勢いはない ‐ 21/65
  23. プラガブルストレージエンジン 疎結合だからこそ最適化できなかった部分 InnoDBと密結合だからこそできる最適化 もう「SQLとNoSQLを使い分ける」のは当たり前になったので全部がMySQLイン ターフェイスでなくてもいいんだろうなぁ 22/65

  24. MySQLが実は昔 からやってること 23/65

  25. 周辺ツールの内製(?) MySQL Proxy MySQL Administraotr MySQL Migration Toolkit MySQL Workbench

    MySQL Utilities MySQL Fabric MySQL Router MySQL Shell 24/65
  26. 周辺ツールの内製(?) MySQL Proxy MySQL Administraotr MySQL Migration Toolkit MySQL Workbench

    MySQL Utilities MySQL Fabric MySQL Router MySQL Shell 25/65
  27. 周辺ツールの内製(?) 開発元が作ってるからって必ずしもメンテナンスされ続けるわけではないけれども MySQL RouterとMySQL Shellは “MySQL InnoDB Cluster” の構成要素でもあり 昨今力を入れているっぽい

    MySQL RouterはMySQL Fabricの時代にできたけど余計なことをしないからまあ まあ筋が良いと思う(が、簡素すぎるというのもある) コードツリー的にはMySQL Serverと同じリポジトリに統合された ‐ MySQL Shellは “mysqlコマンドラインクライアントを置き換えるんだー” とか 言ってた そのうちコードツリーがマージされたり、本体にバンドルされるようになったりしたらその時 期なのかも ‐ 26/65
  28. MySQLが最近売りにし ようとしているんだかし ていないんだかわからな いもの 27/65

  29. 日本語対応 28/65

  30. 日本語対応 1997年 3.21.x 最初の日本語対応 2004年 MySQL 4.1 UTF-8(3バイト)登場 ‐ 2010年

    MySQL 5.5 utf8mb4登場 ‐ 2018年 MySQL 8.0 utf8mb4がデフォルトの文字コードに ‐ UCA 9.0.0に準拠した照合順序 ‐ 29/65
  31. 日本語対応 日本語が格納できる、という意味ではなくて mysql> select hex(s),s from ja_0900_as_cs order by s;

    +--------+------+ | hex(s) | s | +--------+------+ | E4BA9C | 亜 | | E4BC8A | 伊 | | E99BA8 | 雨 | | E6A084 | 栄 | | E5A5A5 | 奥 | +--------+------+ MySQLの日本語コレーション - @tmtms のメモ 30/65
  32. 日本語対応 ー の並ぶ位置がちゃんと(?)違う… 31/65

  33. 日本語対応 utf8mb4_ja_0900_as_cs & utf8mb4_ja_0900_as_cs_ks • JIS X 4061の仕様を採用した共通ロケールデータリポジトリ (CLDR /

    Common Locale Data Repository)の内容を実装 • CLDRはDUCETでの言語ごとにカスタマイズされた情報をXML形式で提供 • 基底文字に加えて以下の判別およびソート順の規定を行う – 清濁: UCA 2次レベル および JIS X 4061 第1照合属性 – 大文字小文字: UCA 3次レベル および JIS X 4061 第2照合属性 • utf8mb4_ja_0900_as_cs_ks は上記に加えひらがなカタカナを判別 – UCA 4次レベル および JIS X 4061 第3照合属性 [db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セット と文字照合 32/65
  34. MySQLが割と昔か ら、今もとても大事 にしているもの 33/65

  35. レプリケー ション 34/65

  36. レプリケーション 少なくとも2001年 MySQL 3.23からレプリケーションはあった 2004年 MySQL 4.1 SSLサポート ‐ 2008年

    MySQL 5.1 binlog_format= ROW ‐ 2010年 MySQL 5.5 準同期レプリケーション ‐ 2013年 MySQL 5.6 GTID, MTS, チェックサム, 遅延レプリケーション ‐ 2015年 MySQL 5.7 マルチソースレプリケーション, グループレプリケーション ‐ 2018年 MySQL 8.0 JSONデータ型の部分更新をサポート ‐ 35/65
  37. レプリケーション 当初はそれほど売り文句だと思われていなかった? 大きな機能追加が続くようになるのは5.1から ‐ それ以降、性能改善とは別に機能追加が続いている ‐ 価格的に「強いサーバー1台 >> 半分のスペックのサーバー2台」な時代に存在感 を出した

    PostgreSQLも2010年の9.0までストリーミングレプリケーションを提供していなかったわけで ‐ 36/65
  38. レプリケーション 倍々ゲームで「強いサーバー1台 == 半分のスペックのサーバー2台」が成り立つ クラウド利用側にはあまり関係ないようになるかも知れない 自前でデータセンターを運用しているような規模になってくるとやっぱりレプリ ケーションは高機能であれば高機能である程良いので、今後も期待できるのではな いか 37/65

  39. MySQLが最 近始めたこと 38/65

  40. メンテナンスリリー ス()での新機能追 加 39/65

  41. メンテナンスリリース()での新機能追加 $ curl -L -s https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html | perl -nlE 'if

    ($_ =~ /(8\.0\.\d+)/) { say $1 }' | sort -t "." -k 3 -n | uniq -c 1 8.0.0 3 8.0.2 3 8.0.3 2 8.0.4 2 8.0.12 6 8.0.13 6 8.0.14 9 8.0.16 8 8.0.17 4 8.0.18 8.0.15はガチで8.0.14のリグレッションを1件だけ直した「メンテナンスリリース」だった。よってWhat is Newの中にはない 40/65
  42. メンテナンスリリース()での新機能追加 「メンテナンスリリース」 だと言い張る The MySQL 8.0.12 Maintenance Release is Generally

    Available | MySQL Server Blog ‐ The MySQL 8.0.13 Maintenance Release is Generally Available | MySQL Server Blog ‐ The MySQL 8.0.14 Maintenance Release is Generally Available | MySQL Server Blog ‐ The MySQL 8.0.16 Maintenance Release is Generally Available | MySQL Server Blog ‐ The MySQL 8.0.17 Maintenance Release is Generally Available | MySQL Server Blog ‐ The MySQL 8.0.18 Maintenance Release is Generally Available | MySQL Server Blog ‐ 8.0.15はガチで8.0.14のリグレッションを1件だけ直した「メンテナンスリリース」だった。よって公式ブログに記事は無い() 41/65
  43. メンテナンスリリース()での新機能追加 本番に導入するまでは面白い 本番に導入したあと、マイナーバージョンアップだと思って追随するのは無理 ‐ Mockじゃなくて本物のMySQLを使ったユニットテストがないと死ねる ‐ 42/65

  44. 2019年以降の MySQLが強化して いくであろう機能 43/65

  45. SQLインターフェ イスだけで出来る機 能の拡充 44/65

  46. SQLインターフェイスだけで出来る機能の拡充 もともと SET GLOBAL でオンライン変更できる変数は多い方だったと思う MySQL 5.7とそれ以降では innodb_buffer_pool_size もオンラインで変更できるようになった し

    ‐ SET GLOBAL を超えて、 mysqld-auto.cnf に設定を永続化できる SET PERSIST, SET PERSIST_ONLY が追加 更には RESTART ステートメントも備えて、 「リードオンリーの設定でさえSQLだ けで設定がいじれる」 45/65
  47. SQLインターフェイスだけで出来る機能の拡充 何が嬉しいのか? SQLインターフェイス(= mysqld + クライアント)だけでプロビジョニングが出来る ‐ 「クラウドフレンドリー」ってよく中の人が謳ってるけど、たぶん相手にしている のはPaaSじゃなくてIaaS MySQL

    + MySQL Shell + MySQL RouterでMySQL InnoDB Clusterなるシングルマスター/マ ルチマスター構成が取れるソリューションを提供 ‐ 46/65
  48. 2019年のMySQL が備えた機能 47/65

  49. RDBMSっ ぽい機能 48/65

  50. RDBMSっぽい機能 2018年 MySQL 8.0 CHECK制約 ‐ 降順インデックス ‐ 式インデックス ‐

    共通テーブル式(WITH句) ‐ Window関数(OVER .. PARTITION句) ‐ HASH JOIN ‐ ANTI-JOIN ‐ マルチバリューインデックス ‐ EXPLAIN ANALYZE ‐ 49/65
  51. CHECK制約 50/65

  52. 降順インデックス 51/65

  53. 式インデックス 52/65

  54. 共通テーブル式 53/65

  55. 共通テーブル式 54/65

  56. 共通テーブル式 55/65

  57. Window関数 56/65

  58. Window関数 57/65

  59. こんな便利なものを〇 racleとP〇stgreSQLは 使っていたのか!!1 58/65

  60. RDBMSっぽい機能 MySQL Bugs: #3464: Constraints: support CHECK MySQL Bugs: #13375:

    Index with Desc sort feature MySQL Bugs: #16244: SQL-99 Derived table WITH clause (CTE) MySQL Bugs: #28957: Ordered Analytical Functions MySQL Bugs: #59025: MySQL does not support the hash join 59/65
  61. RDBMSっぽい機能 今までだんまりを決め込んでいたSQL周りがここに来て一気に EXCEPT, INTERCECT, FULL OUTER JOINあたりが実装される日も来るのでは マテビューはどうかな… ‐ 60/65

  62. 2019年のMySQLが大事にしている(ように見える)もの レプリケーション SQLそのものの強化 SQLだけでできること、の拡充 61/65

  63. 20年を経て変わっ たもの変わらないも の 62/65

  64. これからもよろし くお願いします 63/65

  65. 参考リンク MySQL - Wikipedia FOSDEM 2015 with MySQL & MySQL

    20 years anniversary celebration! MySQL - 日本語対応について 今さらだけどMySQLとライセンス ASCII.jp:MySQLの古いバージョンがGPLでリリース MySQL Reference Manual for version 3.21.31. - The MySQL server license MySQL、PHPとのライセンス問題を解決する新除外条項を発表 - CNET Japan 64/65
  66. 参考リンク 漢(オトコ)のコンピュータ道: Good Bye MySQL 6.0 MySQL Lists: announce: MySQL

    6.0.11 Alpha has been released! デブサミ2011 【17-E-7】 MySQLユーザ会のこれまでとこれから MyNAができるまで MySQLの日本語コレーション - @tmtms のメモ [db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セット と文字照合 MySQL :: MySQL 8.0 Reference Manual :: 1.4 What Is New in MySQL 8.0 MySQL :: MySQL Classic Edition 65/65