はじめに
テーブルとスキーマの使用するディスクサイズは、Vertica12.0 から指定が可能になりました。ディスクサイズは、Verticaによってデータ圧縮された後のサイズが対象です。この機能を活用することで、マルチテナントとして利用する場合など、各テーブルやスキーマ毎に上限値の指定をおこなって、運用が可能となります。構文
テーブルやスキーマに、使用するディスクサイズの上限値を設定する場合は、作成時に DISK_QUOTA を指定します。DISK_QUOTA の値は、’15G’ や ‘1T’ などの整数と単位 (K、M、G、T) を組み合わせた文字列を指定します。CREATE SCHEMA <スキーマ名> DISK_QUOTA ‘値’;
CREATE TABLE <テーブル名> (<カラム名> <データ型>) DISK_QUOTA ‘値’;
CREATE TABLE <テーブル名> (<カラム名> <データ型>) DISK_QUOTA ‘値’;
実行例
stats テーブルの DISK_QUOTA を 1KB に指定した実行例です。1k を超えたデータをロードしたため、ERROR が発生しています。
1 2 3 4 5 6 |
dbadmin=> CREATE TABLE stats(score int) DISK_QUOTA '1k'; CREATE TABLE dbadmin=> copy stats from '/tmp/test.csv'; ERROR 10765: Disk Quota Exceeded for the Table object public.stats HINT: Delete data and PURGE or increase disk quota at the table level |
上限値をチェックする操作について
テーブルとスキーマで、指定されたディスクサイズの上限値を、チェックする操作は以下のとおりです。・COPY、INSERT、UPDATE、MERGE の実行時
・ALTER COLUMN の実行時
・REFRESH、START_REFRESH の実行時
・バックアップから、スキーマおよびテーブルのリストア時
・ALTER COLUMN の実行時
・REFRESH、START_REFRESH の実行時
・バックアップから、スキーマおよびテーブルのリストア時
モニタリング方法
テーブルとスキーマの指定されたディスクサイズの上限値と、実際に使用されたディスクのサイズは、DISK_QUOTA_USAGES システムテーブルから確認します。
1 2 3 4 5 6 7 |
dbadmin=> SELECT * FROM DISK_QUOTA_USAGES; object_oid | object_name | is_schema | total_disk_usage_in_bytes | disk_quota_in_bytes -------------------+-------------+-----------+---------------------+--------------------- 45035996273705100 | s | t | 307 | 10240 45035996273705104 | public.t | f | 614 | 1024 45035996273705108 | s.t | f | 307 | 2048 (3 rows) |
[DISK_QUOTA_USAGES]
カラム名 | 説明 |
---|---|
OBJECT_OID | スキーマ または テーブル における一意の識別子 |
OBJECT_NAME | スキーマ または テーブルの名前。テーブル名には、スキーマ名の接頭辞が含まれる。 |
IS_SCHEMA | 対象オブジェクトが、スキーマかどうかの判定用フラグ。false の場合、オブジェクトはテーブルを示す。 |
TOTAL_DISK_USAGE_IN_BYTES | 対象オブジェクトが、使用しているディスクサイズ |
DISK_QUOTA_IN_BYTES | 対象オブジェクトに設定された、使用可能なディスクサイズの上限値 |
注意事項
ディスクサイズの上限値に抵触しそうな場合に、テーブルのデータを DELETE もしく TRUNCATE を実行することで、使用サイズを減らすことができます。ただし、DELETE の場合は、直ぐに使用領域が解放されません。DELETE されたデータのディスク領域は、Purge することで解放されますので、ご注意ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
//public.stats テーブルの total_disk_usage_in_bytes = 947 バイトです。 dbadmin=> SELECT * FROM DISK_QUOTA_USAGES; object_oid | object_name | is_schema | total_disk_usage_in_bytes | disk_quota_in_bytes -------------------+--------------+-----------+---------------------------+--------------------- 45035996273707456 | public.stats | f | 947 | 1024 (1 row) //public.stats テーブルのデータを DELETE します。 dbadmin=> delete from public.stats; OUTPUT -------- 29 (1 row) dbadmin=> commit; COMMIT //public.stats テーブルの total_disk_usage_in_bytes = 947 バイトで変わりません。 testdb=> SELECT * FROM DISK_QUOTA_USAGES; object_oid | object_name | is_schema | total_disk_usage_in_bytes | disk_quota_in_bytes -------------------+--------------+-----------+---------------------------+--------------------- 45035996273707456 | public.stats | f | 947 | 1024 (1 row) //Purge 処理を実行します。 dbadmin=> SELECT MAKE_AHM_NOW(); MAKE_AHM_NOW ----------------------------- AHM set (New AHM Epoch: 22) (1 row) dbadmin=> SELECT PURGE_TABLE('public.stats'); PURGE_TABLE ------------------------------------------------------------------------------- Task: purge operation (Table: public.stats) (Projection: public.stats_super) (1 row) //public.stats テーブルの total_disk_usage_in_bytes = 0 バイトに減りました。 testdb=> SELECT * FROM DISK_QUOTA_USAGES; object_oid | object_name | is_schema | total_disk_usage_in_bytes | disk_quota_in_bytes -------------------+--------------+-----------+---------------------------+--------------------- 45035996273707456 | public.stats | f | 0 | 1024 (1 row) |
詳細は、以下の記事をご覧になってください。
DELETEの注意点(1)
http://vertica-tech.ashisuto.co.jp/delete-notice-1/
参考情報
Disk Quotashttps://www.vertica.com/docs/12.0.x/HTML/Content/Authoring/AdministratorsGuide/Tables/DiskQuotas.htm
DISK_QUOTA_USAGES
https://www.vertica.com/docs/12.0.x/HTML/Content/Authoring/SQLReferenceManual/SystemTables/MONITOR/DISK_QUOTA_USAGES.htm