2024.10.21

MySQL

MySQL 9.1.0 Innovationリリース(リリース日:2024年10月15日)

アトミックDDL関連

  • 以前は、CREATE DATABASEとDROP DATABASEはアトミックでしたが、完全にクラッシュセーフではありませんでした。これにより、次の問題が発生する可能性がありました:
    • データベースディレクトリが作成された後、操作が実際にコミットされる前に、CREATE DATABASEが失敗した場合、データディクショナリにはデータベースの存在の記録がありませんが、データベースディレクトリはファイルシステム内にまだ存在していたため、手動でクリーンアップする必要がありました。
    • ファイルシステムエラーまたは予期しないシャットダウンにより、DROP DATABASEの一部としてのデータベースディレクトリの削除が失敗した場合、DROP DATABASEを含むトランザクションが必ずしもロールバックされるわけではありませんでした。このような場合は、問題を修正するために手動で介入する必要がありました。

    これらのステートメントは、影響を受けるデータベース内の全てのテーブルがアトミックデータ定義ステートメントをサポートするストレージエンジン(InnoDBなど)を使用している限り、完全にアトミックでクラッシュセーフになりました。
    詳細については、Atomic Data Definition Statement Supportを参照してください。(WL #16232)

監査ログ関連

  • 監査ログでは、名前が英数字で始まっていないユーザー ('$foo'など) を、MySQLサーバーではそのようなユーザーの作成が許可されているにもかかわらず、無効として扱いました。
    同じ問題は、MySQL Enterprise Firewallにも影響しました。(バグ #36778917)

認証関連

  • authentication_openid_connectサーバーサイド認証プラグインを使用して、MySQL Enterprise EditionにOpenID Connectサポートを追加しました。
    詳細については、OpenID Connect Pluggable Authenticationを参照してください。(WL #16269)

C API関連

  • 非同期インターフェイスは、安全でない静的ローカル変数を使用して状態情報を保存しました。(バグ #115703、バグ #36891894)

コンパイル関連

  • MySQLは、Fedora 41ではコンパイルされませんでした。(バグ #37046924)
  • MySQLは、Ubuntu 24.10ではコンパイルされませんでした。(バグ #37042308)
  • Oracleのオープンソースガイドラインに準拠するために、CONTRIBUTING.mdおよびSECURITY.mdファイルをMySQLソースに追加しました。(バグ #36998165)
  • CMAKE_MINIMUM_REQUIREDを、必要な正しいCMakeバージョン(3.14.6)およびMySQLで使用されるサードパーティライブラリのCMakeポリシーに合わせました。(バグ #36978193)
  • システムのcurlライブラリにリンクするのではなくcurlを含むバイナリパッケージは、curl 8.9.1を使用するようにアップグレードされました。curlバージョン 8.9.1で修正された重要な問題については、https://curl.se/docs/security.htmlで説明されています。 (バグ #36967379、バグ #36955197)
  • 同梱のzlibライブラリがバージョン 1.2.13からバージョン 1.3.1にアップグレードされました。(バグ #36950863)
  • CMakeオプション BUILD_SHARED_LIBSおよびCMAKE_SKIP_INSTALL_ALL_DEPENDENCYがビルドのトップレベルでOFFに設定されるようになりました。(バグ #36930664)
  • gRPCおよびProtobufの最新のCMakeパッケージをプルすると、これらのライブラリのビルドが失敗しました。パッケージ検索を書き換えて、古いCMakeパッケージと新しいCMakeパッケージの両方で機能するように修正しました。(バグ #36905657)
  • バンドルされたlibcurlライブラリをバージョン 8.9.0にアップグレードしました。 (バグ #36886877)
  • バンドルされたlz4ライブラリがバージョン 1.10.0にアップグレードされました。(バグ #36886747)
  • システムTesseract OCRライブラリをビルドおよびリンクするためのCMakeコードが追加されました。(バグ #36872432)
  • カスタムCMake関数 MY_TARGET_LINK_OPTIONSが組み込み関数 TARGET_LINK_OPTIONSに置き換えられました。(バグ #36850490)
  • CMakeの-DWITHOUT_SERVERオプションは、Enterprise Linux 7では機能しませんでした。(バグ #36824515)
  • MySQLをコンパイルする時に、Fedora バージョン28または34をチェックしなくなりました。これらはサポート終了となり、サポートされなくなったためです。 (バグ #36819263)
  • Enterprise Linux 9では、moldとのリンクは機能しませんでした。(バグ #36818902)
    参照: バグ #34099162も参照してください。
  • DISABLE_PERFSCHEMAビルドオプションを追加しました。有効にすると、全てのDISABLE_PSI_* オプションがONに設定されるという効果があります。DISABLE_PERFSCHEMAのデフォルトはOFFです。(バグ #36778698)
  • MySQLで使用されるlibfidoのバージョンが1.15.0にアップグレードされました。(バグ #36752604)
  • RE2正規表現ライブラリがMySQLソースにバンドルされるようになりました。(バグ #36729026)
  • バンドルされたopentelemetry-cppのバージョンが1.15.0にアップグレードされました。 (バグ #36708755)
  • MySQLコードベースに使用されるclang-formatのバージョンが10から15にアップグレードされました。(バグ #36500268)
  • SQL_I_listは、メンバーフィールド nextを使用して、最初にメンバーフィールドのアドレスとして初期化される次のオブジェクトへのポインターフィールドを追跡します。これは、通常のコンストラクタで構築されたリストオブジェクトでのみ有効です。デフォルトの代入演算子はメンバーごとの代入を使用していましたが、これは空のリストには適していません。
    これは、カスタマイズされた移動コンストラクタと演算子 = 関数を提供することで修正されました。さらに、save_and_clear()の実装を変更して、代入ではなくstd::move()を使用するようにしました。
    (バグ #115712、バグ #36891161)
  • バンドルされているTI-RPCのバージョンが1.3.5にアップグレードされました。 (バグ #115698、バグ #36886602)
  • Protobuf 22以降を使用してMySQLをビルドすることはできませんでした。
    (バグ #115163、バグ #36678092)

コンポーネント関連

  • 暗号化方式としてSHA3-256が指定されていた場合、SHA3-224アルゴリズムが使用されました。(バグ #36980306)
  • ヘッダーファイル mysql/plugin.hは、一部のログコンポーネントに含まれていましたが、実際にはどのコンポーネントにも必要ありません。(バグ #34772742)
  • このリリースで追加されたオプショントラッカーコンポーネント(component_option_tracker)は、MySQLサーバーに存在するオプション(つまり、名前付き機能)と、コンポーネントおよびプラグインに存在するオプションに関する情報を提供する2つのテーブルを実装します。
    • 読み取り専用のperformance_schema.mysql_optionテーブルには、名前、コンポーネント名(またはMySQLサーバー)、オプションが現在有効かどうかなど、サーバーにインストールされている全てのオプションに関する情報が含まれています。
    • 読み取り/書き込み可能なmysql_option.option_usageテーブルには、システム上の各オプションの使用状況情報がJSON形式で表示されます。サーバーがグループレプリケーションクラスターの一部である場合、そのサーバーIDとクラスターIDもこのテーブルに表示されます。

    特定のオプションについて、mysql_optionテーブルのOPTION_NAME列の値とoption_usageテーブル内の同じ名前の列の値は同じです。次のように、両方のテーブルに対するクエリでこれらの列を結合列として使用できます:

    mysql> SELECT * FROM performance_schema.mysql_option o
    -> JOIN mysql_option.option_usage u
    -> ON o.OPTION_NAME=u.OPTION_NAME\G
    *************************** 1. row ***************************
    OPTION_NAME: Enterprise AUDIT
    OPTION_ENABLED: TRUE
    OPTION_CONTAINER: audit_log plugin
    CLUSTER_ID:
    SERVER_ID:
    OPTION_NAME: Enterprise AUDIT
    USAGE_DATA: {"used": true, "usedDate": "2024-10-16T09:14:41Z"}
    *************************** 2. row ***************************
    OPTION_NAME: JavaScript Stored Program
    OPTION_ENABLED: TRUE
    OPTION_CONTAINER: component:mle
    CLUSTER_ID:
    SERVER_ID:
    OPTION_NAME: JavaScript Stored Program
    USAGE_DATA: {"used": "false", "usedDate": "2024-10-15T13:40:03Z"}

    オプショントラッカーコンポーネントは、商用製品であるMySQL Enterprise Editionの一部として利用できます。
    オプション トラッカーと前述のテーブルの詳細、およびオプショントラッカーをサポートするコンポーネントとプラグインのリストについては、Option Tracker Componentを参照してください。また、The mysql_option Tableも参照してください。(WL #16217、WL #16403、WL #16503)

設定関連

  • Microsoft Windows: Windowsでは、MySQL Configuratorの元に戻すボタンの機能が必ずしも元の値に戻らないことがありました。(バグ #36702176)
  • Microsoft Windows: Windowsでは、MySQL Configuratorのデータ ディレクトリファイル参照メカニズムはProgramDataフォルダを必要としましたが、現在はそのフォルダの外部でも機能できます。(バグ #36702072)
  • Microsoft Windows: Windowsでは、選択したオプションが変更されていない場合、Nextをクリックした後にMySQL Configuratorが不要なバックグラウンド操作を実行しなくなりました。(バグ #36395605)
  • Microsoft Windows: Windowsでは、MySQL Configuratorは空のパスワードを弱いパスワードではなく強いパスワードとして説明しました。(バグ #35533726)

非推奨と削除関連

  • NDB Cluster API: NDB Cluster 9.0で非推奨となったNode.jsのサポートは、このリリースで削除されています。(WL #16246)

SQL関数と演算子関連

  • DATABASE()がUNIONクエリの一部として使用された場合、この関数からの出力は切り捨てられました。(バグ #36871927)
  • SUM()は、DISTINCT も使用された場合、同じ値に対して異なる結果を返す場合があります。例:
    mysql> SELECT SUM(b'1100'), SUM(DISTINCT b'1100');
    +--------------+-----------------------+
    | sum(b'1100') | sum(DISTINCT b'1100') |
    +--------------+-----------------------+
    | 12 | 9 |
    +--------------+-----------------------+

    これは、DISTINCTを使用する場合、一時テーブルを使用して値を保持し、最終的に一意の値のみがユーザーに返されるために発生しました。DISTINCTの設定中にこのようなテーブルを作成すると、データ型と長さが決定されていることが考慮されず、代わりにこれらを再計算して使用していました。現在は、既に決定されているデータ型と長さを使用します。(バグ #115476、バグ #36796197)

JavaScriptプログラム

  • JavaScriptストアドプログラムは常にutf8mb4文字セットを使用しますが、このようなストアドプログラムのINFORMATION_SCHEMA.ROUTINESのCOLLATION_CONNECTION列に表示される値はlatin1と表示されました。現在は、常にutf8mb4_0900_ai_ci(utfmb4のデフォルトの照合順序)に設定されます。これにより、ユーザーが設定した照合順序が上書きされます。
    ほとんどの場合、比較に使用される照合順序は関係する列に基づいて決定されるため、この変更は結果に目に見える影響を及ぼしません。これに例外が発生するのは、リテラル値を比較する場合です。このような場合には、COLLATION_CONNECTIONが使用されます。例えば、ユーザーが以前にcollation_connectionをlatin1_danish_ciに設定していた場合、JavaScriptプロシージャ内から実行されたSELECT 'a' < 'o'の結果は、ユーザーの期待と一致しない可能性があります。回避策としては、SELECT 'a' < 'o' COLLATE utf8mb4_da_0900_ai_ciのように、照合を明示的に指定することです。(バグ #36925906)
  • ストアドルーチン内でプリペアドステートメントがBLOB値を返すと、プリペアドステートメントが割り当て解除された後にBLOB値が無効になります。(バグ #36902680)
  • ステートメントハンドルインターフェイスを使用するストアドプロシージャ内のDMLステートメントでユーザー変数を使用すると、そのようなストアドプロシージャの実行後にステートメントが実行された時に、予期しないサーバー終了が発生することがありました。この問題に対処するため、ステートメントハンドルインターフェイスからサブステートメントを実行した後、ユーザー変数とその値を格納するために使用するメモリをステートメント実行メモリルートにリセットするようになりました。(バグ #36892945)
  • SqlResultはイテレータをサポートしていませんでした。
    結果セットを次のように反復処理できるようになりました:

    let result = session.runSql("SELECT * FROM t")

    for (let row of result) {
    console.log(row.c1+row.c3);
    }

    (バグ #36835486)

  • Multilingual Engine Component(MLE)がTelemetryメトリックを出力するようになりました。
    mysql.mle Metricsを参照してください。
    さらに、ストアドJavaScriptプロシージャで実行されたSQLクエリはパフォーマンススキーマクエリダイジェストで確認できるようになり、ストアドJavaScriptプロシージャで実行されたSQLステートメントはevents_statements_history_longで確認できるようになりました。(バグ #36216014、WL #16354)
  • VECTOR型は、JavaScriptストアドプログラムで完全にサポートされるようになりました。ベクターは、入力引数、出力引数、プリペアドステートメントのbind()パラメーター、および戻り値として使用できるようになりました。
    詳細については、JavaScript Stored Program Data Types and Argument Handlingを参照してください。 (WL #16405)

キーリング関連

  • 安全でないAES ECBのサポートは、全てのMySQLキーリング関連コンポーネントから削除されました。(バグ #36749277)

MySQL Enterprise関連

  • レプリケーション: このリリースでは、MySQLレプリケーションアプライアメトリックコンポーネントが追加されました。このコンポーネントは、以前はエラーログに記録されていたレプリケーションに関する統計情報をユーザーに提供します。このコンポーネントは、この情報を含む2つのテーブルをMySQLパフォーマンススキーマに追加します。replication_applier_metricsは、特定のレプリケーションチャネルのレプリケーションアプライアメトリックを提供し、replication_applier_progress_by_workerは、特定のワーカーの同様のメトリックを提供します。
    これにより、レプリケーションパイプライン全体から統計情報を収集し、その表示を統一することによって、レプリケーションの可観測性が向上します。この作業の一環として、特に役に立たなかったメトリックの一部は、より有用なメトリックに置き換えられました。
    このコンポーネントの詳細については、Replication Applier Metrics Componentを参照してください。(WL #15620)
    参考: バグ #32587480も参照してください。

プラガブル認証

  • SET PERSIST authentication_ldap_simple_bind_root_pwd=passwordは、実際にはパスワードを保存しませんでした。(バグ #35478833)

SQL構文関連

  • SELECT test.dt.a FROM (SELECT 1 AS a) AS dtのようなクエリは、派生テーブル内の列を参照するためにdb_name.tbl_name.col_name形式の識別子チェーンを使用しますが、この動作はSQL標準に反しています。このような参照はテーブル式でも(これも誤って)受け入れられました。現在、このような場合、このような列参照は許可されません。(バグ #36704815)
    参照: バグ #36542023も参照してください。
  • このリリースでは、CREATE VIEWステートメントで使用するIF NOT EXISTS句のサポートが追加されました。IF NOT EXISTSには次の効果があります:
    • ステートメントで指定されたビューが存在しない場合は、IF NOT EXISTS句が使用されなかった場合とまったく同じように、通常どおりに作成されます。
    • ビューが既に存在する場合、ステートメントは成功したように見えますが、ビュー定義は変更されず、次に示すように警告が表示されます:
      mysql> CREATE VIEW v1 AS SELECT c1, c3 FROM t1;
      Query OK, 0 rows affected (0.01 sec)

      mysql> CREATE VIEW v1 AS SELECT c2 FROM t1;
      ERROR 1050 (42S01): Table 'v1' already exists
      mysql> CREATE VIEW IF NOT EXISTS v1 AS SELECT c2 FROM t1;
      Query OK, 0 rows affected, 1 warning (0.01 sec)

      mysql> SHOW WARNINGS;
      +-------+------+---------------------------+
      | Level | Code | Message |
      +-------+------+---------------------------+
      | Note | 1050 | Table 'v1' already exists |
      +-------+------+---------------------------+
      1 row in set (0.00 sec)

      mysql> SHOW CREATE VIEW v1\G
      *************************** 1. row ***************************
      View: v1
      Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`vuser`@`localhost` SQL
      SECURITY DEFINER VIEW `v1` AS select `t1`.`c1` AS `c1`,`t1`.`c3` AS `c3` from `t1`
      character_set_client: utf8mb4
      collation_connection: utf8mb4_0900_ai_ci
      1 row in set (0.00 sec)

    IF NOT EXISTSはOR REPLACEと互換性がないため、これら2つの句を同じCREATE VIEWステートメントで一緒に使用することはできません。一緒に使用しようとすると、ステートメントは構文エラーで拒否されます。
    詳細については、CREATE VIEW Statementを参照してください。(WL #14774)

スレッドプール関連

  • 一部の同時接続試行が正しく処理されませんでした。(バグ #36625082)

トリガー関連

  • パフォーマンス: 以前は、1つ以上のトリガーを持つテーブルの場合、トリガーはテーブルにアクセスする度に完全に解析され、メモリにロードされました。このため、多くのテーブル、複雑なトリガー、またはその両方が関係し、データが変更されていないシナリオでは、リソースの使用量が予想以上に高くなり、実行時間が不当に長くなることがよくありました。また、読み取り専用レプリカで不要なリソースの使用も発生しました。
    トリガーの解析とロードを2つの別々のフェーズに分割することで、この問題を解決しています。最初のフェーズでは、トリガーメタデータのみを読み取ります。これは、トリガーメタデータが一度保存され、同じトリガーの異なるインスタンス間で共有されることが可能なためです。トリガーの実際の解析と実行は、テーブルデータを変更する操作に対してのみ実行される2番目のフェーズで行われます。これにより、例えばSELECTステートメントの実行時に使用されないトリガーを解析してキャッシュしなくなるため、リソースが節約されます。
    この拡張機能は、トリガーを持つテーブルをトリガーを持たないテーブルとは別にテーブルキャッシュで追跡することで実装されています。トリガーを完全にロードし、特定の時点でテーブルキャッシュに保持されるオープンテーブルの最大数は、このリリースで追加されたサーバーシステム変数 table_open_cache_triggersの値によって決まります。この変数は既存のtable_open_cache システム変数に似ていますが、このリリースで導入された、トリガーが完全にロードされたテーブルに固有の追加の削除メカニズムを制御します。table_open_cache_triggersのデフォルト値は、最大値(524288)と同じです。table_open_cache_triggersを低い値に設定すると、トリガーが完全にロードされたテーブルに固有の削除ロジックがアクティブになります。table_open_cache_triggersをデフォルト値のままにしておくことは、トリガーが完全にロードされたかどうかに基づいてテーブルがキャッシュから削除されないことを意味します。これは、MySQLの以前のバージョンと同じ動作です。
    このリリースで追加されたいくつかのサーバーステータス変数は、トリガーを持つテーブルのキャッシュ使用状況を追跡します。Table_open_cache_triggers_hitsは、トリガーを持つオープンテーブルのキャッシュヒット数を提供します。Table_open_cache_triggers_missesは、トリガーを持つオープンテーブルのキャッシュミス数を示します。Table_open_cache_triggers_overflowsは、トリガーを持つオープンテーブルのキャッシュオーバーフロー数を提供します。
    さらに、トリガーエラーの静的バッファを、オンデマンドで割り当てられる可変サイズのバッファに置き換えることで、メモリ使用量も改善されます。
    また、この作業の一環として、SHOW CREATE TRIGGER(データの読み取りは行うが変更は行わない)は、トリガー本体がサーバーによって解析できない場合でも、全てのトリガーの完全な定義を表示するようになりました。
    詳細については、前述のサーバー変数の説明を参照してください。テーブル キャッシュに関する一般的な情報については、How MySQL Opens and Closes Tablesを参照してください。
    (バグ #44625、バグ #86821、バグ #11753220、バグ #26366333、WL #16455)

ベクトルデータ型

  • STRING_TO_VECTOR()関数では、VECTOR引数の文字列表現で末尾の空白文字が許可されるようになりました。パーサーは、数値の後、角括弧の前、角括弧の後、またはこれらの組み合わせにある値の空白文字をトリミングします。以前はサポートされていなかったが、現在は許可されている値の例をいくつか次に示します:
    • "[1 ,2]"
    • "[1,2 ]"
    • " [1,2]"
    • "[1,2] "

    (バグ #37009633)

追加または変更された機能

  • 重要な変更; InnoDB: 論理プロセッサが32個未満のシステムでは、innodb_log_writer_threadsのデフォルト値が現在はOFFになりました。(WL #16396)
  • 重要な変更: OpenSSLライブラリがバンドルされているプラットフォームでは、MySQL ServerのリンクされたOpenSSLライブラリがバージョン 3.0.15に更新されました。詳細については、OpenSSL 3.0 Series Release Notes and OpenSSL Security Advisory [3rd September 2024]を参照してください。(バグ #37021075)
  • パフォーマンス; レプリケーション: バイナリログトランザクションの依存関係の追跡に使用されるデータ構造がTreeからankerl::unordered_dense::mapに変更されました。これにより、使用するスペースが約60%削減され、依存関係の追跡パフォーマンスが向上します。 (バグ #37008442)
  • グループ レプリケーション: 次の場合に新しいINFOレベルのログメッセージを追加しました:
    • 全てのノードでアクションが開始された時
    • アクションの完了を待機している間にメッセージの送信がブロックされた時
    • メッセージが受信され、内部メッセージカウンターが減分された時

    (バグ #32929873)
    参照: バグ #32762677も参照してください。

  • 出力の一貫性を保つため、explain_json_format_version=2の場合にEXPLAIN FORMAT=JSONによってlookup_conditionに表示される条件の= 記号の前後にスペースが追加されました。また、EXPLAIN FORMAT=TREEを使用する場合に操作に表示されるものにもスペースが追加されました。(バグ #36825515)
  • EXPLAIN FORMAT=TREEからの出力には、使用されているセミ結合戦略に関する情報が含まれるようになりました(ある場合)。 (バグ #36773414)
  • サーバーの起動時に、コマンドラインまたは設定ファイルからperformance-schema-meterパラメータを使用してテレメトリメーターを有効または無効にできるようになりました。
    Server Metersを参照してください。(バグ #36698082)
  • explain_json_format_versionが2に設定されている場合、MRRがMRRおよびインデックス範囲スキャンアクセスパスに使用される度に、EXPLAIN FORMAT=JSON出力に"multi_range_read": trueが追加されました。さらに、MRRを使用したインデックス範囲スキャンのEXPLAIN FORMAT=TREE出力のオペレーションフィールドに(Multi-Range Read)が表示されるようになりました。(バグ #36614948)
  • mysqlクライアントに--system-commandオプションが追加されました。このオプションは、システムクライアントコマンドを有効または無効にします。
    このオプションはデフォルトで無効になっています。つまり、システムコマンドはエラーで拒否されます。有効にするためには、--system-command=ONを使用します。 (バグ #36377685、WL #16482)
    参照: バグ #36248967も参照してください。
  • このリリースでは、メモリ内からディスクへの内部一時テーブル変換を追跡するための次の2つのステータス変数を実装しています:
    • TempTable_count_hit_max_ramは、TempTableストレージエンジンでtemptable_max_ram制限に達したためにメモリ内からディスクテーブルに変換された回数をカウントします。これはグローバルステータス変数のみです。
    • Count_hit_tmp_table_sizeは、TempTableストレージエンジンでtmp_table_size制限に達したため、または、MEMORYストレージエンジンでtmp_table_sizeとmax_heap_table_sizeの小さい方の値に達したために、メモリ内からディスクに変換された回数をカウントします。これはグローバルステータス変数とセッションステータス変数の両方です。

    (WL #16377)

  • TOTAL_ROW_VERSIONSの最大値が64から255に変更されました。この値は、INSTANT ALGORITHMを使用してADD COLUMNおよびDROP COLUMN操作を実行すると増加します。(WL #16369)
  • MySQLのOpenTelemetry Loggingを使用すると、分析のために、MySQLサーバーからOpenTelemetryバックエンドにテレメトリログをエクスポートできます。この機能は、次の方法で実装されています:
    • テレメトリロギングコンポーネント: (MySQL Enterprise EditionおよびMySQL HeatWaveのみ) サーバーからインストルメントされたログイベントを収集し、OpenTelemetryのOTLP形式でフォーマットして、ログを外部プロセスにエクスポートします。このプロセスは、OpenTelemetryコレクターまたはその他のOpenTelemtry互換バックエンドにすることができます。複数のバックエンドにエクスポートしたい場合は、OpenTelemetryコレクターを使用する必要があります。
      Installing OpenTelemetry Supportを参照してください。
    • テレメトリロギングインターフェース: (MySQL Community Server、Enterprise Edition、MySQL HeatWave) 独自のOpenTelemetry Loggingコンポーネントを定義して統合できるAPI。このインターフェースを使用すると、使用可能なロギングインストルメンテーションを検出し、ロガーを有効にし、レコードを生成し、関連するトレースコンテキストを抽出できます。
      インターフェースはロギングを提供しません。ロギングを提供するためには、MySQL Enterprise Edition、MySQL HeatWaveを使用するか、独自のコンポーネントを開発する必要があります。
      インターフェースとサンプルコンポーネントコードの詳細については、MySQL Server Doxygen DocumentationのServer telemetry logs serviceセクションを参照してください。

    (WL #15201、WL #15202)

  • global_connection_memory_trackingが有効な場合にクエリによるメモリ使用量を追跡するために使用する、次のサーバーシステム変数とステータス変数を追加しました。ここに示すリストの最初の2つの変数はグローバルに適用され、次の2つは個々のユーザー接続に適用されます:
    • global_connection_memory_status_limit: このシステム変数は、サーバーへの全てのユーザー接続で消費できるメモリの最大合計量を決定します。全てのクエリで使用されるメモリの合計量がこの量を超えると、Count_hit_query_past_global_connection_memory_status_limitが増加します。
    • Count_hit_query_past_global_connection_memory_status_limit: このステータス変数は、任意の接続を使用するクエリによってメモリの合計消費量がglobal_connection_memory_limitを超えた回数を追跡します。これは、クエリによってメモリの合計消費量がglobal_connection_memory_limit未満からこの量を超える場合にのみ増加します。
    • connection_memory_status_limit: このシステム変数は、Count_hit_query_past_connection_memory_status_limitを増分する前に、特定のユーザー接続で消費できるメモリの最大量を決定します。
    • Count_hit_query_past_connection_memory_status_limit: このステータス変数は、現在の接続を使用するクエリによって合計メモリ消費量がconnection_memory_limitを超えた回数を追跡します。この変数は、接続内で実行されるクエリの場合、そのようなクエリによって合計メモリ消費量がconnection_memory_limit未満からこの量を超える場合にのみ増分されます。

    これらの変数は、設定を本番環境に導入する前にテストするためのものであり、connection_memory_limitを超えた場合のようにクエリが拒否されることはありません。(WL #16097)

主なバグ修正

  • パフォーマンス; InnoDB: MySQL 8.0.28でインラインとして定義されていたInnoDB内部のいくつかの関数は、MySQL 8.0.33ではインラインではなくなりました。これは、MySQL 8.0.30でInnoDBアダプティブハッシュインデックスを改善するために行われた改善に伴うリファクタリングが一因です。これは、InnoDBテーブルでの結合を使用するクエリに悪影響を及ぼしました。(バグ #111538、バグ #35531293)
    参照: この問題は、バグ #81814、バグ #16739204、バグ #23584861のリグレッションです。
  • InnoDB: DEBUG_SYNCを優先して、DEBUG_SYNC_C_IF_THDマクロを削除しました。 (バグ #36870544)
  • InnoDB: InnoDBでは、INSTANTアルゴリズムを使用してデフォルト値としてNULLに変更されたREDUNDANTテーブル列の更新が許可されませんでした。代わりに、MySQLが予期せず停止しました。(バグ #36840107)
  • InnoDB: BLOBと他のデータ型が混在するテーブルでの一括ロード操作のエラー処理が改善されました。以前は、エラータイプは空の文字列として報告されていました。(バグ #36764710)
  • InnoDB: log_files_truncateでredoログ容量が削減されると、まれにfile.end_lsnがlog_sys->write_lsnに等しくなり、将来のredoログ書き込みが許可されなくなることがありました。(バグ #36730830)
  • InnoDB: INSTANTアルゴリズムを使用して列が削除された後にDELETEまたはUPDATEステートメントを実行すると、MySQLサーバーが予期せず停止することがありました。 (バグ #36723117)
  • InnoDB: 照合順序は同じだがバイト数が異なるトークンでは、FTSインデックスの最適化が正しく機能しないことがあります。(バグ #36652127)
  • InnoDB: ログインデックスのサイズ計算で列順序の変更が考慮されるようになりました。(バグ #36526369)
    参照: この問題は、バグ #35183686のリグレッションです。
  • InnoDB: コンパイル時に最適化されないように、std::this_thread::sleep_for(std::chrono::seconds(0))の使用をstd::this_thread::yield()に置き換えました。(バグ #36522343)
  • InnoDB: データベースに、ユーザーが作成したFTS_DOC_ID列をプライマリキーとして、MySQL 5.7で作成されたフルテキストインデックスが含まれている場合、アップグレードプロセスが予期せず停止しました。
    (バグ #36496164)
  • InnoDB: 複数値の仮想列の範囲条件付きインデックスのオプティマイザーを無効にしました。(バグ #36341532)
  • InnoDB: パフォーマンススキーマのdata_locksテーブルとdata_lock_waitsテーブルを再設計して、クエリを実行する際にトランザクションまたはロックシステム上の排他的グローバルミューテックスを必要としないようにしました。以前はトランザクションを反復していましたが、現在はロックを保持するハッシュテーブルのバケットを反復して、アクティブに処理されているシャードのみをラッチします。これにより、速度とメモリの観点から反復ロジックの複雑さも改善され、これらのクエリがシステムの他の部分に与える影響が軽減されます。
    2つのバケットを訪問する間に一連の所有されているロックをコミット、開始、またはその他の方法で変更した場合、クエリ結果にトランザクションロックの不完全なリストが表示される可能性があることに注意してください。これは、2つの異なるトランザクションが異なる時点で表示される可能性があったにもかかわらず、常に個々のトランザクションによって保持されているロックの一貫したスナップショットを表示していた以前の動作とは異なります。言い換えると、新しいアプローチでは、競合するロックと待機中のロックが常に同じバケット内にあるため、それらを表示するために単一の待機キューの一貫したビューが提供され、古いアプローチではそれらのロックが他のトランザクションに属していたため、それらの一部が見逃される可能性がありました。古いアプローチでは、報告されたトランザクションによって保持されている他の全てのロックが常に表示されていましたが、競合している場合でも他のトランザクションのロックが表示されない可能性がありました。(バグ #36302624)
  • InnoDB: バルクローダーのメモリリークを修正しました。(バグ #35988311)
  • InnoDB: 冗長行形式 (MySQL 5.7.35より前で許可された) に対して幅が広すぎる列のインデックスを使用して作成されたテーブルの場合、インプレースアップグレードによってテーブルがサイレントにインポートされましたが、テーブルにアクセスできず、バックアップの作成に支障をきたしていました。現在は、無効なインデックスを使用する全ての操作は、インデックスが削除されるまでER_INDEX_CORRUPTで拒否されます。ER_IB_INDEX_PART_TOO_LONGエラーもエラーログに報告されます。(バグ #35869747)
    参考: バグ #34826861も参照してください。
  • InnoDB: テーブルが作成時とは異なるsql_modeでインポートされると、スキーマの不一致が発生する可能性がありました。これは、STRICTモードがテーブルのセカンダリインデックス内のnull可能列の数に影響するためです。現在は、テーブルスペースがインポートされた後にセカンダリインデックスツリーの破損もチェックされます。(バグ #35799038)
  • InnoDB: FTSインデックスを持つテーブルの場合、そのテーブルスペースが破棄されると、対応するFTSテーブルも削除されます。これらのテーブルをクリアする操作を実行すると、コードは、FTSインデックスがテーブルメタデータに存在する場合はFTSテーブルも存在するはずだと誤って想定していました。(バグ #35343458)
  • InnoDB: システムがFusionIOの異なるセクターサイズをサポートしているかどうかを確認する時に、初期化されていないバッファが一時ファイルに書き込まれていました。このチェックは、innodb_flush_methodがO_DIRECTまたはO_DIRECT_NO_FSYNCに設定されている場合に行われます。 (バグ #115229、バグ #36705034)
  • InnoDB: セカンダリインデックスを含むテーブル再構築操作では、MySQL 8.0.26と比較してInnoDB一時ファイルのファイル I/Oがより多く必要で、クエリのパフォーマンスが低下しました。(バグ #114465、バグ #36444172)
  • InnoDB: Alter_stageクラスの問題により、パフォーマンススキーマを有効にすると、並列インデックスビルダーを使用したインデックスの追加が大幅に遅くなりました。(バグ #113505、バグ #36163502)
  • InnoDB: 最近のオプティマイザーの変更をより適切に考慮するためにinnodb.parallel_read_kill関連のユニットテストを修正し、innodb.ddl_killユニットテストとそれに関連するマクロの使用を修正しました。
    (バグ #113002、バグ #115416、バグ #35992036、バグ #36764973)
    参考: バグ #112767も参照してください。
  • パーティショニング: ALTER TABLEは、パーティション分割されたテーブルでは必ずしも正しく動作しませんでした。(バグ #36677952)
  • グループレプリケーション: 特定の状況下では、プライマリホストでネットワークが短時間非アクティブになると、全てのセカンダリが予期せずシャットダウンします。(バグ #35642087)
    参照: バグ #32673639、バグ #34565855も参照してください。
  • グループレプリケーション: 報告されたスレッドによって集計されたメモリは、割り当てられたものから他のスレッドによって解放された全てのmemory/sql/Gtid_set::Interval_chunkを考慮に入れていなかったため、グループレプリケーションスレッド thread/group_rpl/THD_applier_module_receiverによるリソースの消費が不適切に増加し続けました。
    performance_schema.memory_summary_global_by_event_nameによって報告されたグローバルメモリは、この問題の影響を受けませんでした。 (バグ #34819861)
  • グループレプリケーション: xcom\network\xcom_network_provider_native_lib.ccから潜在的なメモリリークを削除しました。(バグ #115162、バグ #36673883)
  • サーバーは、スレッドプールプラグインと監査ログプラグインの両方で実行している場合、接続を正しく処理しないことがありました。(バグ #37039422)
  • Debianベースのシステム用のパッケージは、WITH_ZLIB=systemでビルドされ、デバッグビルドではMYSQL_MAINTAINER_MODEを無効にします。(バグ #37038213)
  • 商用ビルドにバンドルされているKerberosライブラリをバージョン 1.21.3に更新しました。詳細については、Kerberos 5 1.21.x Release Notesを参照してください。 (バグ #37034600)
  • SELECTリストでウィンドウ関数を使用するサブクエリの場合、EXISTS()変換は使用できません。つまり、そのようなサブクエリでは、使用される変換は常にマテリアライズですが、これはサブクエリがIN、ALL、ANY、またはSOMEのいずれかを使用する場合にのみ当てはまります。サブクエリのマテリアライズが強制されているかどうかのチェック (IsForcedMaterialization())は、クエリにINサブクエリがあり、そのWHERE句でウィンドウ関数を含むEXISTSサブクエリが使用されている場合に、trueを返しました。これは、INサブクエリに対してEXISTS戦略が既に選択されていたにもかかわらず、ウィンドウ関数を持つ最も内側のサブクエリが常にマテリアライズとしてその戦略を返したためです。その結果、このサブクエリがマテリアライズの対象とされた時に、一部のチェックが失敗しました。
    IsForcedMaterialization()に定量化された比較述語のチェックを追加して、ウィンドウ関数を含むサブクエリが調べられないようにすることで、これを修正します。 (バグ #37008930)
  • regexp::Regexp_facade::~Regexp_facade()のヒープ使用後の解放に関する警告を削除しました。(バグ #36867806)
  • EXCEPTとINTERSECTの組み合わせによっては、Item::convert_charset()でエラーが発生しました。(バグ #36838373)
  • テーブルスペースをダンプする際、mysqldumpはその出力内の特定のSQLステートメントを適切にエスケープしませんでした。さらに、ダンプでは、次の識別子がバックティックで囲まれるようになりました: LOGFILE GROUP、TABLESPACE、ENGINE。(バグ #36816986)
  • StoreLinkedImmutableStringFromTableBuffers()での不要なコピーが排除され、一部のハッシュ結合のパフォーマンスが5 ~ 10パーセント向上しました。 (バグ #36805260)
  • sql/sql_executor.ccの問題に対する以前の修正では、const_for_execution()ではなくconst_item()がチェックされていました。(バグ #36804785)
    参照: この問題は、バグ #34951115のリグレッションです。
  • OTLPエクスポーターに関連する問題を修正しました。(バグ #36792180、バグ #36783070)
  • Last_query_costを計算する際、オプティマイザーは必ずしも全てのサブクエリのコストを考慮しませんでした。(バグ #36790906)
  • IndexRangeScanIteratorを使用してインデックス範囲スキャンを実行する際、リファクタリング中にIndexRangeScanIterator::m_expected_rowsに使用されるデータ型がdoubleからbooleanに変更されたため、レコードバッファーが設定されませんでした。この意図しない変更は元に戻されました。
    さらに、レコードバッファがインデックス範囲スキャン用に有効になっている場合、これらのスキャンをカバーするために使用される多値インデックスで問題が発生しました。(これは、インデックスマージスキャンがカバーインデックススキャンを強制するため、インデックスマージスキャンの一部として使用される場合にのみ起こり得ます。) 問題の原因は、Field_typed_array::key_cmp()の実装では、インデックス式に生成された列の値が必要であり、この列は多値インデックスでは使用できないため、ストレージエンジンが、カバースキャン用にレコードバッファを埋める時に終了範囲条件を安全に評価できないことでした。これを修正するために、カバーインデックス範囲スキャンに多値インデックスが使用される場合は、レコードバッファを無効にするようになりました。(バグ #36775910)
    参照: バグ #36341532も参照してください。
  • 特定のトリガーとストアドプロシージャが正しく処理されませんでした。(バグ #36775910)
  • 外部テーブルを参照する時に発生する一部のエラーが正しく処理されませんでした。 (バグ #36758378)
  • ウィンドウ関数として使用されるCOUNT()の引数がGROUP BY式で、WITH ROLLUPが使用されている場合、COUNT()は0ではなくNULLを返しました。(バグ #36750571)
  • Debianでは、LTOビルドの互換性を高めるために、libmysqlclient.aのストリップを停止しました。(バグ #36737581)
  • 内部関数 my_convert_internal()は、意図した値ではなくポインタを返すことがありました。(バグ #36684463)
    参照: この問題は、バグ #36479091のリグレッションです。
  • サーバーコンポーネントのメモリの問題が解消されました。(バグ #36600205)
  • mysqlクライアントのメモリリークが修正されました。(バグ #36600203)
  • AES_ENCRYPT()関数が常に有効な結果を返しませんでした。(バグ #36593265)
  • 場合によっては、非常に多くの行と多数のテーブルを含む結合が正しく処理されませんでした。(バグ #36562979)
  • テーブル値コンストラクタの準備で、ORDER BY句の式に追加された非表示列の数を追跡しませんでした。これにより、解決プロセスの後半で問題が発生し、予期しないサーバー終了につながる可能性がありました。
    他のクエリブロックで行われるのと同じ方法で、テーブル値コンストラクタの非表示項目の数をカウントすることで、この問題を修正しました。(バグ #36560156)
    参考: この問題は、バグ #35785452のリグレッションです。
  • 同じトランザクションでFULLTEXTインデックスを追加したDROP INDEXを実行すると、予期しないサーバー終了が発生する場合がありました。(バグ #36559642)
  • アップグレード中のFTSインデックスの処理に関連する問題を修正しました。(バグ #36526587)
  • オプティマイザヒントの組み合わせによっては、正しく機能しないものがありました。(バグ #36492114)
  • 以前の問題の修正に続いて、GROUP BYの一部であり、SELECTリストに見つからないconst項目は、フィールドリストに非表示項目として追加されませんが、一時テーブルの作成中にROLLUP操作を含む式の置換をチェックする際には、この点が考慮されませんでした。フィールドリストに見つからない項目がconst項目であるかどうかをチェックし、そうである場合は、同じ項目を置換として使用することで、この問題を修正しました。 (バグ #36444257)
    参照: この問題は、バグ #34951115のリグレッションです。
  • データマスキング関数 gen_rnd_pan()およびmask_ssn()のテスト中に見つかったアサーションを削除しました。(バグ #36397869、バグ #36398272)
    参照: バグ #36398221も参照してください。
  • 条件プッシュダウンに関係する式に、外部参照でもある1つのビュー参照と1つのローカル参照がある場合、条件のクローン作成中に依存関係の一貫性チェックが失敗しました。
    アイテムツリーのプレフィックスとポストフィックスをトラバースすることで、この問題を解決します。プレフィックスをトラバースする時には、参照オブジェクトの基になる列の依存関係とコンテキスト情報を設定するために使用されるItem_refオブジェクトを設定します。ポストフィックスをトラバースする時には、このオブジェクトをクリアします。(バグ #36368181)
  • 一部のプリペアドステートメントが正しく再準備されませんでした。(バグ #36267792)
    参照: この問題は、バグ #34929930のリグレッションです。
  • FTS比較に関する問題を修正しました。
    (バグ #36210202)
  • RelWithDebInfoビルドは"-g1"フラグでコンパイルされなくなったため、使用可能なデバッグ情報と生成されるファイルサイズが増加しました。 (バグ #36111629)
    参照: バグ #33664929も参照してください。
  • サーバーが--skip-grant-tablesで実行された時の潜在的な誤動作を修正しました。(バグ #36043213)
  • 文字列をMYSQL_TIME構造体に変換する時に、日数が31以下であることを常に確認しませんでした。(バグ #35884337、バグ #36633426)
  • 結合のON条件で外部クエリブロックのテーブルからの列への参照に関する問題に対する以前の修正でのリグレッションを修正しました。(バグ #35854686)
    参照: この問題は、バグ #96946、バグ #30350696のリグレッションです。
  • まれに、外部キーを持つテーブルの作成を含むCREATE TABLEステートメントが正しく処理されない場合がありました。 (バグ #35553557)
  • SHOW INDEXと生成された列に関する問題を修正しました。(バグ #35497623)
  • インデックスマージプランを使用したクエリのテスト中に発見されたFEDERATEDストレージエンジンからのメモリリークを削除しました。(バグ #35362984)
  • 場合によっては、プリペアドステートメントのテーブルDDLが正しく処理されませんでした。(バグ #35221658)
  • 集計関数を含むストアドルーチンを呼び出し、その結果がルーチンのローカル変数に格納されるステートメントによって、sql/sql_lex.hでアサートが発生しました。(バグ #35102083)
  • UNIONでは、関連するSELECTステートメントの1つは、ORDER BY句内の列を、この列がそのSELECTによってアクセスされるものの中に含まれていない場合、参照することがありました。(バグ #35058815)
  • フルテキストインデックスとinnodb_optimize_fulltext_onlyが有効になっている同じテーブルで2つの同時OPTIMIZE TABLEステートメントを実行すると、サーバーが終了することがありました。(バグ #34929814)
  • ON句の一部として不可能な条件を含む左結合は、MySQL 5.7のように最適化されなかったため、それ以降のバージョンでは、不可能な条件がある場合よりも不可能な条件がない場合の方がクエリの実行速度が速くなりました。不可能な条件を含むこのようなクエリの例は、SELECT * FROM t1 JOIN t2 ON t1.c1=t2.c1 AND 1=2です。(バグ #34668756)
  • XML関数 ExtractValue()は、アクセント付き文字を含む引数を正しく処理しませんでした。(バグ #117778、バグ #36236440)
  • NOTは、< ALL、> ANYなどの定量比較では正しく機能しましたが、NOT NOTは機能しませんでした。(バグ #115962、バグ #37004689)
  • storage/perfschema/table_host.hの誤ったコメントを修正しました。
    (バグ #115844、バグ #36954266)
  • LATERALサブクエリを含むGROUP BYクエリで、誤った重複列エラーが発生しました。 (バグ #115696、バグ #36885503)
  • SLES 15のターゲットプラットフォームをopenSUSE 15.5から15.6に変更しました。これは、GCC 12ではなくGCC 13を使用し、OpenSSL 1.1.xではなくシステムのOpenSSL 3.xに対してビルドすることを意味します。(バグ #115535、バグ #36934913)
  • MySQL 8.0 mysql-community-libs-compat RPMをビルドできるように、EL8およびEL9ビルド仕様ファイルにgcc-toolset-12を追加しました。
    (バグ #115484、バグ #36796229)
  • Debianパッケージの説明の誤字を修正しました。
    (バグ #115363、バグ #36749142)
  • MySQLソースコードドキュメントのバイナリ結果セットの説明にMYSQL_TYPE_JSONがありませんでした。
    (バグ #115360、バグ #36740656)
  • 特定の複雑なUNIONクエリによってデバッグビルドでアサーションがトリガーされ、リリースビルドがハングしました。(バグ #115346、バグ #36739383)
  • SELECT CASE WHEN 1 THEN NOW() ELSE x.x END FROM (SELECT NULL) x(x)のようなクエリによってアサーションが発生しました。これは、生成された列の説明で、小数秒の精度が31という無効な精度値である時間型が使用されていたために発生しました。無効な精度は、型の集計から発生しました。CASE式の基になる項目の1つがNULL式で、その小数精度が31に等しく、精度が未定義であることを意味します。
    この問題は、NULLを生成する式から型を集計しないことで修正されました。
    この問題は、数値および文字列の引数では発生しませんでした。これらは、時間型に直接集計できないためです。
    この問題は、MySQL 8.0またはMySQL 8.4リリースバイナリでは発生しませんでした。(バグ #115233、バグ #36705061)
  • 通常はインデックス範囲スキャンを使用するクエリが、プリペアドステートメントとして実行された時に、効率の低いインデックス検索を使用しました。(バグ #115227、バグ #36705030)
  • 単一ネストされた派生テーブルが、マテリアライズされるのではなく、誤ってマージされました。(バグ #115215、バグ #36695371)
  • ROLLUPクエリは、サマリーNULLを考慮していませんでした。次のステートメントについて考えてみましょう:
    CREATE TABLE t(a INT);

    SELECT a, COUNT(*) FROM t GROUP BY a WITH ROLLUP;

    SQL標準によれば、SELECTステートメントは結果 (0, NULL)を生成するUNIONクエリと同等である必要があります。これは、結果セットが空であっても、ROLLUPは全てのGROUP BY式にNULLエントリを含む単一のグループ化行と、全ての集計の総計(この場合はCOUNT(*)に0)を返すはずであるのに、MySQLは代わりに空のセットを返したためです。
    このような場合にグループ化行を返すようになりました。(バグ #114638、バグ #36514339)

  • 派生テーブルでDISTINCTとORDER BYを使用すると、誤った結果が返されることがありました。(バグ #114589、バグ #36496160)
  • AT TIME ZONE句を含むCASTを含むCHECK制約を持つCREATE TABLEステートメントが、紛らわしいエラー Missing time zone functionで失敗しました。これは、CHECK制約のテキストが内部で再生成され、その後誤って解釈されたためです。
    正しいCHECK制約テキストが、CREATE TABLE定義の残りの部分とともにデータディクショナリに保存されるようにすることで、この問題を修正しました。(バグ #114404、バグ #36423829)
  • prefer_ordering_index=offの場合、参照キーのないクエリは、ソートを回避できるはずであるにも関わらず、テーブル全体のスキャンとソートに戻りました。
    (バグ #113699、バグ #36213938)
  • サブクエリの結合で、それ自体がHAVING句とFROM句でサブクエリを使用したため、sql/item.hでアサートが発生しました。
    サブクエリが削除可能な述語の一部であると判断された後、HAVING句を含むスカラーサブクエリを削除した時に、問題が発生しました。HAVING句は、Item::split_sum_func2()によって追加されたItem_aggregate_refを通じて間接的にアクセスされる集計オブジェクト(Item_sum_min)を指していました。サブクエリを削除すると、Item_aggregate_refの参照カウントは増加されることなく減少しました。
    オブジェクトの初回作成時に参照カウントを増加することで、この問題を修正しました。 (バグ #112615、バグ #35877063)
    参照: バグ #111492、バグ #35517962も参照してください。
  • CASE (WHEN TRUE AND EXISTS (サブクエリ))を使用したクエリは、CASE (EXISTS (サブクエリ))を使用した場合と同じ結果を返さないことがありました。(バグ #112557、バグ #35855294)
    参照: この問題は、バグ #32644631、バグ #32802301のリグレッションです。
  • 派生テーブルから選択され、UNION操作によって異なる文字セットを持つ列と一致する文字列リテラル値によって、ER_CANT_AGGREGATE_2COLLATIONS (Illegal mix of collations...)が発生することがありました。 (バグ #108627、バグ #34646522)
    参照: バグ #36812010、バグ #36844420も参照してください。
  • 複数値インデックスを使用して大なり (>) または小なり (<) の比較を使用するクエリは、同じインデックスで等号 (=) の比較を使用する同じクエリよりも実行速度がはるかに遅くなりました。(バグ #104897、バグ #33334911)
  • 負荷の高いインスタンスで SELECT * FROM sys.innodb_lock_waits; を実行すると、サーバーのパフォーマンスに影響しました。
    このリリースでは、SELECT * FROM sys.innodb_lock_waits; は、待機ごとに全てのロックを2回スキャンするのではなく、待機ごとに2つのロックのみを取得します。
    この修正の一環として、DATA_LOCKSとDATA_LOCK_WAITSにプライマリキーが追加されました。 (バグ #100537、バグ #31763497)

全ての変更点やバグ修正については、以下のページをご覧ください。
MySQL 9.1.0 リリースノート(MySQLウェブサイト):
https://dev.mysql.com/doc/relnotes/mysql/9.1/en/news-9-1-0.html


MySQL Editions

MySQL Editions
MySQLのサブスクリプションは、24時間365日体制でお客様をサポートいたします。さらに MySQL Enterprise Edition では、データベース管理者支援ツール MySQL Enterprise Monitor やバックアップツール MySQL Enterprise Backup をご利用いただけます。