必見!MySQL8.0機能の分析(継続的な更新)

1つ、MySQL8.0の基本的な紹介

  MySQL 8.0の採用率は現在最も速いです。2019年8月、採用率は26%、5.7〜47%、5.6〜24%に達しました。

  • 2016-09-12、最初のDM(開発マイルストーン)バージョンMySQL 8.0.0、開発マイルストーン...
  • 2018-04-19最初のGA(一般提供)バージョン、8.0.11がリリースされました。
  • 2018-07-27 2番目のGA(一般提供)バージョン、8.0.12がリリースされました。
  • 2018-10-22 3番目のGA(一般提供)バージョン、8.0.13がリリースされました。
  • 2019-01-21 4番目のGA(一般提供)バージョン、8.0.14がリリースされました。
  • 2019-02-01 5番目のGA(一般提供)バージョン、8.0.15がリリースされました。
  • 2019-04-25 6番目のGA(一般提供)バージョン、8.0.16がリリースされました。
  • 2019-07-22 7番目のGA(一般提供)バージョン、8.0.17がリリースされました。
  • 2019-10-14 8番目のGA(一般提供)バージョン、8.0.18がリリースされました。
  • 2020-01-13 9番目のGA(一般提供)バージョン、8.0.19がリリースされました。
  • 2020-04-27 10番目のGA(一般提供)バージョン、8.0.20がリリースされました。
  • 2020-07-13 11番目のGA(一般提供)バージョン、8.0.21がリリースされました。
    ここに写真の説明を挿入

2つ、MySQL8.0の主な機能

2.1デフォルトの文字セットがlatin1からutf8mb4に変更されました

  バージョン8.0より前では、デフォルトの文字セットはlatin1で、バージョン8.0のデフォルトの文字セットはutf8mb4であり、照合ルールはutf8mb4_0900_ai_ciでした。Utf8はutf8mb3を指すように使用されていました。将来的には、utf8もデフォルトでutf8mb4を指すようになります。
MySQL5
ここに写真の説明を挿入
MySQL8
ここに写真の説明を挿入

2.2すべてのMyISAMシステムテーブルをInnoDBテーブルに置き換えます

  すべてのシステムテーブルはトランザクションinnodbテーブルに置き換えられます。MyISAMテーブルが手動で作成されない限り、デフォルトのMySQLインスタンスにはMyISAMテーブルは含まれません。
MySQL5
ここに写真の説明を挿入
MySQL8
ここに写真の説明を挿入

2.3インクリメンタル変数の永続性

  8.0より前のバージョンでは、自動インクリメントのプライマリキーAUTO_INCREMENTの値がmax(プライマリキー)+1より大きい場合、MySQLの再起動後に、AUTO_INCREMENT = max(プライマリキー)+1がリセットされます。この現象により、ビジネスの主要なキーの競合または見つけるのが難しいその他の問題。8.0バージョンはAUTO_INCREMENT値を保持し、MySQLの再起動後に値は変更されません。
MySQL5
ここに写真の説明を挿入
ここに写真の説明を挿入

MySQL8
ここに写真の説明を挿入
ここに写真の説明を挿入

2.4DDLアトマイズ

  8.0では、InnoDBテーブルのDDLは、成功またはロールバックのいずれかでトランザクションの整合性をサポートします。DDL操作のロールバックログは、ロールバック操作のためにデータディクショナリデータディクショナリテーブルmysql.innodb_ddl_logに書き込まれます。このテーブルは非表示のテーブルです。ショーテーブルは見えません。パラメータを設定して、ddl操作ログをmysqlエラーログに出力します。
  別の例を見てみましょう。ライブラリにはt1テーブルが1つだけあり、テーブルt1、t2を削除します。8.0より前に2つのテーブルt1、t2を削除しようとすると、エラーが報告されましたが、t1テーブルが削除され、8.0でエラーが報告されましたが、t1テーブルこれは削除されていません。これは、8.0 DDL操作のアトミック性がすべて成功したか、ロールバックされたことを証明しています。
MySQL5
ここに写真の説明を挿入
MySQL8
ここに写真の説明を挿入
ここに写真の説明を挿入

2.5パラメータ変更の永続性

  MySQL 8.0バージョンは、グローバルパラメータのオンライン変更と永続化をサポートしています。PERSISTキーワードを追加することにより、変更されたパラメータを新しい構成ファイル(mysqld-auto.cnf)に永続化できます。このファイルは、MySQLの再起動時に構成ファイルから取得できます。最新の構成パラメーターへ。たとえば、次のように実行します。SETPERSIST @@ global.sync_binlog = 100;システムは、データディレクトリにjson形式のmysqld-auto.cnfを含むファイルを生成します。フォーマット後、my.cnfおよびmysqld-auto.cnfの場合、次のようになります。両方が存在する場合、後者の方が優先されます。
ここに写真の説明を挿入

2.6降順インデックス

  MySQLは長い間文法的に降順のインデックスをサポートしてきましたが、実際にはまだ昇順のインデックスを作成しています。以下のMySQL 5.7に示すように、c2フィールドは降順ですが、c2はshowcreateテーブルからの昇順のままです。8.0c2フィールドが降順であることがわかります。
MySQL5
ここに写真の説明を挿入
ここに写真の説明を挿入
MySQL8
ここに写真の説明を挿入
ここに写真の説明を挿入

2.7グループ化が暗黙的にソートされなくなりました

  バージョン8.0より前では、group byはデフォルトでソートされますが、8.0以降では、暗黙的なソートは実行されなくなりました。
MySQL5
ここに写真の説明を挿入
MySQL8
ここに写真の説明を挿入

2.8JSON機能の強化

  MySQL 8では、JSONのサポートが大幅に改善され、パスクエリパラメータに基づいてJSONフィールドからデータを抽出するJSON_EXTRACT()関数と、データをJSON配列とオブジェクトに結合するJSON_ARRAYAGG()とJSON_OBJECTAGG()の集計がそれぞれ追加されました。関数。
  マスタースレーブレプリケーションでは、JSONデータの送信モードを制御し、Jsonタイプの部分の変更を許可するために、新しいパラメーターbinlog_row_value_optionsが追加されます。変更された部分のみがbinlogに記録されるため、変更が少ない場合にjsonビッグデータのリソース占有が削減されます。 。

2.9ログ暗号化のやり直しと取り消し

  次の2つのパラメータを追加して、REDOログとUNDOログの暗号化を制御します。

  • innodb_undo_log_encrypt
  • innodb_undo_log_encrypt

2.10 innodb select for update skip lockwaiting

  更新の場合は…を選択し、共有の場合は…を選択します(8.0の新しい構文)NOWAIT、SKIP LOCKED構文、スキップロック待機、またはスキップロックを追加します。バージョン5.7以前では、[...]を選択して更新します。ロックを取得できない場合は、innodb_lock_wait_timeoutがタイムアウトするまで待機します。バージョン8.0では、nowaitを追加し、ロックされた構文をスキップすることで、すぐに戻ることができます。クエリ行がロックされている場合、nowaitはエラーを報告してすぐに戻り、skip lockedもすぐに戻りますが、返される結果にはロックされた行が含まれていません。
ここに写真の説明を挿入
ここに写真の説明を挿入

2.11SET_VAR構文を追加する

  SET_VAR文法をsql文法に追加し、一部のパラメーターを動的に調整すると、ステートメントのパフォーマンスが向上します。

  • select / * + SET_VAR(sort_buffer_size = 16M)* / id from test order id;
  • / * + SET_VAR(foreign_key_checks = OFF)* /をtest(name)values(1);に挿入します。

2.12innodb_dedicated_serverパラメーターを追加しました

  サーバーで検出されたメモリサイズに応じて、InnoDBが3つのパラメータinnodb_buffer_pool_size、innodb_log_file_size、およびinnodb_flush_methodを自動的に構成できるようにします。

2.13元に戻すスペースの自動回復

  バージョン8.0.2のinnodb_undo_log_truncateパラメーターのデフォルト値がOFFからONに変更され、UNDOログテーブルスペースの自動回復がデフォルトで有効になっています。
  バージョン8.0.2では、innodb_undo_tablespacesパラメーターのデフォルトは2です。1つのUNDOテーブルスペースがリサイクルされると、通常のサービスを提供する別のテーブルスペースがあります。
  innodb_max_undo_log_sizeパラメーターは、UNDOテーブルスペースリカバリの最大値を定義します。UNDOテーブルスペースがこの値を超えると、テーブルテーブルはリサイクル可能としてマークされます。

2.14非表示のインデックスをサポートする

  INVISIBLEキーワードを使用して、テーブルの作成時またはテーブルの変更時にインデックスを表示するかどうかを設定します。インデックスは表示されませんが、オプティマイザはクエリ中にインデックスを使用しません。強制インデックスが使用されている場合でも、オプティマイザはインデックスを使用せず、オプティマイザは、必要に応じて、インデックスがまだ存在するため、インデックスが存在しないというエラーを報告しません。 、すばやく復元して表示することもできます。
ここに写真の説明を挿入

2.15サポートヒストグラム

  オプティマイザーはcolumn_statisticsのデータを使用してフィールド値の分布を決定し、より正確な実行計画を取得します。
  ANALYZE TABLE table_name [UPDATE HISTOGRAM on col_name with N BUCKETS | DROP HISTOGRAM ON clo_name]を使用して、ヒストグラム情報を収集または削除できます。
  ヒストグラムは、テーブル内の特定のフィールドのデータ分布をカウントし、効率的な実行計画の選択を最適化するための参照を提供します。ヒストグラムは本質的にインデックスとは異なり、インデックスの維持にはコストがかかります。挿入、更新、削除のたびにインデックスを更新する必要があります。これは、パフォーマンスに一定の影響を及ぼします。ヒストグラムは一度作成され、明示的に更新されない限り更新されません。したがって、挿入、更新、および削除のパフォーマンスには影響しません。
ここに写真の説明を挿入

2.16より詳細なログ分類

  エラーメッセージ番号[MY-010311]とエラーが属するサブシステム[サーバー]をエラーメッセージに追加しました
ここに写真の説明を挿入

2.17認証暗号化プラグインの変更

  MySQL8.0は、デフォルトの認証プラグインとしてcaching_sha2_passwordの使用を開始しました。Caching_sha2_passwordはmysql_native_passwordプラグインよりも安全なパスワード暗号化を提供し、caching_sha2_passwordはより優れたパフォーマンスを提供します。これらの優れたセキュリティおよびパフォーマンス機能により、caching_sha2_passwordはMySQL 8.0の推奨認証プラグインであり、mysql_native_passwordの代わりにデフォルトの認証プラグインでもあります。この変更はサーバーとlibmysqlclientクライアントライブラリに影響します。現在、頻繁に使用されるクライアントソフトウェアとは互換性がありません。

2.18リソースグループと役割の管理を追加する

  MySQL 8.0には、スレッドの優先度を調整し、CPUコアをバインドするための新しいリソースグループ関数が追加されています。MySQLユーザーは、リソースグループを作成、変更、および削除するためにRESOURCE_GROUP_ADMIN権限を持っている必要があります。Linux環境では、リソースグループの全機能を使用するには、MySQLプロセスにCAP_SYS_NICE権限が必要です。
ここに写真の説明を挿入
  ロールはいくつかの権限の集合と見なすことができ、統一されたロールがユーザーに割り当てられ、権限の変更は、ユーザーごとに個別の権限を必要とせずに、ロールを介して直接実行されます。
デフォルトでは、USR_defaultとSYS_defaultの2つのリソースグループが提供されます。

ここに写真の説明を挿入
ここに写真の説明を挿入
ここに写真の説明を挿入

2.19インスタンスクローン

  多くのシナリオでは、MySQLインスタンスのクローンを作成する必要があります。たとえば、MGRでは、グループレプリケーションに追加する前に、バックアップを使用して新しいインスタンスを作成する必要があります。従来のマスタースレーブアーキテクチャでは、スレーブライブラリを追加する必要がある場合は、バックアップを使用して復元し、新しいインスタンスを作成してから、このインスタンスをマスタースレーブレプリケーションに追加します。バージョン8.0.17で実装されたクローン機能は、ローカルまたはリモートをサポートします。クローンデータは、物理スナップショットに格納されたデータであり、MySQLインスタンスのクローンをより迅速かつ効率的に実現できます。
  MySQL 8.0.17によって開発されたクローンプラグインは、この問題を解決し、インスタンス複製のプロセスを簡素化します。mysqlクライアントを介していくつかのコマンドを実行するだけで、実行中のMySQLインスタンスを、多くの手順や手動の関与なしに、別の新しいインスタンスに自動的に複製できます。
予防:

  • MySQL構成パラメーターは複製されません。
  • Binlogファイルは複製されません。
  • InnoDBストレージエンジン、MyISAM、およびCSVエンジンのみをサポートするテーブルは、クローン化された後は空のテーブルです。
  • クローン作成プロセス中、すべてのDDL操作がブロックされます。
  • クローン作成中に、インスタンス自体のデータとBinlogが失われます。必要に応じて、クローン作成の前にバックアップを作成してください。

2.20NoSQLドキュメントストレージ

  MySQLドキュメントストレージは、開発者に最大の柔軟性を提供します。つまり、従来のSQLリレーショナルアプリケーションをサポートし、NoSQLモードの無料ドキュメントデータベースアプリケーションもサポートします。したがって、個別のNoSQLドキュメントデータベースを構成する必要はなくなりました。MySQLドキュメントはスキーマレスJSONドキュメントとして保存され、マルチドキュメントトランザクションサポートと完全なACID互換性を提供します。
ここに写真の説明を挿入

2.21ウィンドウ機能

  グループ集計関数と同様に、ウィンドウ関数はCOUNTやSUMなどの行のグループに対していくつかの計算を実行します。ただし、グループ集約によってこの行のグループが1つの行に集約される場合、ウィンドウ関数は結果セットの各行に対して集約を実行します。ウィンドウ関数には、ウィンドウ関数として使用されるSQL集約関数と専用ウィンドウ関数の2つの形式があります。これは、MySQLのウィンドウをサポートする集約関数のセットです:COUNT、SUM、AVG、MIN、MAX、BIT_OR、BIT_AND、BIT_XOR、STDDEV_POP(およびその同義語STD、STDDEV)、STDDEV_SAMP、VAR_POP(およびその同義語VARIANCE)およびVAR_SAMP。特殊なウィンドウ関数のセットは、RANK、DENSE_RANK、PERCENT_RANK、CUME_DIST、NTILE、ROW_NUMBER、FIRST_VALUE、LAST_VALUE、NTH_VALUE、LEAD、およびLAGです。
ここに写真の説明を挿入

2.22共通テーブル式(CTE)

  MySQL 8.0は、Common Table Expressions(CTE)を提供します。MySQL8.0より前では、サブクエリを使用して複雑なクエリを実装する必要があります。SQLステートメントは複雑でパフォーマンスが低いだけでなく、十分に明確ではありません。CTEの外観により、複雑なクエリステートメントの記述が簡素化され、SQLのパフォーマンスが向上します。
  サブクエリまたは派生クエリと比較して、CTEは最後のクエリ結果を再利用できます。つまり、クエリを1回実行すると同時に、CTEは相互に参照できます。
ここに写真の説明を挿入
ここに写真の説明を挿入

2.23スキップ範囲スキャン

  ジャンプ範囲スキャンは、バージョン8.0.13のパフォーマンスを向上させるためにMySQLによって追加された新機能です。ジャンプ範囲スキャンは、ジョイントインデックスを使用してジョイントインデックスをクエリできない一部のSQLを作成し、ジョイントインデックスをより効率的に使用できます。これは、クエリアプリケーションにMySQLジョイントインデックスを使用する上で非常に重要です。
ここに写真の説明を挿入

2.24ハッシュ結合

  8.0.18より前は、MySQLはNest Loop Joinアルゴリズムのみをサポートしていました。最も単純なものはSimpleNest Loop Joinです。MySQLはこのアルゴリズムに対していくつかの最適化を行い、Block Nest Loop Join、Index Nest Loop Join、およびBatched KeyAccessを実装しました。最適化により、HashJoinの緊急性をある程度軽減できます。
  ハッシュ結合は、同等の結合シナリオの最適化です。基本的な考え方は、外部テーブルデータをメモリにロードしてハッシュテーブルを作成することです。これにより、結合操作を完了して一致するレコードを出力するために、内部テーブルを1回トラバースするだけで済みます。

2.25その他の特徴

1.一部のシステムテーブルの削除、システムテーブルの拡張
2. REDOの並列書き込み、新しい低速ログパラメータ、詳細
3.レプリケーションの最適化、count(*)の最適化
4.デフォルトでの分散トランザクションのサポート
5.クエリキャッシュの削除そして、mysql_upgrade、チェック整合性を追加します。6
。一時テーブルのデフォルトインデックスはinnodbです。7。UNDOテーブル
スペースはデフォルトで有効になっており、オンライン調整の数がサポートされています。8。Grantは
暗黙的にユーザーを作成しなくなり、補助パスワードを追加します
。機能
10、動的アクセス許可
11、MySQL8.0は、構成可能なコスト定数をサポートし、オプティマイザーのオーバーヘッドを最適化し、より多くのヒントをサポートし、オプティマイザーは実行計画を作成するときにデータがバッファープールにあるかどうかを考慮します。
12. MySQL 8.0は、GISのサポートが非常に大幅に改善されており、機能的にPostgreSQLに追いつくか、それを上回っています。
13、MGR最適化
14、REDOアーカイブ
15、新しいアーキテクチャinnodb ReplicaSet
16、二重書き込み独立
17、説明分析サポート
18、バックアップロックサポート

おすすめ

転載: blog.csdn.net/qq_42979842/article/details/108332159