2023.07.28

MySQL

MySQL NDB Cluster 7.6.27 (5.7.43-ndb-7.6.27) GA版(リリース日:2023年7月18日)

追加・変更された機能

  • 重要な変更; NDB Cluster API: NdbRecordインターフェイスでは、プライマリキー値を同様に変更できます。つまり、エラーを発生させることなく、プライマリキーの値をその現在の値、または使用されている照合規則に従って等しいと比較される値に更新できます。NdbRecord自体は更新を阻止しようとしません。代わりに、データノードはプライマリキーが等しくない値に更新されているかどうかを確認し、この場合は”Error 897: Update attempt of primary key via ndbcluster internal api”で更新を拒否します。
    以前は、NdbRecord以外のメカニズムを使用してプライマリキー値を更新しようとすると、NDB APIは既存の値と同じ値を設定したとしても、エラー 4202 Set value on tuple key attribute is not allowedを返しました。このリリースでは、他の手段で更新を実行する時のチェックは、既にNdbRecordによって行われているように、データノードに渡されるようになりました。
    この変更は、NdbOperation::setValue()、NdbInterpretedCode::write_attr()、および列の値を設定するこれら2つのクラスの他のメソッド(NdbOperationメソッド incValue()、subValue()、NdbInterpretedCodeメソッド add_val()、sub_val()などを含む)、および、NdbOperationインターフェイスのOperationOptions::OO_SETVALUE拡張機能を使用したプライマリキーの更新の実行に適用されます。(バグ #35106292)
  • NDB 7.6はOpenSSL 3.0をサポートするように構築されています。(WL #15614)

主なバグ修正

  • NOWAITを使用したバックアップは、データノードの再起動後に開始されませんでした。(バグ #35389533)
  • APIノードの接続(または再接続)を処理する時に、データノードはリクエストの送信が速すぎることが許可されたことをAPIノードに通知する可能性があり、その結果、リクエストが配信されず、その後、APIノードでタイムアウトになり、”Error 4008 Receive from Ndb failed”または”Error 4012 Request ndbd time-out, maybe due to high load or communication problems”などのエラーが発生します。 (バグ #35387076)
  • 警告出力で次の改善が行われました:
    • ローカルチェックポイント(LCP)の経過時間に加えて、何も進行せずに許容される最大時間も出力されるようになりました。
    • テーブル IDとフラグメント IDは未定義であるため、LCPがWAIT_END_LCP状態に達した場合には関係がなく、その時点では出力されなくなります。
    • 上限に達すると、同じ情報が警告情報とクラッシュ情報として2回表示されます。

    (バグ #35376705)

  • コミットされていないトランザクションに対して遅延トリガーが保留されたままになっている場合、後続のトランザクションは遅延トリガーの不必要なチェックを実行してリソースを浪費する可能性がありました。後者のトランザクションにコミット可能な操作がない場合、これによりデータノードが計画外にシャットダウンされる可能性がありました。
    これは、DBTCが使用する管理オブジェクトの制御状態が再初期化されない場合があるためでした。
    この問題は、そのようなオブジェクトが使用される前に状態の初期化が実行されるようにすることで修正されます。(バグ #35256375)
  • 非常に大きく重複する可能性のあるIN()リストとNOT IN()リストを特徴とするクエリ間のプッシュダウン結合は、SQLノードが予期せず終了する原因となりました。この問題を引き起こすためには、1つ以上のIN()(またはNOT IN())演算子が2500を超える引数を必要としました。(バグ #35185670、バグ #35293781)
  • サイズ MAX_KEY_SIZEのキーに割り当てられたバッファのサイズが不十分でした。(バグ #35155005)
  • ndbclusterハンドラーによるpush_warning_printf()への呼び出しの一部で重大度レベル ERRORが使用され、デバッグビルドでアサーションが発生しました。この修正により、そのような全ての呼び出しが代わりに重大度 WARNINGを使用するように変更されます。(バグ #35092279)
  • データノードとAPIまたは管理ノード間の接続が確立されているが、他のノードからデータノードへの通信のみが利用可能な場合、データノードはハートビートを受信しているため、他のノードを”live”とみなしますが、他のノードはハートビートを監視しておらず、そのため、接続に関する問題は報告されませんでした。これは、データノードが他のノードが(完全に)接続されていると誤って想定したことを意味します。
    この問題は、APIまたは管理ノード側で、最初のREGCONF信号を受信する前であってもデータノードの活性度の監視を開始することで解決します。もう一方のノードは100ミリ秒ごとにREGREQ信号を送信し、60秒以内にデータノードからREGCONFの応答を受信しなかった場合にのみ、ノードは切断されたと報告されます。(バグ #35031303)
  • ログには、DICT: index index number stats auto-update requestedの形式を持つ大量のメッセージが含まれており、更新を要求するDBTUXからレポートを受信する度にDBDICTブロックによって記録されました。これらのリクエストはテーブルへの書き込み中に立て続けに発生することが多く、この場合、同じインデックスに対する更新リクエストが重複してログに記録されている可能性があります。
    現在は、DBDICTが実際に計算を実行する直前に、そのようなメッセージをログに記録します。これにより、重複したメッセージが削除され、異なるインデックスに関連するメッセージが配置されます。この修正により追加のデバッグログメッセージも導入され、行われた決定と実行された計算の可視性が向上します。(バグ #34760437)
  • ローカルチェックポイント(LCP)は、終了フェーズ中にグローバルチェックポイント(GCP)が終了するのを一定時間待機するため、全てのノードが開始される前であっても実行されることがありました。
    さらに、GCPコーディネーターによって計算されたこの境界は、コーディネーター自体でのみ、またノードが開始された時(開始フェーズ 101)にのみ使用可能でした。
    これら2つの問題は、開始フェーズ 4の早い段階で境界を計算することで修正されます。GCP参加者も、ノードがクラスターに参加またはクラスターから離脱する度に境界を計算します。(バグ #32528899)

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


MySQL Editions

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