はじめに
テーブルとスキーマの使用するディスクサイズは、Vertica12.0 から指定が可能になりました。ディスクサイズは、Verticaによってデータ圧縮された後のサイズが対象です。この機能を活用することで、マルチテナントとして利用する場合など、各テーブルやスキーマ毎に上限値の指定をおこなって、運用が可能となります。

構文
テーブルやスキーマに、使用するディスクサイズの上限値を設定する場合は、作成時に DISK_QUOTA を指定します。DISK_QUOTA の値は、’15G’ や ‘1T’ などの整数と単位 (K、M、G、T) を組み合わせた文字列を指定します。
CREATE SCHEMA <スキーマ名> DISK_QUOTA ‘値’;
CREATE TABLE <テーブル名> (<カラム名> <データ型>) DISK_QUOTA ‘値’;
実行例
stats テーブルの DISK_QUOTA を 1KB に指定した実行例です。1k を超えたデータをロードしたため、ERROR が発生しています。
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 の実行時
・バックアップから、スキーマおよびテーブルのリストア時
モニタリング方法
テーブルとスキーマの指定されたディスクサイズの上限値と、実際に使用されたディスクのサイズは、DISK_QUOTA_USAGES システムテーブルから確認します。
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 することで解放されますので、ご注意ください。
//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)
https://www.ashisuto.co.jp/cm/analytics-database/delete-notice-1.html
参考情報
Disk Quotas
https://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
検証バージョンについて
この記事の内容は、Vertica 12.0で確認しています。
更新履歴
2022/12/15 本記事を公開