0Pricing
SQL Academy · レッスン

パーティショニングの理由:プルーニングとメンテナンス

クエリプルーニング、高速なVACUUM、容易なアーカイブなど、パーティショニングの利点を理解します。

「パーティショニングの理由:プルーニングとメンテナンス」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

パーティショニングとは

1つの論理テーブルを複数の物理テーブル(パーティション)に分割し、それぞれに行の一部を格納します。クエリは関連するパーティションだけをスキャンします。

なぜ必要なのか

大きなテーブルには次の問題があります。

  • インデックスが巨大化し、検索が遅くなる
  • VACUUMに何時間もかかる
  • バックアップが遅い
  • 一部のクエリが不要な範囲までスキャンする

パーティショニングは、この4つすべてに対処します。

パーティションプルーニング

プランナーは、WHERE句に一致する可能性のないパーティションをスキップできます。

EXPLAIN SELECT * FROM events
WHERE ts >= '2024-03-01' AND ts < '2024-04-01';
-- Only March partition scanned; older partitions skipped.
-- Plan rows: 1M, not 100B.

パーティションを使うタイミング

次の条件に当てはまる場合は、パーティションを使用します。

  • テーブルのサイズが100GB以上
  • 自然なパーティションキー(日付、テナント、リージョン)がある
  • ほとんどのクエリがそのキーでフィルタリングする
  • 古いデータをアーカイブまたは削除できる

パーティションを使わないタイミング

便利そうだからという理由だけでパーティションを使わないでください。

  • 数GB未満のテーブルではメリットがありません
  • クエリがパーティションキーでフィルタリングしない場合、プルーニングはまったく行われません
  • 運用上の複雑さ(パーティションの管理)が増します

パーティショニングの戦略

PostgreSQLは次の3種類をサポートしています。

  • Range — 値の範囲(日付、ID)ごとにパーティションを分けます
  • List — 特定の値(国、テナント)をパーティションに格納します
  • Hash — 剰余ハッシュによって均等に分散します

低コストな削除

パーティションの削除は瞬時に完了します。行を1つずつ削除する必要はありません。

DROP TABLE events_2023;
-- 100GB gone in milliseconds, no VACUUM aftermath.

容易なメンテナンス

VACUUM、REINDEX、ANALYZEはパーティション単位で実行できます。巨大なバッチを1つ処理するのではなく、パーティションごとにメンテナンス時間を分けられます。

パーティションごとの小さなインデックス

各パーティションには独自のインデックスがあります。1TBのテーブルではなく1GBのパーティションにB-treeを作成すれば、階層が少なくなり、検索が高速になります。

パーティショニングは万能薬ではなくツール

無料で性能が向上するわけではありません。パーティションキーでフィルタリングするクエリではプルーニングが利用でき、メンテナンスも容易になります。それらの条件に当てはまらない場合は、複雑さが増すだけです。

PostgreSQL のネイティブ(宣言的)パーティショニング

PG 10以降で利用できます。各パーティションは実体のあるテーブルです。

CREATE TABLE events (
  id BIGSERIAL,
  ts TIMESTAMPTZ NOT NULL,
  user_id BIGINT,
  data JSONB
) PARTITION BY RANGE (ts);

CREATE TABLE events_2024_01 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');

PG10より前:継承によるパーティショニング

レガシーシステムでは、テーブル継承とトリガーを使用します。新しいコードでは避けてください。宣言的パーティショニングのほうがシンプルで高速です。

まとめ

パーティショニングは、大きく、時間単位またはテナント単位で分割できるテーブルで特に効果を発揮します。

  • プルーニングによって無関係なパーティションをスキップできる
  • パーティション単位のメンテナンスは高速
  • 100GBのDELETEをDROP TABLEに置き換えられる
  • 万能ではなく、クエリがパーティションキーに一致する場合にのみ役立つ

クイックチェック

テーブルを月単位でパーティション分割し、日付フィルターなしでSELECT * FROM events WHERE country = 'US'を実行します。パーティショニングは役立つでしょうか。

よくある質問

「パーティショニングの理由:プルーニングとメンテナンス」レッスンは無料ですか?

はい。「パーティショニングの理由:プルーニングとメンテナンス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「パーティショニングの理由:プルーニングとメンテナンス」で何を学びますか?

クエリプルーニング、高速なVACUUM、容易なアーカイブなど、パーティショニングの利点を理解します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「パーティショニングの理由:プルーニングとメンテナンス」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. パーティショニングの理由:プルーニングとメンテナンス
  2. 範囲、リスト、ハッシュパーティショニング
  3. パーティションの切り離しと接続
  4. パーティション横断クエリの効率化
← SQL Academyに戻る