スポンサーリンク
IT全般

Dr.Sumで全テーブルのレコード件数一覧を可視化した話

IT全般
この記事は約3分で読めます。

― 2000万件問題を防ぐための最低限の仕組み ―

はじめに

Dr.Sum を運用していると、

  • このテーブル、今どれくらい件数がある?
  • 明細テーブルが 2000 万件に近づいていないか?

と気になる場面が出てきます。

SQL Server なら簡単ですが、
Dr.Sum では全テーブルの件数を自動取得できません。

そこで今回は、
制約を理解したうえで、最終的に Datalizer で件数を可視化できた方法をまとめます。


やりたかったこと

目的はシンプルです。

全テーブルのレコード件数を一覧で把握し、
2000 万件問題を事前に防ぎたい


Dr.Sum でできなかったこと

最初は

  • テーブル一覧を取得
  • ループして COUNT(*)

を考えましたが、Dr.Sum では

  • テーブル名を動的に FROM 句に渡せない
  • 動的 SQL が使えない

という制約があり、
全テーブルを自動で COUNT(*) する方法は不可能でした。

現実解:UNION ALL で件数を並べる

そこで割り切って、

  • 件数が増えやすいテーブルだけを対象に
  • UNION ALLCOUNT(*) を並べる

方法を採用しました。

SELECT 'テーブルA' AS テーブル名, COUNT(*) AS レコード件数 FROM テーブルA
UNION ALL
SELECT 'テーブルB', COUNT(*) FROM テーブルB;

派手さはありませんが、確実に動く方法です。

View化 → Datalizer で可視化

この SQL を View 化し、
Datalizer から一覧表示できるようにしました。

結果として、

  • 件数の多い順に並べる
  • 明細テーブルだけ確認する
  • CSV出力する

といった運用が簡単にできるようになりました。


2000 万件問題が発生する条件

Dr.Sum の 2000 万件問題は、次の 3 条件が揃ったときに発生します。

  1. 件数制限のあるライセンスを利用している
    例:M100(1テーブル最大 2,000 万件)
  2. 1 テーブルのレコード件数が上限に到達・超過している
  3. レコードが増える書き込み処理を実行した
    (インポート、INSERT など)

この状態で処理を行うと、

エラーコード:0x80004501
最大登録件数を超えました。

が発生し、データが入らなくなります

※ SELECT や Datalizer の表示は可能ですが、更新は止まります。

なぜ可視化が重要か

  • 2000 万件に 事前警告は出ない
  • 超えた瞬間に 処理が止まる
  • 止まってからの対応は影響が大きい

そのため、

1500 万件あたりから件数を把握できる状態を作ること

が重要でした。


まとめ

  • Dr.Sum では全テーブルの件数を自動取得できない
  • 制約を受け入れ、UNION ALL で件数を取得
  • View 化して Datalizer で可視化
  • 2000 万件問題は「見えていれば防げる」

結果として、

「結局、Datalizerで見えるようにしたのが一番良かった」

という結論に落ち着きました。

コメント

タイトルとURLをコピーしました