主な変更点
■ 追加・変更された機能
● クライアント受信スレッドは、高負荷の場合にのみ有効になりました。「高負荷」を判断する基準は、ポーリングキュー(受信キュー)で待機しているクライアントの数がmin_active_clients_recv_thread(デフォルト:8)より大きいことでした。 着信レプリケーションイベントを処理するバイナリログインジェクタースレッドなどの単一クライアントでも同様にそれ自体で高負荷が発生する可能性があるため、これは高負荷を判断するために不十分なメトリックでした。同じことがプッシュ結合クエリにも当てはまりました(着信TRANSID_AI信号の非常に大きなバッチが受信されます)。 受信スレッドを変更して、完全に非アクティブ化されるのではなく、ポーリングキューでスリープするようになりました。これにより、クライアントに高負荷がかかっていない場合でも、着信信号の処理に常に使用できるようになりました。(バグ #33752914)
■ バグ修正
● 重要な変更:--ndb-batch-sizeサーバーオプションでサポートされる最大値が31536000から2147483648(2 GB)に増加しました。(バグ #21040523) ● パフォーマンス:同じトランザクションで非常に多くの行を空のテーブルまたは小さなテーブルに挿入すると、行が挿入される速度は最初の速度の50%未満に急速に低下しました。その後、全てのCPU時間の約50%がDbacc::getElement()に費やされたことが判明し、根本的な原因は、DBACCによって要素を格納するために使用される構造のサイズを変更し、同じトランザクションにさらに行を挿入すると拡大し、コミット後に縮小するタイミングであると特定されました。 要素の挿入または削除の直後にサイズを変更する必要があるかどうかを確認することで、この問題を修正します。これは、その後の挿入の拒否も処理します。(バグ #33803487) 参照:バグ #33803541。 ● パフォーマンス:内部関数 computeXorChecksum()が実装され、コンパイラが最適なコードを生成するのを支援するために細心の注意が払われましたが、過剰なCPUリソースを消費し、より単純な実装ほどパフォーマンスが良くないことがわかりました。この関数は、配列全体でXOR結果を合計するループで再実装されました。これにより、GCCコンパイラとClangコンパイラの両方で最適化が向上するようです。(バグ #33757412) ● 場合によっては、NDBはデータノードの全てのノードIDを正しく検証しませんでした。(バグ #33896409) ● 場合によっては、配列インデックスが正しく処理されませんでした。(バグ #33896389、バグ #33896399、バグ #33916134) ● 文字以外のデータのNdbEventBufferハッシュキー生成では、同じ256個のハッシュキーが再利用されました。さらに、ハッシュキーを計算する時に、長さがゼロの文字列は無視されました。(バグ #33783274) ● EventBytesRecvdCountイベントカウンターに基づくNDB API統計の収集では、過度のオーバーヘッドが発生しました。現在、このカウンターは、別の関数呼び出しで全てのイベントバッファデータをトラバースするのではなく、イベントバッファがいっぱいになると集計される値を使用して更新されます。 (バグ #33778923) ● レシーバースレッドIDは、内部メソッド TransporterFacade::raise_thread_prio()でハードコーディングされているため、送信スレッドから呼び出された場合でも、レシーバースレッドの優先度を上げるように常に機能します。(バグ #33752983) ● ndbdの非推奨の-rオプションが削除されました。さらに、この変更により、ndbd --helpの出力から無関係なテキストも削除されます。(バグ #33362935) 参照:バグ #31565810。 ● ndb_importツールは、テーブルに明示的なプライマリキーがない場合にNDBによって定義された非表示のプライマリキーのみを処理しました。これにより、同じ行がLOAD DATA INFILEによって受け入れられた場合でも、自動インクリメントのプライマリキー列にNULLを含む行を挿入するとエラーが発生しました。 自動インクリメントのプライマリキー列にNULLのインスタンスが1つ以上あるテーブルをインポートするためのサポートを追加することで、これを修正します。これには、テーブルに自動インクリメント列が1つしかないことのチェックが含まれます。この列がNULL可能である場合、ndb_importによってNOT NULLとして再定義され、この列でNULLが発生すると、行をNDBに挿入する前に、生成された自動インクリメント値に置き換えられます。(バグ #30799495) ● ノード障害が検出されると、このノードと同じノードグループ内の存続しているノードは、バッファリングされた変更データをイベントサブスクライバに再送信しようとします。未処理のエポック配信がなかった場合、つまり、未確認のGCIのリストが空の場合、存続しているノードは、このリストが空になることはないという誤った仮定をしました。(バグ #30509416)
MySQL NDB Cluster 7.6.22リリースノート(MySQLウェブサイト): https://dev.mysql.com/doc/relnotes/mysql-cluster/7.6/en/news-7-6-22.html
MySQL Editions
MySQLのサブスクリプションは、24時間365日体制でお客様をサポートいたします。さらに MySQL Enterprise Edition では、データベース管理者支援ツール MySQL Enterprise Monitor やバックアップツール MySQL Enterprise Backup をご利用いただけます。