Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

hmatsu47

April 17, 2020
Tweet

More Decks by hmatsu47

Other Decks in Technology

Transcript

  1. 自己紹介 松久裕保(@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
  2. (こっそり)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冊ぐらい…?
  3. 自己紹介 松久裕保(@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
  4. 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
  5. その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
  6. その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
  7. その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
  8. その1 Doublewrite Buffer なるほど? ◦ レイテンシの減少 ◦ スループットの向上 ◦ 配置の柔軟性向上

    ところで… ◦ TDE(透過的テーブルスペース暗号化)を利用中ダブルライトバッファ が有効だと平文で保管されてしまっていた点は、改善されたのかな? 24
  9. その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
  10. その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
  11. その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
  12. その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
  13. その3 ハッシュ結合(hash join) ハッシュ結合とBKAの適用範囲が、 ◦ 等結合以外のINNER JOIN ◦ LEFT /

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

    • バイナリログトランザクション圧縮 • Xプロトコル接続時の圧縮レベルの指定(MySQL Shell) 34
  15. おまけ: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
  16. おまけ: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