> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-trino-dialect.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ClickHouse Cloud のスケジュールスケーリング機能を説明する記事

# スケジュールスケーリング

export const Image = ({img, alt, size = "lg", background}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  const backgroundColor = background === "white" ? "white" : background === "black" ? "rgb(31 31 28)" : undefined;
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} style={{
    backgroundColor
  }} />
      </Frame>
    </div>;
};

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <span>ベータ</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>ベータ機能</span>
        </a>;
};

<BetaBadge />

ClickHouse Cloud サービスは CPU とメモリの使用率に基づいて自動的にスケーリングされますが、多くのワークロードには予測しやすいパターンがあります。たとえば、日次のインジェスト量の急増、夜間に実行されるバッチジョブ、週末に大きく減少するトラフィックなどです。こうしたユースケースでは、スケジュールスケーリングを使うことで、リアルタイムのメトリクスとは関係なく、サービスをいつスケールアップまたはスケールダウンするかを正確に定義できます。

スケジュールスケーリングでは、ClickHouse Cloud コンソールで時間ベースのルールセットを直接設定します。各ルールでは、有効な曜日、UTC での開始時刻と終了時刻、およびその時間枠で適用する設定を指定します。設定には、レプリカ数 (水平スケーリング)、レプリカあたりの最小および最大メモリ (垂直スケーリング)、サービスのアイドル状態を許可するかどうかが含まれます。時間枠が有効な間、ClickHouse Cloud はこれらの設定を適用し、時間枠が終了するとデフォルトのスケーリング設定に戻します。そのため、需要が発生してから対応するのではなく、需要が高まる前に適切なサイズへ調整しておくことができます。

これは、CPU やメモリの負荷に応じて動的に反応する、メトリクスベースのオートスケーリングとは異なります。スケジュールスケーリングは決定論的です。つまり、スケーリングがいつ実行され、どのサイズになるのかを正確に把握できます。この 2 つのアプローチは相互補完的です。サービスには基本となるスケーリングスケジュールを設定しつつ、その時間枠内でワークロードが予想外に変動した場合には、オートスケーリングの利点も引き続き活用できます。

スケジュールスケーリングは現在 **ベータ** で提供されています。

<div id="setting-up-a-scaling-schedule">
  ## スケーリングスケジュールの設定
</div>

スケジュールを設定するには、ClickHouse Cloudコンソールで対象のサービスに移動し、設定を開きます。そこで **Schedule Override** を選択し、新しいルールを追加します。

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/avthXRFo-wpxxds8/images/cloud/features/autoscaling/scheduled-scaling-1.webp?fit=max&auto=format&n=avthXRFo-wpxxds8&q=85&s=3a9290c8080085378c3ad54f34c87f23" size="md" alt="時間ベースのスケーリングルールが表示された、ClickHouse Cloudコンソールのスケーリングスケジュールのインターフェイス" border width="748" height="1606" data-path="images/cloud/features/autoscaling/scheduled-scaling-1.webp" />

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/avthXRFo-wpxxds8/images/cloud/features/autoscaling/scheduled-scaling-2.webp?fit=max&auto=format&n=avthXRFo-wpxxds8&q=85&s=d51794fc6c4ccf6b410454180de13231" size="md" alt="ClickHouse Cloudコンソールでスケジュールスケーリングルールを設定する画面" border width="938" height="534" data-path="images/cloud/features/autoscaling/scheduled-scaling-2.webp" />

各ルールには、次の項目が必要です。

* **Days active:** ルールを適用する曜日
* **Start and end time:** ルールを適用する時間枠。**UTC** の正時で指定します。終了時刻が開始時刻より前の時間枠は、翌日にまたがって夜間に実行されます
* **Settings to apply:** 時間枠が有効な間に使用するレプリカ数、レプリカあたりの最小および最大メモリ、最小アイドル時間 (またはアイドル化なし)

時間枠が重複しない限り、複数のルールを組み合わせて1週間分の完全なスケジュールを作成できます。たとえば、月曜日から金曜日の 06:00 ～ 20:00 UTC を対象とする単一のルールにより、稼働時間中はサービスをより大きなサイズに維持し、その時間枠以外ではデフォルト設定を適用できます。

<div id="use-cases">
  ## ユースケース
</div>

**バッチおよび ETL ワークロード:** 夜間の取り込みジョブの実行前にスケールアップし、完了後にスケールダウンすることで、負荷の低い日中に過剰なプロビジョニングを避けられます。

**予測可能なトラフィックパターン:** 一定のピーク時間帯 (例: 営業時間中のクエリトラフィック) があるサービスでは、オートスケーリングの反応を待つのではなく、負荷が到来する前にあらかじめスケールして対応できます。

**週末のスケールダウン:** 需要が低い週末にはレプリカ数やメモリティアを減らし、月曜朝の急増前に容量を戻します。

**コスト管理:** ClickHouse Cloud のコストを管理するチームにとって、利用率が低いことが分かっている時間帯にスケジュールされたスケールダウンを行うことで、手動介入なしにリソース消費を大幅に抑えられます。

<Note>
  スケジュールスケーリングアクションと同時にオートスケーリングの推奨が発生する場合、トリガー時刻ではスケジュールが優先されます。
</Note>

<div id="handling-bursty-workloads">
  ## ワークロードの急増への対処
</div>

ワークロードの急増が予想される場合は、
[ClickHouse Cloud API](/ja/products/cloud/features/admin-features/api/api-overview) を使って、
急増に対応できるよう事前にサービスをスケールアップし、需要が落ち着いたら
スケールダウンできます。

各レプリカで現在使用中の CPU コア数とメモリを
確認するには、以下のクエリを実行します。

```sql theme={null}
SELECT *
FROM clusterAllReplicas('default', view(
    SELECT
        hostname() AS server,
        anyIf(value, metric = 'CGroupMaxCPU') AS cpu_cores,
        formatReadableSize(anyIf(value, metric = 'CGroupMemoryTotal')) AS memory
    FROM system.asynchronous_metrics
))
ORDER BY server ASC
SETTINGS skip_unavailable_shards = 1
```
