STV_BLOCKLIST - Amazon Redshift

STV_BLOCKLIST

STV_BLOCKLIST には、データベース内の各スライス、テーブル、または列で使用される 1 MB ディスクブロックの数が表示されます。

データベース、テーブル、または列ごとに割り当てられている 1 MB ディスクブロックの数を調べるには、以下の例に示すように、STV_BLOCKLIST で集計クエリを使用します。または STV_PARTITIONS を使用して、ディスク利用に関する概要を見ることができます。

STV_BLOCKLIST はスーパーユーザーのみに表示されます。詳細については、「システムテーブルとビューのデータの可視性」を参照してください。

テーブルの列

列名 データ型 説明
slice integer ノードスライス。
col integer 列のゼロベースインデックス。作成するテーブルにはすべて、3 つの非表示列 (INSERT_XID、DELETE_XID、ROW_ID (OID) ) が追加されます。例えばユーザー定義列が 3 つあるテーブルには、実際には 6 つの列が含まれます。ユーザー定義列の初期番号は 0、1、2 です。その場合、INSERT_XID、DELETE_XID、および ROW_ID 列はそれぞれ、3、4、および 5 となります。
tbl integer データベーステーブルのテーブル ID。
blocknum integer データブロックの ID。
num_values integer ブロックに含まれる値の数。
extended_limits integer 内部使用を目的とします。
minvalue bigint ブロックの最小値。数値以外のデータの場合、最初の 8 文字を 64 ビット整数として格納します。ディスクスキャンに使用されます。
maxvalue bigint ブロックの最大値。数値以外のデータの場合、最初の 8 文字を 64 ビット整数として格納します。ディスクスキャンに使用されます。
sb_pos integer ディスクのスーパーブロックの位置の内部 Amazon Redshift 識別子。
pinned integer 事前ロードの一環としてブロックをメモリにピンするかどうかを示します。0 = false、1 = true。デフォルトは false です。
on_disk integer ブロックを自動的にディスクに保存するかどうかを示します。0 = false、1 = true。デフォルトは false です。
modified integer ブロックが修正されたかどうかを示します。0 = false、1 = true。デフォルトは false です。
hdr_modified integer ブロックヘッダーが修正されたかどうかを示します。0 = false、1 = true。デフォルトは false です。
unsorted integer ブロックが未ソートかどうかを示します。0 = false、1 = true。デフォルトは true です。
tombstone integer 内部使用を目的とします。
preferred_diskno integer ディスクにエラーがない場合に、ブロックが存在すべきディスクの番号。ディスクが修正されると、ブロックがそのディスクに戻されます。
temporary integer ブロックに、一時テーブルやクエリの中間結果などの一時データが含まれているかどうかを示します。0 = false、1 = true。デフォルトは false です。
newblock integer ブロックが新しい (true) かまたは一度もディスクにコミットされていない (false) かを示します。0 = false、1 = true。
num_readers integer 各ブロックの参照数。
flags integer ブロックヘッダーの内部 Amazon Redshift フラグ。

サンプルクエリ

STV_BLOCKLIST には、割り当てられたディスクブロックごとに行が 1 つ含まれるため、すべての行を選択するようなクエリを実行すると、非常に多くの行が返される可能性があります。STV_BLOCKLIST では集計クエリのみを使用することをお勧めします。

SVV_DISKUSAGE ビューには同様の情報が見やすい形式で表示されますが、以下の例では STV_BLOCKLIST テーブルの利用方法の 1 つを示します。

VENUE テーブル内の各列で使用されている 1 MB ブロックの数を調べるには、以下のクエリを使用します。

select col, count(*) from stv_blocklist, stv_tbl_perm where stv_blocklist.tbl = stv_tbl_perm.id and stv_blocklist.slice = stv_tbl_perm.slice and stv_tbl_perm.name = 'venue' group by col order by col;

このクエリは、VENUE テーブル内の各列に割り当てられている 1 MB ブロックの数を返します。例:

col | count -----+------- 0 | 4 1 | 4 2 | 4 3 | 4 4 | 4 5 | 4 7 | 4 8 | 4 (8 rows)

以下のクエリは、テーブルデータが実際に全スライスに配分されているかどうかを示します。

select trim(name) as table, stv_blocklist.slice, stv_tbl_perm.rows from stv_blocklist,stv_tbl_perm where stv_blocklist.tbl=stv_tbl_perm.id and stv_tbl_perm.slice=stv_blocklist.slice and stv_blocklist.id > 10000 and name not like '%#m%' and name not like 'systable%' group by name, stv_blocklist.slice, stv_tbl_perm.rows order by 3 desc;

このクエリは、以下のような出力を返します。出力には、最も多くの行を含む表に対する均等なデータ配分が表示されています。

table | slice | rows ----------+-------+------- listing | 13 | 10527 listing | 14 | 10526 listing | 8 | 10526 listing | 9 | 10526 listing | 7 | 10525 listing | 4 | 10525 listing | 17 | 10525 listing | 11 | 10525 listing | 5 | 10525 listing | 18 | 10525 listing | 12 | 10525 listing | 3 | 10525 listing | 10 | 10525 listing | 2 | 10524 listing | 15 | 10524 listing | 16 | 10524 listing | 6 | 10524 listing | 19 | 10524 listing | 1 | 10523 listing | 0 | 10521 ... (180 rows)

以下のクエリは、廃棄されたブロックの中に、ディスクにコミットされていたものがあるかどうかを返します。

select slice, col, tbl, blocknum, newblock from stv_blocklist where tombstone > 0; slice | col | tbl | blocknum | newblock -------+-----+--------+----------+---------- 4 | 0 | 101285 | 0 | 1 4 | 2 | 101285 | 0 | 1 4 | 4 | 101285 | 1 | 1 5 | 2 | 101285 | 0 | 1 5 | 0 | 101285 | 0 | 1 5 | 1 | 101285 | 0 | 1 5 | 4 | 101285 | 1 | 1 ... (24 rows)