キー分散統計の表示

Oracle NoSQL Databaseでは、各行のシャード・キーをハッシュすることによって、すべてのパーティションに行を分散してデータが格納されます。Oracle NoSQL Databaseでは、ストアの表内のアクティビティに基づき、内部的に管理されるシステム表にキー分散データが収集されます。これらの統計には、必要に応じて、これらのシステム表を問い合せることでアクセスできます。

Oracle NoSQL Database管理者がキー分散統計を参照する必要がある、多くの状況が発生する場合があります。このような1つのユースケースについて説明するために、クラスタに複数のシャードがあっても、期待される量のスループットをOracle NoSQL Databaseで達成できない場合について考えてみます。ストア内のデータがシャード間に均等に分散されていない場合に、そのようになることがあります。このことが低スループットの理由であることを確認するには、Oracle NoSQL Databaseクラスタ間でどのようにデータが分散しているかを理解するためのメカニズムが必要です。Oracle NoSQL Databaseによって提供されるキー分散統計は、ストア内の複数のパーティションおよびシャード間のデータ分散を理解するために役立ちます。

Oracle NoSQL Databaseによってキー分散統計が収集される2つのシステム表は、次のとおりです。

  • SYS$TableStatsPartition

  • SYS$TableStatsIndex

Oracle NoSQL Databaseでは、このようなシステム表が内部的に管理およびメンテナンスされます。ストアでセキュリティを有効にすると、これらのシステム表は読取り専用になります。セキュリティに関係なく、システム表のスキーマは不変です。システム表の名前は、接頭辞SYS$を使用して定義されます。この予約された接頭辞を使用して他の表名を作成することはできません。

SYS$TableStatsPartition

この表には、パーティション・レベルでの表のキー統計が格納されます。ここには、各表のパーティションごとに1行が含められます。たとえば、パーティションが100個あるストアを作成した場合、この表にはストア内の各表に対して100行が含まれます。ストア内の各表のパーティションごとに格納される統計情報は、次のとおりです。

  1. 格納されている行の数
  2. キーの平均サイズ(バイト)
  3. 行によって使用されているサイズ(バイト)

SYS$TableStatsPartition表の構造は、次のとおりです。

データ型 説明
tableName string キー分散統計が格納される表の名前。
partitionId integer パーティションID
shardId integer シャードID
count long 格納されている行の数。
avgKeySize integer キーの平均サイズ(バイト)。
tableSize long 行によって使用されているサイズ(バイト)。
SYS$TableStatsIndex

この表には、シャード・レベルでの索引キー統計が格納されます。この表には、各索引のシャードごとに1行が含められます。ストアに作成されるシャードの数を直接制御することはできませんが、常に、ストア・トポロジを参照して、ストアにシャードがいくつ作成されているかを把握できます。詳細は、show topologyを参照してください

ストア内の各表のシャードごとに格納される統計情報は、次のとおりです。

  1. 索引行の数
  2. 索引キーの平均サイズ(バイト)
  3. 索引によって使用されているサイズ(バイト)

SYS$TableStatsIndexシステム表の構造は、次のとおりです。

データ型 説明
tableName string キー分散統計が格納される表の名前。
indexName string 索引の名前
shardId integer シャードID
count long 格納されている索引の数。
avgKeySize integer 索引キーの平均サイズ(バイト)。
indexSize long 索引によって使用されているサイズ(バイト)。
キー分散統計の収集

キー分散統計のシステム表への収集は、次の2つのパラメータによって決定されます。

  • rnStatisticsEnabled:

    Oracle NoSQL Databaseでは、新しく作成するすべてのストアについて、キー分散統計がデフォルトで有効になっています。これらの統計を取得できないようにするには、管理コマンドライン・インタフェース(CLI)から次のコマンドを実行します。

    plan change-parameters -wait -all-rns -params "rnStatisticsEnabled=false"
  • rnStatisticsGatherInterval:

    Oracle NoSQL Databaseでは、SYS$TableStatsPartitionSYS$TableStatsIndexに対する連続する2回の更新の間のデフォルトの時間間隔は24時間です。rnStatisticsGatherIntervalパラメータを変更することによって、これらの統計を取得するまでの時間間隔を変更できます。指定する時間単位は、日、時間または分である必要があります。

    たとえば、Oracle NoSQL Databaseに対してキー分散統計を収集するように指示するには、管理コマンドライン・インタフェース(CLI)から次のコマンドを実行します。
    plan change-parameters -wait -all-rns -params "rnStatisticsGatherInterval=1 min"

ノート:

キー分散統計を有効にしても、統計の収集がすぐにトリガーされるわけではありません。Oracle NoSQL Databaseでは、rnStatisticsGatherIntervalパラメータによって定義された収集間隔に基づいて、統計の収集を一度に開始します。
たとえば、時間間隔を30分と定義した場合、統計収集は12:00、12:30、1:00などの30分ごとのマークでトリガーされます。ただし、rnStatisticsGatherIntervalのデフォルト値が変更されない場合、キー分散統計は午前0時頃に収集されます。
キー分散統計の読取り

システム表を問い合せて、キー分散データを取得したり、収集プロセスを確認できます。

特定の表の一連の完全な統計情報を取得するには、SYS$TableStatsPartitionシステム表内の、その表について格納されているパーティションごとの値を集計する必要があります。

たとえば、表myTableの合計行数を取得するには、SYS$TableStatsPartition表の、tableName = myTable該当するすべての行のカウント列の値を合計する必要があります。

問合せの例:

sql-> select * from SYS$TableStatsPartition where tableName = 'myTable';

結果:

{"tableName":"myTable","partitionId":8,"shardId":3,"count":0,"avgKeySize":0,"tableSize":0}
{"tableName":"myTable","partitionId":9,"shardId":4,"count":0,"avgKeySize":0,"tableSize":0}
{"tableName":"myTable","partitionId":1,"shardId":1,"count":0,"avgKeySize":0,"tableSize":0}
{"tableName":"myTable","partitionId":4,"shardId":2,"count":0,"avgKeySize":0,"tableSize":0}
{"tableName":"myTable","partitionId":7,"shardId":3,"count":50,"avgKeySize":15,"tableSize":103}
{"tableName":"myTable","partitionId":10,"shardId":4,"count":50,"avgKeySize":15,"tableSize":103}
{"tableName":"myTable","partitionId":5,"shardId":2,"count":0,"avgKeySize":0,"tableSize":0}
{"tableName":"myTable","partitionId":6,"shardId":2,"count":0,"avgKeySize":0,"tableSize":0}
{"tableName":"myTable","partitionId":2,"shardId":1,"count":0,"avgKeySize":0,"tableSize":0}
{"tableName":"myTable","partitionId":3,"shardId":1,"count":0,"avgKeySize":0,"tableSize":0}

この結果から、"partitionId":7,"shardId":3および"partitionId":10,"shardId":4のそれぞれに50個のキーが存在するのに対し、他のすべてのパーティションおよびシャードは空であることがわかります。このことは、キー・データがすべてのパーティションおよびシャード間で均等に分散されていないことを示します。

同様に、SYS$TableStatsIndexシステム表を問い合せて、特定の表の索引キー分散統計をシャード・レベルで読み取ることができます。

たとえば、表myTableの合計索引行数を取得するには、SYS$TableStatsIndex表の、tableName = myTable該当するすべての索引行のカウント列の値を合計する必要があります。

問合せの例:

sql-> select * from SYS$TableStatsIndex where tableName = 'myTable';

結果:

{"tableName":"myTable","indexName":"idx_shard_key","shardId":3,"count":50,"avgKeySize":1,"indexSize":75}
{"tableName":"myTable","indexName":"idx_shard_key","shardId":4,"count":50,"avgKeySize":1,"indexSize":75}
{"tableName":"myTable","indexName":"idx_shard_key","shardId":1,"count":0,"avgKeySize":0,"indexSize":0}
{"tableName":"myTable","indexName":"idx_shard_key","shardId":2,"count":0,"avgKeySize":0,"indexSize":0}

前述の結果からわかるように、"shardId":3および"shardId":4内にはそれぞれ50個の索引キーがあり、他のすべてのシャードは空です。このことは、索引キー・データがすべてのシャード間で均等に分散されていないことを示します。

キー分散統計の保持

収集されたキー分散統計は、固定された期間、システム表に保持されます。この値は、rnStatisticsTTLパラメータによって決定されます。デフォルトでは、これらの統計は60日間保持されます。ただし、この値は、管理CLIからchange-parametersプランを実行して変更できます。指定する時間単位は、日または時間である必要があります。

たとえば、管理コマンドライン・インタフェース(CLI)から次のコマンドを実行すると、システム表にキー・データ統計が90日間保持されます。

plan change-parameters -wait -all-rns -params "rnStatisticsTTL=90 days"

次の点に注意してください。

  • rnStatisticsTTLパラメータに対する変更は、SYS$TableStatsPartition表およびSYS$TableStatsIndex 表の既存の行には適用されません。これらは、次回の収集スキャンの後にのみ有効になります。
  • キー分散統計の収集を無効にすると、システム表に存在するすべての行は、現在の存続時間(TTL)の期間の後に失効します。
  • ストア内の表または索引を削除すると、システム表に存在するそれらの統計行もTTL期間の後に失効します。
  • rnStatisticsTTLrnStatisticsGatherIntervalより小さい値に変更しても、既存のすべての統計行は、最後のスキャン中に定義されたTTL値にのみ従って失効します。
  • rnStatisticsTTLは0日に設定できます。ただし、統計行の自動削除が無効になるため、この方法はお薦めしません。