メインコンテンツへスキップ
メインコンテンツへスキップ

クォータ

ClickHouse Cloud におけるクォータ

クォータは ClickHouse Cloud でサポートされていますが、DDL 構文 を使用して作成する必要があります。以下で説明する XML 設定方式は サポートされていません

クォータを使用すると、一定期間におけるリソース使用量を制限したり、リソースの使用状況を追跡したりできます。 クォータはユーザー設定ファイルで行い、通常は「users.xml」に記述します。

システムには、単一クエリの複雑さを制限するための機能もあります。詳しくは、クエリの複雑さに関する制限のセクションを参照してください。

クエリ複雑性の制限とは対照的に、クォータには次のような特徴があります。

  • 単一クエリを制限するのではなく、一定期間に実行できるクエリの集合に制限をかけます。
  • 分散クエリ処理のために、すべてのリモートサーバーで消費されたリソースを計上します。

クォータを定義している「users.xml」ファイルの該当セクションを見てみましょう。

<!-- クォータ -->
<quotas>
    <!-- クォータ名 -->
    <default>
        <!-- 時間間隔に対する制限。異なる制限を持つ複数の間隔を設定できます。 -->
        <interval>
            <!-- 間隔の長さ -->
            <duration>3600</duration>

            <!-- 無制限。指定された時間間隔のデータを収集するのみ。 -->
            <queries>0</queries>
            <query_selects>0</query_selects>
            <query_inserts>0</query_inserts>
            <errors>0</errors>
            <result_rows>0</result_rows>
            <read_rows>0</read_rows>
            <execution_time>0</execution_time>
        </interval>
    </default>

デフォルトでは、クォータは各時間ごとのリソース消費量を追跡しますが、使用量を制限はしません。 各時間間隔で計算されたリソース消費量は、各リクエスト後にサーバーログへ出力されます。

<statbox>
    <!-- 期間に対する制限。異なる制限を持つ複数の間隔を設定できます。 -->
    <interval>
        <!-- 間隔の長さ。 -->
        <duration>3600</duration>

        <queries>1000</queries>
        <query_selects>100</query_selects>
        <query_inserts>100</query_inserts>
        <written_bytes>5000000</written_bytes>
        <errors>100</errors>
        <result_rows>1000000000</result_rows>
        <read_rows>100000000000</read_rows>
        <execution_time>900</execution_time>
        <failed_sequential_authentications>5</failed_sequential_authentications>
    </interval>

    <interval>
        <duration>86400</duration>

        <queries>10000</queries>
        <query_selects>10000</query_selects>
        <query_inserts>10000</query_inserts>
        <errors>1000</errors>
        <result_rows>5000000000</result_rows>
        <result_bytes>160000000000</result_bytes>
        <read_rows>500000000000</read_rows>
        <result_bytes>16000000000000</result_bytes>
        <execution_time>7200</execution_time>
    </interval>
</statbox>

'statbox' クォータでは、1時間ごとと 24時間ごと(86,400 秒)に制限が設定されます。時間間隔は、実装依存の固定された時点からの経過時間でカウントされます。つまり、24時間の間隔は必ずしも真夜中から始まるとは限りません。

間隔が終了すると、収集されたすべての値はクリアされます。次の1時間に対しては、クォータの計算が再びゼロから始まります。

制限を設定できる項目は次のとおりです。

queries – クエリの合計数。

query_selectsselect クエリの合計数。

query_insertsinsert クエリの合計数。

errors – 例外をスローしたクエリの数。

result_rows – 結果として返された行数の合計。

result_bytes - 結果として返された行の合計サイズ。

read_rows – すべてのリモートサーバーでクエリを実行するためにテーブルから読み取られた元データ行数の合計。

read_bytes - すべてのリモートサーバーでクエリを実行するためにテーブルから読み取られたデータ量の合計。

written_bytes - 書き込み処理で出力されたデータ量の合計。

execution_time – クエリ実行時間の合計(秒、ウォールクロックタイム)。

failed_sequential_authentications - 連続して発生した認証エラーの合計回数。

少なくとも 1 つの時間間隔で制限を超過した場合、どの制限がどの間隔で超過されたか、さらに新しい時間間隔(再びクエリを送信できるようになるタイミング)がいつ開始するかについてのメッセージを含む例外がスローされます。

クォータは「quota key」機能を使用して、複数のキーごとにリソースを独立して集計・報告できます。以下はその例です。

<!-- グローバルレポートデザイナー用 -->
<web_global>
    <!-- keyed – quota_key「key」がクエリパラメータで渡され、
            クォータは各キー値ごとに個別に追跡されます。
        例えば、キーとしてユーザー名を渡すことで、
            クォータはユーザー名ごとに個別にカウントされます。
        キーの使用は、quota_keyがユーザーではなくプログラムによって送信される場合にのみ有効です。

        <keyed_by_ip />と記述することもでき、その場合IPアドレスがクォータキーとして使用されます。
        (ただし、ユーザーはIPv6アドレスを比較的容易に変更できる点に留意してください。)
    -->
    <keyed />

クォータは設定ファイルの'users'セクションでユーザーに割り当てられます。"Access rights" のセクションを参照してください。

分散クエリ処理では、累積値はリクエスト元サーバーに保存されます。そのため、ユーザーが別のサーバーへ移動した場合、そのサーバーでのクォータはゼロからカウントし直しになります。

サーバーを再起動すると、クォータはリセットされます。