22.2.12での変更点

Oracle NoSQL Databaseリリース22.2.12 Enterprise Editionでは次の変更が行われました。

新機能

  1. レプリケーション・ノード・パラメータenableErasureが、デフォルトでtrueに設定されるようになりました。つまり、不要データ消去がデフォルトで有効になるようになったということです。

    enableErasureがtrueに設定されている場合は、これにより、基礎となるBDB JEストレージ・レイヤーの消去機能が有効になります。消去では、対応するレコードをゼロにして、ストレージ・レイヤーから廃止されたデータを定期的に消去します。不要データとは、置換されたか期限切れであるために問合せまたはスキャンで返されることがなくなったがまだデータベースに存在するデータです。表およびキー/値データのみが消去されることに注意してください。表メタデータは消去の対象ではありません。

    レプリケーション・ノード・パラメータerasurePeriodでは、1回の完全消去のデータ処理の期間を指定します。消去はこの値に基づいて調整され、パフォーマンスへの影響が最小限に抑えられます。デフォルトでは、"6 DAYS"に設定されています。

    [KVSTORE-1483]

バグとパフォーマンスの修正

  1. 次の表作成または表削除リクエストを処理する前にXRegionサービスが最長1時間ブロックされることがあるという不具合を修正しました。

    [KVSTORE-1595]

  2. 2つのシャードの間でパーティションが前後に移動された場合に拡張度操作に失敗することがあるという不具合を修正しました。

    [KVSTORE-1547]

  3. リモート・リージョンで表が削除されて再作成された場合に複数リージョン表が正しく初期化されないことがあるという不具合を修正しました。

    [KVSTORE-1535]

  4. XRegionサービスの統計に95%および99%パーセンタイルのレイテンシ値を追加しました。

    [KVSTORE-1404]

  5. 負荷が高い場合に複数リージョン表の作成、変更および削除のリクエストがXRegionサービス内でブロックされることがあるという、複数リージョン表に関する不具合を修正しました。

    [KVSTORE-1559]

  6. リモート・リージョンからのストリーム操作はXRegionサービスによってローカル・リージョンに書き込まれると失われることがあるという、複数リージョン表に関する不具合を修正しました。

    [KVSTORE-1542]

  7. 21.1リリースで修正されたがそれ以前には報告されていない不具合によって、ユーザーが認識できる形で影響が現れる可能性があることが判明しました。それより前のリリースでは、複数リージョン表のチェックポイント処理により、レプリケーション中に一部のデータが失われる場合があります。つまり、あるリージョンからの書込みがリモート・リージョンにレプリケートされない場合があります。

    [KVSTORE-772]

  8. 21.1リリースで修正されたがそれ以前には報告されていない不具合によって、ユーザーが認識できる形で影響が現れる可能性があることが判明しました。それより前のリリースでは、複数リージョン表のチェックポイント処理により、データ・レプリケーションでデッドロックが発生する場合があります。この問題が発生した場合は、あるリージョン内の複数リージョン表に書き込むと、リモート・リージョンへのレプリケーションが停止され、アクティブでないことが原因でリモート・リージョンからのネットワーク接続が切断される可能性があります。

    [KVSTORE-1525]

  9. 問合せを実行するアプリケーションのダイレクトJavaドライバでスレッド・デッドロックが起こる可能性があるという問題を修正しました。この問題はhttpproxy(問合せにダイレクトJavaドライバが使用される)で確認されました。ただし、それ固有の問題ではありません。結果として、アプリケーションがハングします。
    jstackユーティリティを使用してアプリケーションのスレッド・ダンプを作成すると、デッドロックの2つの側面を表す2つの特性のスタック・トレースが表示されます。
    "nioEventLoopGroup-3-11" #70 prio=10 os_prio=0 cpu=66.97ms elapsed=5790.89s tid=0x00007f6fdc017800 nid=0x9e in Object.wait()  [0x00007f6fecbf3000]
       java.lang.Thread.State: RUNNABLE
    	at oracle.kv.impl.api.table.FieldDefImpl.<clinit>(FieldDefImpl.java:90)
    	at oracle.kv.impl.query.types.TypeManager.<clinit>(TypeManager.java:378)
    	at oracle.kv.impl.query.compiler.FuncAndOr.<init>(FuncAndOr.java:38)
    	at oracle.kv.impl.query.compiler.FunctionLib.<init>(FunctionLib.java:169)
    	at oracle.kv.impl.query.compiler.CompilerAPI.<clinit>(CompilerAPI.java:41)
    	at oracle.nosql.proxy.sc.TableUtils.getCallbackInfo(TableUtils.java:567)
    	at oracle.nosql.proxy.DataService.handlePrepare(DataService.java:2032)
    	at oracle.nosql.proxy.DataService$$Lambda$354/0x0000000800551840.handle(Unknown Source)
    	at oracle.nosql.proxy.DataService.handleRequestWithContext(DataService.java:664)
    	at oracle.nosql.proxy.DataService.handleRequestInternal(DataService.java:451)
    	at oracle.nosql.proxy.DataService.handleRequest(DataService.java:424)
    	at oracle.nosql.proxy.DataService.handleRequest(DataService.java:399)
    	at oracle.nosql.proxy.DataService.handleRequest(DataService.java:355)
    および:
    "nioEventLoopGroup-3-9" #66 prio=10 os_prio=0 cpu=124.03ms elapsed=5791.14s tid=0x00007f6fdc015800 nid=0x98 in Object.wait()  [0x00007f7163aef000]
       java.lang.Thread.State: RUNNABLE
    	at oracle.kv.impl.api.table.FieldDefSerialization.readTimestamp(FieldDefSerialization.java:433)
    	at oracle.kv.impl.api.table.FieldDefSerialization.readFieldDef(FieldDefSerialization.java:346)
    	at oracle.kv.impl.api.table.FieldDefSerialization.readFieldDef(FieldDefSerialization.java:261)
    	at oracle.kv.impl.api.table.FieldDefSerialization.readRecord(FieldDefSerialization.java:380)
    	at oracle.kv.impl.api.table.FieldDefSerialization.readFieldDef(FieldDefSerialization.java:348)
    	at oracle.kv.impl.api.table.FieldDefSerialization.readFieldDef(FieldDefSerialization.java:261)
    	at oracle.kv.impl.query.runtime.PlanIter.deserializeFieldDef(PlanIter.java:1184)
    	at oracle.kv.impl.query.runtime.ReceiveIter.<init>(ReceiveIter.java:367)
    	at oracle.kv.impl.query.runtime.PlanIter.deserializeIter(PlanIter.java:876)
    	at oracle.kv.impl.api.query.PreparedStatementImpl.<init>(PreparedStatementImpl.java:550)
    	at oracle.nosql.proxy.DataServiceHandler.deserializePreparedQuery(DataServiceHandler.java:810)
    	at oracle.nosql.proxy.DataService.deserializePreparedQuery(DataService.java:2181)
    	at oracle.nosql.proxy.DataService.handleQuery(DataService.java:1661)
    	at oracle.nosql.proxy.DataService$$Lambda$353/0x0000000800552440.handle(Unknown Source)
    	at oracle.nosql.proxy.DataService.handleRequestWithContext(DataService.java:664)
    	at oracle.nosql.proxy.DataService.handleRequestInternal(DataService.java:451)
    	at oracle.nosql.proxy.DataService.handleRequest(DataService.java:424)

    [KVSTORE-1484]

  10. [Ctrl]を押しながら[C]を押すか、[Ctrl]を押しながら[D]を押すことで、SQLシェルで実行されている問合せのページ区切りでの出力を終了するとNullPointerExceptionが発生する、という不具合を修正しました。

    [KVSTORE-1521]

  11. securityconfig merge-trustユーティリティをコールしてPKCS12形式のJavaキーストアがあるセキュリティ構成をJKS形式のJavaキーストアがある構成にマージした後にJava 8を使用するとストレージ・ノードを起動できなくなるという問題を修正しました。startコマンドが失敗し、次のメッセージが表示されます。
    Failed to start SNA: Error contructing RMISocketPolicy using transport class for transport client

    [KVSTORE-1594]

  12. 表説明で誤ってJSONのMRCounterフィールドがNULL値可能と示されるという不具合を修正しました。ユーザーは必ずJSONのMRCounterの値を設定する必要があります。

    [KVSTORE-1456]

  13. JSONのMRCounterを含む子表を作成しようとすると次のエラー・メッセージで失敗するという不具合を修正しました。
    Error: Error found when creating the table: Only multi-region tables support MR_counters.

    [KVSTORE-1458]

  14. KVStore.executeSyncの実装を、そのスレッド使用量を減らすために、非同期ネットワーク操作が使用されるように変更しました。

    [KVSTORE-1072]

ユーティリティの変更点

  1. SQLシェルにshow ddl <table>コマンドを追加しました。この新しいコマンドでは、表とその索引(存在する場合)のDDLが返されます。

    [KVSTORE-1479]

  2. 非推奨のインポート・ユーティリティとエクスポート・ユーティリティ、およびそれに関連するjarファイル(kvtool.jar、kvmigrator.jar、migrator.jar)が削除され、使用できなくなりました。古いユーティリティは、独立したダウンロードであるスタンドアロン移行ユーティリティに置き換えられました。これは、一般的なOracle NoSQL Databaseダウンロード・ページで入手できます。

    [KVSTORE-1493]

  3. 回帰によっていくつかのHive問合せタイプで問合せ処理に影響があることが判明したため、その回帰を修正しました。この回帰を修正する前は、ジョブ・プロパティの構成時に、各問合せの状態が必ずリセットされていました。これによりBig Data SQL問合せ処理に関する問題に対処しましたが、最近、HiveおよびBig Data SQLでは様々なコード・パスが使用されるためジョブ・プロパティの構成時に問合せ状態をリセットすると一部のHive問合せで結果が正しくなくなる可能性があることが判明しました。この問題に対処するために、直近の問合せの状態が、次の問合せの問合せ処理の開始時にリセットされるようになりました。これにより、Big Data SQL問合せ処理に関する以前の問題と、Hiveに関するこの新しい問題の両方に対処しています。

    [KVSTORE-372]

  4. byte[]引数が無効である場合にVersion.fromByteArray()でIllegalArgumentExceptionがスローされるようになります。以前はFaultExceptionがスローされていました。

    [KVSTORE-1599]