20.2.16での変更点

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

新機能

  1. Hive/Big Data SQL統合メカニズムが変更され、データ型FieldDef.Type.JSON、FieldDef.Type.NUMBERおよびFieldDef.Type.TIMESTAMPの表フィールドの問合せをサポートするようになりました。この機能とともに、これらの新しい型のフィールドを使用した表の作成に役立つ新しいサンプル・コードも提供しています。

    [#25802]
  2. ストリームAPIおよびマルチリージョン表での存続時間(TTL)のサポート。ストリームAPIによってサブスクライバに提供されるRowsには、ソース・ストアからの操作のTTL有効期限が含まれるようになります。有効期限は、ストリームAPIが操作を受信した時刻ではなく、操作が実行されたソース・ストアの元のTTLから計算されることに注意してください。そのため、ストリームAPIが返す操作は、操作の有効期限を経過していた場合、すでに期限切れになっている可能性があります。マルチリージョン表の場合、各行のTTL有効期限は別のリージョンにレプリケートされるため、任意のリージョンのマルチリージョン表の行は、操作が実行されたリージョンからレプリケートされた有効期限で期限切れになります。

    マルチリージョン表にゼロ以外のTTL値の行を指定する場合は、その前に、すべてのリージョンのマルチリージョン・エージェントおよびストアをこのリリースにアップグレードすることをお薦めします。古いソフトウェア・バージョンを実行しているリージョンに行がレプリケートされると、有効期限が失われます。そのため、コピーされた行は期限切れにならなくなります。

    [#28165]
  3. JSON構成ファイルでXRegion Serviceエージェントのパラメータが構成可能になりました。このリリースでは、JSON構成ファイルに次の構成可能なパラメータとそのデフォルト値が追加されています。

    {
      "checkpointIntvSecs" : 300,
      "checkpointIntvOps" : 1048576
    }
    [#28152]
  4. 汎用のORDER BYおよびGROUP BYを実装しました。

    以前のリリースでは、ORDER BYおよびGROUP BYは、ORDER BY/GROUP BY式で行がソートされた索引がある場合にのみ可能でした。さらに、ORDER BYとGROUP BYの両方を問合せに含めることはできませんでした。今回のリリースでは、こうした制限が解除されています。たとえば、次の問合せは、2020年の月次売上を売上額順に返します。

    select f.xact.month, sum(f.xact.amount) as sales
        from Foo f
        where f.xact.year = 2020
        group by f.xact.month
        order by sum(f.xact.amount);

    汎用のORDER BYおよびGROUP BYは、ドライバ・メモリー内で完全な問合せ結果をマテリアライズする必要があるため、大量にドライバ・メモリーを消費する可能性があります。その一方、索引ベースのORDER BY/GROUP BYは、索引によって提供される行ソートを利用することで中間結果のマテリアライズとキャッシュを回避します。そのため、ORDER BY/GROUP BY問合せで使用するための適切な索引を作成することをお薦めします。たとえば、xact.yearとxact.monthの両方に索引がある場合、前述の問合せではその索引が使用され、GROUP BYは索引ベースの問合せになります。そのようなコンポジット索引がないかわりに、xact.yearとxact.monthに個別の2つの索引が存在する場合、前述の問合せではxact.yearの索引が使用され、GROUP BYは汎用の問合せになります。これは、一般に、ORDER BY/GROUP BY式を対象とする索引よりも、問合せ述語を対象とする索引が優先されるためです。

    汎用のORDER BY/GROUP BYの場合、アプリケーションでは、このような操作でドライバが消費できるメモリー量を(問合せレベルの実行オプションによって)指定でき、最大許容しきい値を超えたときには問合せによる例外が発生します。

    [#28202]
  5. SELECT DISTINCTを実装しました。

    DISTINCTキーワードがSELECT句でサポートされるようになりました。存在する場合は、問合せ結果セットから重複した結果が削除されます。汎用のORDER BYおよびGROUP BYと同様に、SELECT DISTINCTはドライバ・メモリーに完全な結果セットをキャッシュする必要があります。このような操作でドライバで消費できるメモリー量は、同じ実行オプションで制御します。

    [#28202]
  6. マルチリージョン表エージェントについて最新の統計を表示する、新しい管理CLIコマンドshow mrtable-agent-statisticsが導入されました。

    show mrtable-agent-statistics [-agent <agentID>]
    [-table <tableName>] [-merge-agents]

    引数を指定しない場合、このコマンドは各エージェントのすべての表の結合統計を表示します。-agentフラグでは、指定したエージェントIDのエージェントの統計を表示するように制限します。-tableフラグでは、指定した名前のマルチリージョン表の統計を表示するように制限します。-merge-agentsフラグでは、すべてのエージェントの統計を結合します。

    [#28155]
  7. キー分散統計は、デフォルトで有効になっています。

    キー分散統計の収集がデフォルトで有効になりました。統計を収集するかどうかは、rnStatisticsEnabledパラメータの設定によって制御できます。

    [KVSTORE-155]
  8. キー分散統計には、デフォルトでストレージ・サイズ情報が含まれます。

    キー分散統計の収集では、デフォルトで、関連する表エントリのストレージ・サイズに関する情報がデフォルトで収集されるようになりました。この情報を使用して、特定のパーティション内およびストア全体の表のストレージ・サイズを確認できます。

    新しいstatsIncludeStorageSizeパラメータでは、エントリのストレージ・サイズに関する情報をキー分散統計の収集に含めるかどうかを制御します。

    [KVSTORE-375]
  9. オンラインのセカンダリ・ゾーンのレプリケーション係数の削減をサポートするように、topology change-repfactor管理CLIコマンドが更新されました。このコマンドを使用して、セカンダリ・ゾーンの保持するレプリケーション係数の削減や、ゾーンの削除の準備ができるようになりました。セカンダリ・ゾーンを削除するには、topology change-repfactorを使用して、そのゾーンのレプリケーション係数をゼロに変更してから、コマンドplan remove-snplan remove-zoneを使用してストレージ・ノードを削除し、ゾーンの削除を完了します。ストレージ・ノードとレプリケーション・ノードが現在オンラインになっているゾーンのレプリケーション係数のみを減らすことができます。

    [KVSTORE-185]
  10. regex_like関数では、ソース・パラメータが常に暗黙的に文字列にキャストされるようになりました。

    [KVSTORE-342]

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

  1. 短時間に多数の新しいクライアント接続が確立されたときに、サービス・プロセスでOutOfMemoryErrorsが発生する可能性のあるバグを修正しました。セキュア・ストアでは、この問題が発生する可能性が高くなります。また、一般にヒープ・サイズが小さいSNでは高頻度で発生します。このような問題のあるプロセスからのヒープ・ダンプには、多数のSSLDataChannelおよびConnectTimeoutTaskが表示されます。

    [KVSTORE-288]
  2. リモート・リージョンでマルチリージョン表が見つからないときに、XRegionサービス・エージェントがブロックされることがあるバグを修正しました。マルチリージョン表が欠落している場合は、表ポーリング・スレッドが作成され(このスレッドが存在しない場合)、表が見つかるまでリモート・リージョンで欠落している表を定期的にポーリングし、スレッドは初期化を開始して、その表を実行中のストリームに含めます。

    [#28218] [#28194]
  3. 不完全な表の初期化のバグを修正しました。

    マルチリージョン・エージェントがクラッシュから再起動したときに、不完全な表の初期化が正しく再開されず、表が破損することもありました。この修正により、マルチリージョン・エージェントの再起動時に、エージェントはクラッシュ前に初期化が完了していなかったすべての表を再初期化します。

    [KVSTORE-321]
  4. min/max集計関数のバグが修正されました。

    以前のリリースでは、入力が異なる型の値であると、これらの関数は非確定的でした。たとえば、min(t.a.b)があり、t.a.bの一部の行が数値で、その他の行が文字列の場合、その結果は最初に検出された行に応じて最小数値または最小文字列値になっていました。ORDER BYでは、比較できない値間の順序付けがすでに定義されています。この順序付けがmin/maxにも使用されるようになり、その結果が確定的になりました。

    [#28202]
  5. 索引ベースのグループ化と結合の両方を含む問合せがパーティション/シャードごとに結果が1つ失われる可能性のあるバグを修正しました。

    [KVSTORE-276]
  6. Oracle NoSQLストア内の異なる表にマップされた表にBig Data SQL問合せを実行すると、その問合せの実行前に、各表のスプリット情報がストレージ・ハンドラでクリアされるようになりました。この修正が実施されるまでは、別の表に対する以前の問合せからのスプリット情報が、現在の表のスプリット情報と一致していないときに、Oracle DBでエラーが発生する可能性がありました。

    [KVSTORE-372]
  7. セキュリティDDLコマンドは、ストレージ・ノードをデプロイすることなく、ブートストラップ管理と連携するように更新されています。この修正を実施するまでは、CREATE USERやGRANTなどのセキュリティDDLコマンドは、ストレージ・ノードのデプロイ後にのみ実行できました。現在では、ストア名の構成直後に、非推奨のplan create-userを使用するかわりに、セキュリティDDLコマンドを使用して初期管理ユーザーを作成できるようになりました。

    [KVSTORE-382]
  8. リージョンIDが119より大きい場合に、マルチリージョン表に対する問合せが機能しないことがあるバグを修正しました。

    [KVSTORE-418]
  9. 致命的なエラーが発生した後の停止中に、レプリケーション・ノードが多数のスレッドを作成することがある問題を修正しました。場合によっては、作成されるスレッドの数が多いと、プロセス数の最大制限に達してしまい、同じホスト上の別のプロセスが失敗する可能性があります。

    [KVSTORE-405]
  10. 管理CLIおよびSQL CLIのshow tablesコマンドのバグが修正されました。

    CLIのグローバル・ネームスペースがsysdefaultに設定されている場合、show tablesは、デフォルトとデフォルト以外の両方のネームスペースのすべての表を返すことが求められます。CLIのグローバル・ネームスペースがデフォルト以外のネームスペースに設定されている場合、show tablesは、指定されたネームスペースで該当する表を返すことが求められます。

    修正前は、グローバル・ネームスペースがsysdefaultの場合、管理CLIのshow tablesは表を返しませんでした。SQL CLIでは、グローバル・ネームスペースは無視され、show tablesは常にすべての表を返していました。

    [#28195]
  11. kvstoreがカスタマイズされた管理ストレージ・ディレクトリを使用すると、show snapshotsが空を返すバグを修正しました。

    [KVSTORE-326]
  12. 子表に索引があり親表に索引がない場合に、管理CLIのshow indexesが索引を返さないバグを修正しました。

    [KVSTORE-394]
  13. 可変のJEパラメータが変更されてもRNが再起動されないようにバグを修正しました。

    [KVSTORE-1]
  14. 表に値を使い果たしたIDENTITY列があると、TableAPIのputメソッドがFaultExceptionをスローするバグを修正しました。この例外により、予期しない再試行が発生し、リクエストがタイムアウトする可能性があります。現在は、IDENTITY列が制限に達したときに、IllegalArgumentExceptionがスローされるようになりました。

    [KVSTORE-261]
  15. マルチリージョン表サービス・エージェントがキーのみの表のリモート行をマージするときに、TableAPIがIllegalArgumentExceptionをスローするバグを修正しました。この例外により、エージェントは最終的にストリームを終了し、エラーをログに記録します。

    [KVSTORE-253]
  16. SQL UPDATE文を使用してマルチリージョン表を変更すると、マルチリージョン・エージェントがリモート・ストアからの表データを処理したときに、レプリケーション・ノードがクラッシュすることがあるバグを修正しました。クラッシュの原因になった例外は、IllegalArgumentException: This is not a record of multiregion tablesでした。

    [KVSTORE-463]