DBAtlas · 데이터베이스 운영 아틀라스

고급 옵션으로 통계 수집(히스토그램 등)

Oracle

EXEC DBMS_STATS.GATHER_TABLE_STATS(
  ownname=>'HR', tabname=>'EMPLOYEE',
  estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE,
  method_opt=>'FOR ALL COLUMNS SIZE AUTO', degree=>4);

method_opt는 히스토그램을, degree는 병렬도를 제어한다. 통계를 고정하려면 LOCK_TABLE_STATS를 사용한다.

PostgreSQL

ALTER TABLE customer ALTER COLUMN city SET STATISTICS 500;
ANALYZE customer;

컬럼별 샘플링 목표다. default_statistics_target이 전역 기본값을 지정한다.

MySQL

ANALYZE TABLE customer UPDATE HISTOGRAM ON city WITH 32 BUCKETS;

MySQL 8.0의 히스토그램 지원. 필터링에 쓰이지만 선택도가 낮은 컬럼에 유용하다.

SQL Server

UPDATE STATISTICS dbo.customer WITH FULLSCAN;
-- Filtered statistics: CREATE STATISTICS ... WHERE ...

FULLSCAN이 가장 정확하다. 대형 테이블에는 SAMPLE을 사용한다. 자동 갱신은 AUTO_UPDATE_STATISTICS.

MongoDB

// There are no manual statistics; the planner measures at runtime.
db.customer.getPlanCache().clear()

오래된 plan cache를 지우는 것 외에는 수동 통계가 필요 없다.

Redis

# Not applicable.

통계/옵티마이저가 없다.

Elasticsearch

# There is no statistics gathering; refresh searchability:
POST <index>/_refresh

쿼리 시점에 field data와 doc values를 사용한다. force merge는 세그먼트 수를 줄인다.

DBAtlas에서 열기 →