Save 37% off PRO during our Black Friday Sale! »

未来が見える公式マニュアルの話

 未来が見える公式マニュアルの話

MySQL Casual Talks Online(gamma) Vol.2 2020/04/17 FRI 19:30-

B1dca90d4b3ffd2ccd918774e1ba170d?s=128

hmatsu47
PRO

April 17, 2020
Tweet

Transcript

  1. 未来が見える 公式マニュアルの話 MySQL Casual Talks Online(gamma) Vol.2 2020/04/17 まつひさ(hmatsu47)

  2. 自己紹介 松久裕保(@hmatsu47) https://qiita.com/hmatsu47 名古屋でWebインフラのお守り係(非DBA) ◦ 会社ではAmazon Aurora(MySQL 5.6互換版)を 使ってます MySQL

    8.0:趣味・遊び ◦ MySQL 8.0の薄い本を作って配っています https://qiita.com/hmatsu47/items/ceb75caf46e3c761095d ◦ 現在8.0.19対応版第2刷です(8.0.20対応版改訂に着手) ◦ GitHubリポジトリのほか、印刷版を勉強会などでタダで配っていました 2
  3. (こっそり)BOOTHで試験配布を始めました(有償です) https://hmatsu47.booth.pm/items/1920836 ※8.0.19対応版第2刷 3 • 本体100円 ◦ BOOTHの最低料金(物理) • あんしんBOOTHパック送料

    370円が必要です ◦ 送料のが高い問題 • 在庫あと4冊 ◦ 売れ残ったら、8.0.20対応版と 抱き合わせ?(100円で) • 8.0.20対応版は検討中 ◦ 10冊ぐらい…?
  4. 自己紹介 松久裕保(@hmatsu47) https://qiita.com/hmatsu47 名古屋でWebインフラのお守り係(非DBA) ◦ 会社ではAmazon Aurora(MySQL 5.6互換版)を 使ってます MySQL

    8.0:趣味・遊び ◦ MySQL 8.0の薄い本を作って配っています https://qiita.com/hmatsu47/items/ceb75caf46e3c761095d ◦ 現在8.0.19対応版第2刷です(8.0.20対応版改訂に着手…できてません) ◦ GitHubリポジトリのほか、印刷版を勉強会などでタダで配っていました 4
  5. 言い訳 こちらに引き込まれました • リーダーは「宮内さんはすごい人」 で(一部の方々には)お馴染みの… 5

  6. 言い訳 こちらに引き込まれました • リーダーは「宮内さんはすごい人」 で(一部の方々には)お馴染みの… 6

  7. 言い訳 こちらに引き込まれました • リーダーは「宮内さんはすごい人」 で(一部の方々には)お馴染みの… • といいつつほぼ何もしていません (できていません) 7

  8. おことわり こちらは、 MySQL ガチュアル トーク 8

  9. おことわり こちらは、 MySQL ガチュアル トーク ゆるふわ です。 のんびり気楽にお聞きください。 9

  10. ところでみなさま、 MySQLの公式Reference Manualを読んだことはありますか? ◦ https://dev.mysql.com/doc/refman/8.0/en/ ◦ もちろんありますよね!(Yes / はい) 10

  11. そしてここに検索窓がありますが、 検索してみたことはありますか? ◦ https://dev.mysql.com/doc/refman/8.0/en/ ◦ もちろんありますよね!(Yes / はい / 是的)

    11
  12. ところでここに、 未来のバージョン番号を入れて検索するとどうなるでしょうか? ◦ 注:これは4/5に取ってみたスクリーンショットです 12

  13. 4/5時点で、69個!(4/12時点も同じでした) ◦ 注:4/5時点ではまだ8.0.20はリリースされていません こうなります! 13

  14. 4/5時点で、18個! ◦ 注:4/5時点ではまだ8.0.20すらリリースされていません ちなみに、8.0.21を検索してみると…? 14

  15. 4/10時点で、28個! ◦ 注:4/10時点でもまだ8.0.20すらリリースされていません ちなみに、8.0.21を検索してみると…? 15

  16. 4/12時点で、30個! ◦ 注:4/12時点でもまだ8.0.20すら…(しつこい) ちなみに、8.0.21を検索してみると…? 16

  17. MySQLの公式Reference Manualは、 未来が見えるReference Manualらしい! ◦ ちょっと先までですが。 ◦ 試しに、「8.0.22」で検索! 17

  18. 8.0.20の話に戻ります 8.0.20で追加・変更される(た)機能を3つだけピックアップ! ◦ “As of MySQL 8.0.20, the doublewrite buffer

    storage area resides in doublewrite files.” ◦ “The Contention-Aware Transaction Scheduling (CATS) algorithm, which prioritizes transactions that are waiting for locks, was improved in MySQL 8.0.20.” ◦ “In MySQL 8.0.20, a hash join is employed any time a block nested loop is used, even when the query contains no equi-join conditions.” (1.4 What Is New in MySQL 8.0)※以降すべて4/12時点のマニュアルより 18
  19. その1 Doublewrite Buffer 8.0.20では、 ◦ Prior to MySQL 8.0.20, the

    doublewrite buffer storage area is located in the InnoDB system tablespace. As of MySQL 8.0.20, the doublewrite buffer storage area is located in doublewrite files. (15.6.4 Doublewrite Buffer) エイゴヨクワカリマセン… ◦ そんなときに頼りになるのは? 19
  20. その1 Doublewrite Buffer DeepL翻訳! ◦ https://www.deepl.com/translator ◦ …というわけで、ここから先は完全に頼り切ります! 20

  21. その1 Doublewrite Buffer “MySQL 8.0.20以前では、ダブルライトバッファのストレージ領 域はInnoDBシステムのテーブルスペースに配置されていました。 MySQL 8.0.20 以降では、ダブルライトバッファのストレージ領 域はダブルライトファイルに配置されています。”

    ◦ “Prior to MySQL 8.0.20, the doublewrite buffer storage area is located in the InnoDB system tablespace. As of MySQL 8.0.20, the doublewrite buffer storage area is located in doublewrite files.” (15.6.4 Doublewrite Buffer) 21
  22. その1 Doublewrite Buffer ダブルライトバッファのストレージ領域 元々はInnoDBシステムテーブルスペース内にあったのが、別の ファイルに独立したらしい ◦ で、なにが改善されたの? 22

  23. その1 Doublewrite Buffer “MySQL 8.0.20では、(中略)ストレージ領域をシステムテーブル スペースの外に移動することで、書き込みのレイテンシが減少 し、スループットが向上し、ダブルライトバッファページの配置 に柔軟性がもたらされます。” ◦ As

    of MySQL 8.0.20, (...) Moving the storage area out of the system tablespace reduces write latency, increases throughput, and provides flexibility with respect to placement of doublewrite buffer pages. (1.4 What Is New in MySQL 8.0) 23
  24. その1 Doublewrite Buffer なるほど? ◦ レイテンシの減少 ◦ スループットの向上 ◦ 配置の柔軟性向上

    ところで… ◦ TDE(透過的テーブルスペース暗号化)を利用中ダブルライトバッファ が有効だと平文で保管されてしまっていた点は、改善されたのかな? 24
  25. その2 CATS(Contention-Aware Transaction Scheduling) “ロック待ちのトランザクションを優先的に処理する(中略) (CATS) アルゴリズムが MySQL 8.0.20 で改善されました。トラン

    ザクション・スケジューリングの重み計算は、完全に別のスレッ ドで実行されるようになり、計算性能と精度が向上しました。” ◦ The (...) (CATS) algorithm, which prioritizes transactions that are waiting for locks, was improved in MySQL 8.0.20. Transaction scheduling weight computation is now performed a separate thread entirely, which improves computation performance and accuracy. (1.4 What Is New in MySQL 8.0) 25
  26. その2 CATS(Contention-Aware Transaction Scheduling) ほほう。 ◦ MySQLの世界では、イルカだけでなく猫たちも賢くなったらしい。 26

  27. その2 CATS(Contention-Aware Transaction Scheduling) ほほう。 ◦ MySQLの世界では、イルカだけでなく猫たちも賢くなったらしい。 ▪ トランザクション開始ヨシ! ▪

    重み計算ヨシ!! ▪ ロック獲得ヨシ!!! その結果… 27
  28. その2 CATS(Contention-Aware Transaction Scheduling) “トランザクション・スケジューリングにも使用されていた FIFO (First In First Out)

    アルゴリズムが削除されました。(中略)以前 はFIFOアルゴリズムで実行されていたトランザクションスケ ジューリングは、CATSアルゴリズムで実行されるようになりまし た。” ◦ The First In First Out (FIFO) algorithm, which had also been used for transaction scheduling, was removed. (...) Transaction scheduling previously performed by the FIFO algorithm is now performed by the CATS algorithm. (1.4 What Is New in MySQL 8.0) 28
  29. その2 CATS(Contention-Aware Transaction Scheduling) FIFOアルゴリズム終了のお知らせ ◦ お疲れさまでした。 一見、良さげだけれど… 29

  30. その2 CATS(Contention-Aware Transaction Scheduling) “場合によっては、この変更により、トランザクションにロックが 付与される順序に影響を与える可能性があります。” ◦ In some cases,

    this change may affect the order in which transactions are granted locks. (15.7.6 Transaction Scheduling) ロック付与の順序が変わる…だと? ◦ まあ当たり前といえば当たり前か。 30
  31. その3 ハッシュ結合(hash join) “MySQL 8.0.20では、ブロックの入れ子ループを使用する際に は、問い合わせに等号結合条件が含まれていない場合でも、ハッ シュ結合が使用されます。これは、内側非等号結合、セミジョイ ン、アンチジョイン、左外側結合、右外側結合に適用されます。” ◦ In

    MySQL 8.0.20, a hash join is employed any time a block nested loop is used, even when the query contains no equi-join conditions. This applies to inner non-equi-joins, semijoins, antijoins, left outer joins, and right outer joins. (1.4 What Is New in MySQL 8.0) 31
  32. その3 ハッシュ結合(hash join) “さらに、内側と外側の両方のjoin(セミジョインとアンチジョイン を含む)は、バッチドキーアクセス(BKA)を採用できるようになり ました。これは、(中略)個々のクエリが解決のために実際には必 要のない大量のリソースを使用する必要がないようにします。” ◦ In addition,

    both inner and outer joins (including semijoins and antijoins) can now employ batched key access (BKA), (...) so that individual queries need not use up large amounts of resources that they do not actually require for resolution. (1.4 What Is New in MySQL 8.0) 32
  33. その3 ハッシュ結合(hash join) ハッシュ結合とBKAの適用範囲が、 ◦ 等結合以外のINNER JOIN ◦ LEFT /

    RIGHT (OUTER) JOIN ◦ 蝉ジョイン、安置ジョイン にもひろがった結果、 ◦ データの取得が効率化されて ◦ メモリも無駄食いしなくなり 賢くなったらしい。 33
  34. ほかにも、こんなものが • EXPLAIN ANALYZE FORMAT=TREE • SQLのゆるい書き方(?)がいくつか非推奨に • SHOW ROUTINE

    • バイナリログトランザクション圧縮 • Xプロトコル接続時の圧縮レベルの指定(MySQL Shell) 34
  35. おまけ:8.0.21で来るやつ JSON_VALUE(json_doc, path) “指定されたドキュメントで指定されたパスでJSONドキュメント から値を抽出し、抽出された値を返します。” ◦ “Extracts a value from

    a JSON document at the path given in the specified document, and returns the extracted value, optionally converting it to a desired type.” (12.17.3 Functions That Search JSON Values) 35
  36. おまけ:8.0.21で来るやつ JSON_VALUE(json_doc, path) 36

  37. おまけ:8.0.21で来るやつ …ちょっと微妙だった。 ◦ ◦ ◦ “Extracts a value from a

    JSON document at the path given in the specified document, and returns the extracted value, optionally converting it to a desired type.” (1.4 What Is New in MySQL 8.0) ◦ 「とりあえずJSON」アンチパターンをよしなに処理してくれるやつがほ しい(ワガママ)。 37
  38. まとめ 公式リファレンスマニュアルを活用しましょう ◦ 未来の2マイナーバージョンくらいは何か見えそうです。 ▪ 今回の例では3つ先まで見えてましたが、リリース直前ならでは、の風景です。 DeepL翻訳ありがとう ◦ 英語恐るるに足りず。 ◦

    なんなら中国語でもなんでも来い! ▪ ちょっと言いすぎました。ごめんなさい。 38