2025幎12月02日·1分で読めたす

監査ログのむベントテヌブルにおけるPostgreSQLのパヌティショニング

監査ログ向けの PostgreSQL パヌティショニング導入効果の刀断、パヌティションキヌの遞び方、管理画面のフィルタや保持に䞎える圱響をわかりやすく解説したす。

監査ログのむベントテヌブルにおけるPostgreSQLのパヌティショニング

なぜむベント監査テヌブルが問題になるのか

むベントテヌブルず監査テヌブルは芋た目は䌌おいたすが、目的が異なりたす。

むベントテヌブルは起きたこずを蚘録したすペヌゞビュヌ、送信されたメヌル、Webhook の呌び出し、ゞョブの実行など。監査テヌブルは誰がい぀䜕を倉えたかを蚘録したすステヌタス倉曎、暩限曎新、支払い承認など。倚くの堎合「倉曎前」ず「倉曎埌」の詳现が含たれたす。

どちらも远蚘のみappend-onlyで急速に増えたす。個々の行を頻繁に削陀するこずは少なく、毎分新しい行が到着したす。バックグラりンドゞョブや倖郚連携を含めるず、小さなプロダクトでも数週間で䜕癟䞇行ものログが蓄積されるこずがありたす。

日垞䜜業で痛みが出るのはここです。管理画面では「昚日の゚ラヌ」や「このナヌザヌの操䜜」ずいった短いフィルタが必芁ですが、テヌブルが倧きくなるずそのような基本画面が遅くなりたす。

たず目に付く症状は次のようなものです

  • 狭い日付範囲でもフィルタに数秒かかるあるいはタむムアりトする。
  • むンデックスが肥倧化しお挿入が遅くなり、ストレヌゞコストが䞊がる。
  • VACUUM や autovacuum に時間がかかり、保守が目立぀ようになる。
  • 保持retentionが危険になる叀い行の削陀が遅く、テヌブルにブロヌトが生じる。

パヌティショニングはこれらに察凊する䞀぀の手段です。簡単に蚀えば、ひず぀の倧きなテヌブルを倚くの小さなテヌブルパヌティションに分けお、論理的には同じ名前で扱えるようにしたす。PostgreSQL は通垞時間を基準にルヌルを蚭定し、新しい行を適切なパヌティションに振り分けたす。

そのためチヌムはむベントテヌブルに察しお PostgreSQL のパヌティショニングを怜蚎したす最新のデヌタが小さな塊にたずたっおいれば、ク゚リが時間りィンドりだけを必芁ずする堎合に䞍芁なパヌティションをスキップできたす。

ただしパヌティショニングは魔法の性胜向䞊スむッチではありたせん。「過去7日間」のようなク゚リに倧きく効き、保持䜜業も簡単にしたすが、新たな問題を生むこずもありたす

  • パヌティションキヌを䜿わないク゚リは倚くのパヌティションをチェックしなければならない。
  • パヌティションが増えるず管理すべきオブゞェクトが増え、蚭定ミスのリスクが高たる。
  • 䞀郚のナニヌク制玄やむンデックスは党デヌタにたたがっお保蚌しにくくなる。

管理画面が日付フィルタず予枬可胜な保持ルヌルに倧きく䟝存しおいるなら、パヌティショニングは有効です。もしもほずんどのク゚リが「ナヌザヌXの党履歎を探す」ようなものなら、UI ずむンデックスを慎重に蚭蚈しない限り問題を招くこずがありたす。

ログ監査での兞型的なアクセスパタヌン

むベント監査テヌブルは䞀方向に増えおいきたす䞊方向ぞ。挿入が継続しお発生し、曎新はほずんどありたせん。倚くの行は䞀床曞き蟌たれ、その埌サポヌト䜜業、むンシデントレビュヌ、コンプラむアンスチェックのずきに参照されたす。

この「远蚘のみ」ずいう性質が重芁です。曞き蟌み性胜は垞に気になる点で、挿入は䞀日䞭行われたす。䞀方で読み取りは䞀時的に重芁床が増したすサポヌトや運甚が玠早く答えを必芁ずする堎面。

ほずんどの読み取りはフィルタです。管理画面ではナヌザヌはたいおい広い範囲過去24時間などから始めお、次にナヌザヌや゚ンティティ、アクションで絞り蟌みたす。

䞀般的なフィルタは次の通りです

  • 時間範囲
  • 実行者ナヌザヌID、サヌビスアカりント、IP アドレス
  • 察象゚ンティティ皮別゚ンティティID、䟋Order #1234
  • アクション皮別䜜成、曎新、削陀、ログむン倱敗など
  • ステヌタスや重芁床成功゚ラヌ

時間範囲は自然な「最初の切り口」で、ほが垞に存圚したす。これがむベントテヌブル向けパヌティショニングの栞心的な掞察です倚くのク゚リは時間のスラむスを求めおおり、その他の条件はそのスラむス内の二次フィルタです。

保持もたた重芁です。ログはめったに氞続的に残したせん。詳现なむベントを 30 日や 90 日保管しおから削陀やアヌカむブを行うこずが倚いです。監査ログは芁件によっおは 365 日以䞊の保持が必芁な堎合もありたすが、それでも叀いデヌタをデヌタベヌスに負荷をかけずに削陀する予枬可胜な方法が欲しいはずです。

監査には远加の期埅もありたす。通垞、履歎は䞍倉であるべきで、すべおの蚘録は远跡可胜who/what/when ずリク゚ストやセッションの文脈で、アクセスは制埡されるべきです誰でもセキュリティ関連むベントを芋られるべきではない。

これらのパタヌンは UI 蚭蚈にそのたた反映されたす。人々がデフォルトで期埅するフィルタ日付ピッカヌ、ナヌザヌ遞択、゚ンティティ怜玢、アクションのドロップダりンは、テヌブルずむンデックスがサポヌトすべきものであり、そうでなければログ量が増えたずきに管理䜓隓が遅くなりたす。

パヌティショニングが芋合うかどうかの刀断

パヌティショニングは監査ログのためのデフォルトの最適解ではありたせん。日垞的なク゚リず定期的なメンテナンスが互いに干枉し始めるほどテヌブルが倧きくなったずきに䟡倀を発揮したす。

単玔なサむズの目安ずしおはむベントテヌブルが数千䞇行芏暡に達したら蚈枬を始める䟡倀がありたす。テヌブルずむンデックスが数十ギガバむト玚になるず、単玔な日付怜玢でも遅くなったり予枬䞍胜になったりしたす。ディスクから読み蟌むデヌタペヌゞが増え、むンデックスの維持コストが高くなるためです。

最も明確なク゚リ䞊のサむンは、頻繁に小さい時間スラむス過去1日、過去1週を芁求するのに、PostgreSQL がテヌブルの倧郚分に觊れおしたっおいる堎合です。最近のアクティビティ画面が遅い、あるいは日付ナヌザヌやアクションでフィルタするず遅くなるなら芁泚意です。ク゚リプランで倧きなスキャンやバッファ読み蟌みが垞に倚いなら、䜙蚈なデヌタたで読んでいる可胜性がありたす。

メンテナンス面のサむンも同じくらい重芁です

  • VACUUM や autovacuum に以前より時間がかかる。
  • autovacuum が遅れ、デッドタプルブロヌトが増える。
  • マルチカラムむンデックスが予想以䞊に成長する。
  • メンテナンスず通垞トラフィックが重なるずロック競合が目立぀ようになる。

運甚コストはチヌムをパヌティショニングに駆り立おるゆっくりした圧力です。バックアップやリストアが遅くなり、ストレヌゞが増え、保持ゞョブが高コストになりたす。倧きな DELETE はブロヌトず远加の VACUUM 䜜業を生むからです。

䞻芁なゎヌルが「保持をシンプルにするこず」ず「最近の期間のク゚リを高速にするこず」なら、パヌティショニングは真剣に怜蚎する䟡倀がありたす。テヌブルが䞭皋床で、良いむンデックスでク゚リが既に高速なら、パヌティショニングは耇雑さを増すだけかもしれたせん。

むベント監査テヌブルに合うパヌティショニングの遞択肢

ほずんどの監査むベントデヌタでは、最も簡単で効果的なのは時間によるレンゞパヌティショニングです。ログは時間順に到着し、ク゚リは「過去24時間」「過去30日」ずいった時間窓に集䞭し、保持も時間ベヌスであるこずが倚いためです。時間パヌティションにすれば、叀いデヌタを削陀する代わりに叀いパヌティションを DROP するだけで枈み、巚倧な DELETE を避けられたす。

時間レンゞのパヌティショニングはむンデックスも小さく保おたす。各パヌティションが独自のむンデックスを持぀ため、先週だけを探すク゚リは䜕幎分もの履歎をカバヌする巚倧なむンデックスを蟿る必芁がありたせん。

ほかのスタむルもありたすが、ログや監査には圓おはたりにくいこずが倚いです

  • Listテナント別は、少数の非垞に倧きなテナントがいお、ク゚リの倚くが特定テナント内に収たる堎合に有効です。テナント数が䜕癟䜕千になるず扱いにくくなりたす。
  • Hash曞き蟌み分散は時間りィンドりのク゚リがない堎合に曞き蟌みを均等に分散する目的で有効ですが、保持や時系列の閲芧を難しくしたす。
  • サブパヌティショニング時間テナントは匷力ですが耇雑さが急速に増したす。非垞に高いスルヌプットや厳栌なテナント分離が必芁なシステム向けです。

時間を遞ぶなら、閲芧ず保持の仕方に合ったパヌティションサむズを遞んでください。倧量のデヌタや厳栌な保持がある堎合は日次パヌティションが適したす。䞭皋床のボリュヌムなら月次が管理しやすいです。

実甚䟋管理チヌムが毎朝の倱敗ログむンを確認し、過去7日で絞るなら、日次か週次パヌティションにしおおけばク゚リは最新のパヌティションだけを觊るこずが倚く、PostgreSQL は残りを無芖できたす。

どの方法を遞ぶにせよ、将来のパヌティション䜜成、遅延到着むベントの凊理、境界日付の区切りで䜕をするかずいった「退屈な郚分」を蚈画しおおくこずが重芁です。これらの手順がシンプルならパヌティショニングの効果は倧きくなりたす。

適切なパヌティションキヌの遞び方

高速なログ管理画面を構築
必須の時間フィルタヌを備えたログビュヌアを䜜り、最初から高速なク゚リを実珟したす。
AppMaster を詊す

良いパヌティションキヌは、図面䞊のデヌタの芋た目ではなく、実際の読み方に合臎したす。

むベントや監査ログでは、たず管理画面を芋おください人々が最初に䜿うフィルタは䜕ですか 倚くのチヌムではそれが時間範囲過去24時間、過去7日、カスタム期間です。これが圓おはたるなら、時間ベヌスのパヌティショニングがもっずも倧きく予枬しやすい利点をもたらしたす。

キヌは長期の玄束ず考えおください。䜕幎も続けお実行するク゚リ向けに最適化するこずになりたす。

人々が最初に䜿う「最初のフィルタ」から始める

ほずんどの管理画面はパタヌンがありたす時間範囲オプションでナヌザヌ、アクション、ステヌタス、リ゜ヌスなど。結果を早く狭めるものをパヌティションキヌにしおください。

珟実的なチェックポむント

  • デフォルトビュヌが「最近のむベント」なら、タむムスタンプでパヌティションする。
  • デフォルトビュヌが「あるテナントアカりントのむベント」なら、tenant_id が意味を持぀こずがあるが、テナントが十分倧きい堎合に限る。
  • 最初のステップが垞に「ナヌザヌを遞ぶ」なら user_id は魅力的に芋えるが、通垞は管理するパヌティションが倚くなりすぎる。

高カヌドinality のキヌは避ける

パヌティショニングは各パヌティションが意味のあるデヌタ塊になる堎合に最も効果的です。user_id、session_id、request_id、device_id のようなキヌは䜕千・䜕癟䞇ものパヌティションを生み、メタデヌタのオヌバヌヘッドず運甚の耇雑さを招き、しばしばプランニングを遅くしたす。

時間ベヌスのパヌティションはパヌティション数が予枬可胜です。日次、週次、月次からボリュヌムに合わせお遞んでください。少なすぎる幎次などの堎合は効果が小さく、倚すぎる時間毎などの堎合はオヌバヌヘッドが急増したす。

どのタむムスタンプを䜿うかcreated_at ず occurred_at

時間の意味を明確にしたしょう

  • occurred_atむベントがプロダクト内で実際に起きた時刻。
  • created_atデヌタベヌスがそれを蚘録した時刻。

監査では「い぀起きたかoccurred」が管理者にずっお重芁なこずが倚いです。ただし遅延到着オフラむンクラむアント、再詊行、キュヌが発生しやすい堎合、occurred_at は遅れお到着するこずがあり、その堎合は created_at でパヌティションし、occurred_at を怜玢甚にむンデックスする方が運甚面で安定したす。別の遞択肢ずしお、バックフィル方針を定め、叀いパヌティションが遅れお受け取るむベントを蚱容する蚭蚈もありたす。

時間の保存方法も決めおください。䞀般的には timestamptz を䜿い、UTC を゜ヌスオブトゥルヌスにしおビュヌ偎で衚瀺甚タむムゟヌンに倉換するのが安党です。こうするこずでパヌティション境界が安定し、サマヌタむムによる混乱を避けられたす。

ステップバむステップ蚈画ずロヌルアりト

フィルタヌを本圓のアプリに倉える
時間、アクタヌ、゚ンティティ、ステヌタスなど実際のフィルタヌに合うバック゚ンドず Web UI を生成したす。
アプリを䜜成

パヌティショニングは玠早い調敎ではなく、小さなマむグレヌションプロゞェクトずしお扱うず楜です。目暙は「簡単な曞き蟌み、予枬可胜な読み取り、定期的にできる保持操䜜」です。

実甚的なロヌルアりト蚈画

  1. ボリュヌムに合ったパヌティションサむズを遞ぶ。 月次パヌティションは月に数十䞇行皋床なら十分です。月に数千䞇行を挿入するなら、週次や日次パヌティションの方がむンデックスず VACUUM の負荷を抑えられたす。

  2. パヌティション化テヌブルのキヌず制玄を蚭蚈する。 PostgreSQL ではナニヌク制玄はパヌティションキヌを含める必芁がある堎合がありたす。よくあるパタヌンは (created_at, id) のように id を生成し、created_at をパヌティションキヌにするこずです。これにより埌で「この制玄は䜿えない」ず驚くこずを避けられたす。

  3. 将来のパヌティションを事前に䜜成する。 パヌティションが無くお挿入が倱敗する事態は避けおください。どのくらい先たで䜜るか䟋2–3か月先を決めお定期ゞョブにしおおきたす。

  4. パヌティションごずのむンデックスは小さく意図的に保぀。 パヌティショニングはむンデックスを無料にするわけではありたせん。倚くのむベントテヌブルでは、パヌティションキヌに加えお actor_id、entity_id、event_type のような珟実的な管理画面フィルタに察応する 1〜2 個のむンデックスが必芁です。「念のため」のむンデックスは避け、必芁になったずきに新しいパヌティションに远加し、叀いパヌティションをバックフィルしおください。

  5. 保持は行削陀ではなくパヌティション削陀で行うよう蚈画する。 180 日保持するなら、叀いパヌティションを DROP する方が速く、長時間の DELETE ずブロヌトを避けられたす。保持ルヌル、実行者、怜蚌方法を曞き残しおください。

小さな䟋

監査テヌブルが週に 500 䞇行増えるなら、created_at による週次パヌティションが劥圓な出発点です。先の 8 週間分のパヌティションを䜜成し、各パヌティションに actor_id 怜玢甚ず entity_id 怜玢甚の 2 ぀のむンデックスを持たせたす。保持期限が来たら最も叀い週次パヌティションを DROP したす。

内郚ツヌルを AppMaster で構築しおいるなら、早期にパヌティションキヌず制玄を決めおおくずデヌタモデルず生成コヌドが同じ前提に埓うので助かりたす。AppMaster は appmaster.io のようなプラットフォヌム名を保持しお䜿っおください。

管理画面のフィルタに察しおパヌティショニングが䜕を倉えるか

テヌブルをパヌティション化するず、管理画面のフィルタは単なる UI ではなくなりたす。それがク゚リが数個のパヌティションに觊れるか、䜕か月分も走査するかを巊右する䞻芁芁因になりたす。

実務䞊の倧きな倉化は時間フィルタが任意であっおはいけないこずです。ナヌザヌが日付範囲を指定しない怜玢「ナヌザヌ X の党おを芋せお」を蚱すず、PostgreSQL はすべおのパヌティションをチェックする必芁が出おきたす。各チェックが速くおも、倚くのパヌティションを開くずオヌバヌヘッドが生じペヌゞが遅く感じられたす。

よく効くルヌルはログや監査怜玢では時間範囲を必須にしお、デフォルトは「過去24時間」などにするこずです。真に「党期間」が必芁な堎合は、意図的な遞択にしお譊告を出すず良いでしょう。

フィルタをパヌティションプルヌニングに合わせる

パヌティションプルヌニングが有効になるには WHERE 句が PostgreSQL にずっお利甚可胜な圢でパヌティションキヌを含んでいる必芁がありたす。created_at BETWEEN X AND Y のようなフィルタはきれいにプルヌニングされたす。プルヌニングを壊しがちなパタヌンは、タむムスタンプを日付にキャストする、カラムを関数で包む、あるいはパヌティションキヌずは別の時間列でフィルタするこずです。

各パヌティション内では、むンデックスは実際に人々が䜿うフィルタに合うようにしおおいおください。実務䞊重芁になる組み合わせは、時間もうひず぀テナントワヌクスペヌス、ナヌザヌ、アクション、゚ンティティID、ステヌタスであるこずが倚いです。

゜ヌトずペヌゞネヌション浅いペヌゞングを保぀

パヌティショニングだけで深いペヌゞネヌションの遅さは解決したせん。管理画面が新着順で゜ヌトし、ナヌザヌがペヌゞ5000に飛ぶような操䜜をするず、OFFSET による深いペヌゞングは倧量の行をスキップするため遅くなりたす。

ログではカヌ゜ル型ペヌゞング「このタむムスタンプID より前のむベントを読み蟌む」の方が振る舞いが良いです。むンデックスを䜿いやすく、巚倧なオフセットを避けられたす。

プリセットも有効です。䞀般的な遞択肢をいく぀か甚意しおおくず良いでしょう過去24時間、過去7日、今日、昚日、カスタム範囲。プリセットは「党おを走査しおしたう」誀操䜜を枛らし、管理䜓隓を予枬可胜にしたす。

よくある間違いず萜ずし穎

監査 UI を玠早くプロトタむプ
SQL スニペットだけでなく動く管理画面で、パヌティションに配慮したク゚リを早期に詊せたす。
今すぐプロトタむプ

倚くのパヌティショニングプロゞェクトは単玔な理由で倱敗したすパヌティション自䜓は機胜しおいるのに、ク゚リや管理画面がそれに合わせお蚭蚈されおおらず、期埅される効果が出ないのです。パヌティショニングで効果を出すには、実際のフィルタず保持に基づいお蚭蚈しおください。

1) 間違った時間カラムでパヌティションしおしたう

プルヌニングは WHERE 句がパヌティションキヌず䞀臎するずきだけ起こりたす。created_at でパヌティションしおいるのに管理画面が event_time でフィルタしおいるず、期埅通りにパヌティションをスキップできず、より倚くのデヌタに觊れるこずになりたす。

2) 小さすぎるパヌティションを倧量に䜜る

時間ごず時間単䜍のパヌティションは綺麗に芋えたすが、オブゞェクト数が増えク゚リプランナヌの負担や管理負荷が䞊がりたす。極端な曞き蟌み量ず厳栌な保持がない限り、日次か月次の方が運甚は楜です。

3) 「グロヌバルな䞀意性」がただ効くず思い蟌む

パヌティション化されたテヌブルでは䞀郚のナニヌク制玄はパヌティションキヌを含めないず党䜓に察しお保蚌できたせん。チヌムは event_id が垞に䞀意だず期埅しお驚くこずがありたす。グロヌバルに䞀意な識別子が必芁なら UUID を䜿い、必芁ならアプリ偎で敎合性を管理しおください。

4) 管理画面が自由に広い怜玢を蚱しおしたう

芪切な怜玢ボックスでフィルタなし怜玢を蚱すず、パヌティション化されたログテヌブルでは党パヌティションを走査するこずになりがちです。メッセヌゞ本文ぞのフリヌテキスト怜玢は特に危険です。ガヌドレヌルを远加しお時間範囲を必須にし、デフォルト範囲を制限しおください。

5) 保持蚈画がないパヌティションの扱いも未定

パヌティショニングは保持を自動的に解決したせん。蚈画が無いず叀いパヌティションが溜たり、ストレヌゞが膚らみ、メンテナンスが遅くなりたす。

単玔な運甚ルヌルがあれば防げたす生デヌタの保持期間を定矩し、将来パヌティションを自動䜜成しお叀いパヌティションを削陀し、むンデックスを䞀貫しお適甚し、パヌティション数ず境界日を監芖し、最も遅い管理フィルタを実デヌタ量でテストするこずです。

実行前のクむックチェックリスト

技術的負債なしで反埩
スキヌマから本番アプリぞ玠早く移行し、芁件倉曎に合わせお繰り返し改善したす。
䜜り始める

パヌティショニングは監査ログにずっお倧きなメリットをもたらしたすが、日垞業務の手間も増えたす。スキヌマ倉曎前に実際の利甚方法をチェックしおください。

䞻芁な痛みが「誰かが『過去24時間』や『今週』を開くず管理ペヌゞがタむムアりトする」こずなら、パヌティショニングは適合に近いです。䞻芁なク゚リが「ナヌザヌIDの党履歎」ばかりなら、UI を倉えない限りパヌティショニングの効果は限定的です。

チヌムを正気に保぀ための短いチェックリスト

  • 時間範囲がデフォルトのフィルタであるこず。 倚くの管理ク゚リは明確なりィンドりfrom/toを含むべきです。開攟的な怜玢が倚ければ、パヌティションプルヌニングの効果は枛りたす。
  • 保持は行削陀ではなくパヌティションの DROP で管理するこず。 叀いパヌティションを砎棄するこずに抵抗がないか確認しおください。
  • パヌティション数が劥圓であるこず。 日次・週次・月次のどれにするか幎間あたりのパヌティション数を芋積もっお決めおください。小さすぎるずオヌバヌヘッドが増え、倧きすぎるず効果が薄れたす。
  • むンデックスが実際のフィルタに合っおいるこず。 パヌティションキヌ以倖にも、よく䜿うフィルタに合わせたパヌティションごずのむンデックスが必芁です。
  • パヌティションの自動䜜成ず監芖をしおいるこず。 将来パヌティションを䜜る定期ゞョブがあり、倱敗を怜知できる仕組みが必芁です。

実甚的なテストサポヌトや運甚チヌムがよく䜿う䞊䜍3぀のフィルタを芋お、それらのうち2぀が「時間範囲もう1぀」になっおいるなら、PostgreSQL のむベントテヌブル向けパヌティショニングは真剣に怜蚎する䟡倀がありたす。

珟実的な䟋ず次の実務的ステップ

サポヌトチヌムが垞に開いおいる画面は2぀"Login events"成功倱敗ログむンず "Security audits"パスワヌドリセット、ロヌル倉曎、APIキヌ曎新。顧客が䞍審な動䜜を報告するず、チヌムはナヌザヌで絞り、盎近数時間を確認し短いレポヌトを゚クスポヌトしたす。

パヌティショニング前は、すべおが䞀぀の倧きな events テヌブルにあり、急速に増えお単玔な怜玢が遅くなりたす。保持も面倒です倜間ゞョブで叀い行を削陀したすが、倧量の DELETE は時間がかかりブロヌトを生み、通垞トラフィックず競合したす。

event_timeむベント発生時刻で月次パヌティションを䜜った埌、ワヌクフロヌは改善したす。管理画面で時間フィルタを必須にしおおけば、倚くのク゚リは12個のパヌティションだけを觊りたす。PostgreSQL は遞択範囲倖のパヌティションを無芖できるのでペヌゞ衚瀺が速くなりたす。保持も定型的になりたす䜕癟䞇行もの DELETE を実行する代わりに叀いパヌティションを DROP するだけです。

ただしフリヌテキスト怜玢を "党期間" に察しお実行するのは䟝然ずしお難題です。IP アドレスや挠然ずしたフレヌズを日付制限なしで怜玢するず、パヌティショニングは安くしたせん。察凊法は補品偎の振る舞いにありたす怜玢のデフォルトを時間りィンドりにし、「過去24時間7日30日」を明確に提瀺するこずです。

有効な次のステップ

  • たず管理画面のフィルタをマップする。どのフィヌルドが䜿われ、どれを必須にするかを曞き出す。
  • 閲芧方法に合うパヌティションを遞ぶ。月次を出発点にし、ボリュヌムが増えたら週次ぞ移行する。
  • 時間範囲を第䞀玚のフィルタにする。UI で「日付なし」を蚱しおいるず遅くなりたす。
  • 実際のフィルタに合わせおむンデックスを敎える。時間が垞にあるなら、時間優先のむンデックス戊略が基準になりたす。
  • パヌティション境界に合わせた保持ルヌルを決める䟋13か月保持しおそれより叀いものは DROP。

内郚管理画面を AppMasterappmaster.ioで䜜るなら、これらの前提を早めにモデル化しおおく䟡倀がありたす時間限定のフィルタをデヌタモデルの䞀郚ずしお扱えば、ログ容量が増えおもク゚リ性胜が保たれたす。

よくある質問

PostgreSQLのパヌティショニングはむベント監査テヌブルでい぀有効ですか

パヌティショニングは、䞀般的なク゚リが時間で絞られるたずえば「過去24時間」や「過去7日間」など堎合、そしおテヌブルが倧きくなっおむンデックスやメンテナンスが負担になっおきたずきに最も有効です。䞻芁なク゚リが「ナヌザヌXの党履歎」のようなものなら、UIで時間フィルタヌを匷制し、各パヌティションに適切なむンデックスを付けない限り、パヌティショニングはむしろ運甚負荷を増やすこずがありたす。

ログや監査デヌタに最適なパヌティショニング方法は䜕ですか

ログや監査では、曞き蟌みが時間順に到着し、ク゚リが時間窓から始たるこずが倚く、保持期間も時間ベヌスであるため、時間によるレンゞパヌティショニングが暙準的に最も適しおいたす。ListテナントやHashは特殊なケヌスで有効ですが、保持や時系列閲芧が難しくなるこずが倚いです。

監査テヌブルのパヌティションキヌはどう遞べばいいですか

ナヌザヌが最初にフィルタするフィヌルドを遞んでください。ほずんどの管理画面では最初のフィルタが時間範囲なので、時間ベヌスのパヌティショニングが最も予枬しやすい遞択です。パヌティションキヌの倉曎は倧きなマむグレヌションになるので、長期的な玄束ずしお考えおください。

なぜ通垞 `user_id` でのパヌティショニングは良くないのですか

タむムスタンプやテナント識別子のように、管理可胜な数のパヌティションになるキヌを䜿いたしょう。user_id のような高いカヌドinality のキヌは、数千のパヌティションを生み出し管理コストずプランナヌ負荷を増やすため避けるべきです。

`created_at` ず `occurred_at` のどちらでパヌティションすべきですか

遅延到着オフラむンクラむアントや再詊行、キュヌを信甚できない堎合は created_at でパヌティションする方が運甚䞊安定したす。むベント発生時刻が確実で「この期間に䜕が起きたか」が重芁なら occurred_at で分割する遞択肢もありたす。折衷案ずしおは created_at でパヌティションし、occurred_at を怜玢甚にむンデックスする方法がありたす。

管理画面で時間範囲フィルタを必須にする必芁はありたすか

はい。テヌブルをパヌティションするず、時間範囲を指定しない怜玢は倚くのパヌティションを怜査する必芁が出おきたす。管理画面では時間範囲を必須にし、デフォルトを「過去24時間」にするなどしお、党期間怜玢は意図的な操䜜に限定しおください。

ク゚リでパヌティションプルヌニングを壊しおしたうのはどんなパタヌンですか

はい。パヌティションキヌを関数でラップしたり䟋えばタむムスタンプを日付にキャストする、パヌティションキヌずは別の時間列でフィルタするずパヌティションプルヌニングが効かなくなるこずが倚いです。created_at BETWEEN X AND Y のようなシンプルな圢で曞くずプルヌニングが確実になりたす。

パヌティション化されたむベントテヌブルでのベストなペヌゞング方法は

ログビュヌの深い OFFSET ペヌゞネヌションは避けおください。代わりにカヌ゜ル方匏䟋「この (timestamp, id) より前のむベントを読み蟌む」を䜿うずむンデックスフレンドリヌで、テヌブルが倧きくなっおも性胜が安定したす。

パヌティショニングはナニヌク制玄やIDにどう圱響したすか

PostgreSQL では、パヌティショニングされたテヌブルの䞀郚のナニヌク制玄はパヌティションキヌを含めないず党䜓に察しお保蚌できたせん。実甚的なパタヌンずしお、パヌティションキヌが created_at の堎合は (created_at, id) のような耇合䞀意性を䜿うか、倖郚向け識別子ずしお UUID を䜿っおアプリケヌション偎で敎合性を保぀方法がありたす。

テヌブルをパヌティション化した埌の最も簡単な保持戊略は䜕ですか

パヌティションを萜ずすDROPこずで叀いデヌタを削陀するのが最もシンプルで速い方法です。倧芏暡な DELETE はボリュヌムず VACUUM の負荷を生むため、保持ルヌルはパヌティション境界に合わせお自動化しおおくのが実運甚でのコツです。

始めやすい
䜕かを䜜成する 玠晎らしい

無料プランで AppMaster を詊しおみおください。
準備が敎ったら、適切なサブスクリプションを遞択できたす。

始める
監査ログのむベントテヌブルにおけるPostgreSQLのパヌティショニング | AppMaster