DBAtlas · データベース運用アトラス

最大のテーブル/コレクションを一覧表示

Oracle

SELECT segment_name, segment_type,
       ROUND(bytes/1024/1024, 1) AS mb
FROM dba_segments
WHERE segment_type IN ('TABLE','TABLE PARTITION')
ORDER BY bytes DESC
FETCH FIRST 10 ROWS ONLY;

インデックスも表示するには segment_type フィルタを外す。

PostgreSQL

SELECT relname AS table,
       pg_size_pretty(pg_total_relation_size(relid)) AS total
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 10;

pg_total_relation_size はテーブル + インデックス + TOAST の合計。テーブルのみなら pg_relation_size を使用する。

MySQL

SELECT table_name,
       ROUND((data_length + index_length)/1024/1024, 1) AS mb
FROM information_schema.tables
WHERE table_schema = DATABASE()
ORDER BY (data_length + index_length) DESC
LIMIT 10;

特定のスキーマに限定するには WHERE table_schema = 'name' を使用する。

SQL Server

SELECT TOP 10 OBJECT_NAME(object_id) AS table_name,
       SUM(reserved_page_count) * 8 / 1024 AS mb
FROM sys.dm_db_partition_stats
GROUP BY object_id
ORDER BY mb DESC;

reserved_page_count は予約済みの全ページ(データ + インデックス)を含む。

MongoDB

db.getCollectionNames()
  .map(c => ({ name: c, mb: +(db[c].stats().storageSize/1048576).toFixed(1) }))
  .sort((a, b) => b.mb - a.mb)
  .slice(0, 10)

storageSize は圧縮後のディスク上のサイズ。stats() のコストは大きなコレクションでも低い。

Redis

redis-cli --bigkeys
# To rank by memory (bytes): redis-cli --memkeys

どちらも SCAN でキースペース全体を走査する(サーバーはブロックしないが負荷は増える)。違いはメトリクスで、--bigkeys は型ごとに要素数/長さが最大のキーを、--memkeys は MEMORY USAGE によるメモリ消費量で報告する。単一キーには MEMORY USAGE <key> を使用する。

DBAtlas で開く →