postgresでテーブルの使用容量を調べる

レガシーだが大きなサービスのローカル環境を構築中。

例によってstagingもdevelopmentもない。。
本番直にSCPでアップするデプロイ。。

なかなかヘビーな案件だ。
まずは開発環境とステージング、Git管理化へ置き、少しずつ良い方向に環境を変えて行きます。

本番環境でDBサイズを測って見た。

PostgreSQLのDBサイズ確認をするSQL

SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;
   datname   | pg_size_pretty
-------------+----------------
 template1   | 5630 kB
 template0   | 5614 kB
 postgres    | 5638 kB
 work        | 3357 MB
 xx_xxx_xx   | 32 GB
 xx_xxxx     | 74 GB
(6 rows)

74GB!!
これはやばい。。

テーブルごとのサイズ確認

SELECT
    relname,
    reltuples as rows,
    (relpages::int8 * 8192) as bytes,
    (relpages::int8 * 8192/1024) as KB,
    (relpages::int8 * 8192/1024/1024) as MB
FROM
    pg_class
WHERE
relname = 'account_aaa'
OR relname = 'reward_aaa'
OR relname = 'user_reward_month'
OR relname = 'action_bbb'
OR relname = 'rt_actions'
OR relname = 'action_log_aaa'
OR relname = 'basic_report_daily'

こんな感じでサイズ取得できました。

               relname               |    rows     |   bytes    |   kb    |  mb
-------------------------------------+-------------+------------+---------+------
rt_actions                           | 1.09986e+07 | 1111867392 | 1085808 | 1060
basic_report_daily                   |  7.4398e+06 | 1417371648 | 1384152 | 1351

テーブルごとにDumpするかデータセンターに出向いて外付けHDDにcopyするかの2択(従量制の環境でしたので)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする