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

統計を更新(オプティマイザ用)

Oracle

EXEC DBMS_STATS.GATHER_TABLE_STATS('HR', 'EMPLOYEE');
-- Whole schema: EXEC DBMS_STATS.GATHER_SCHEMA_STATS('HR');

通常は AUTO タスクが夜間に収集する。問題発生時は手動で収集する。ESTIMATE_PERCENT=>AUTO_SAMPLE_SIZE が推奨。

PostgreSQL

ANALYZE customer;
-- Both cleanup and analyze: VACUUM ANALYZE customer;

autovacuum が自動で行う。急なデータロードの後に手動で ANALYZE を実行すると正確な実行計画が得られる。

MySQL

ANALYZE TABLE customer;

InnoDB では短時間の読み取りロックを取得する。大きなテーブルでは負荷の低い時間帯に実行する。

SQL Server

UPDATE STATISTICS dbo.customer WITH FULLSCAN;
-- Whole database: EXEC sp_updatestats;

FULLSCAN は最も正確だが最も高コスト。大きなテーブルではサンプリング(SAMPLE)が好ましい場合がある。

MongoDB

// There are no manual statistics; the planner measures at runtime.
// To clear a stale plan cache:
db.customer.getPlanCache().clear()

MongoDB はコスト見積もりの代わりに実際の試行(plan racing)を行う。手動での統計は不要。

Redis

# Not applicable: Redis has no query optimizer / statistics.

コマンドの計算量は固定。パフォーマンスはデータ構造の選択に依存する。

DBAtlas で開く →