database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 10518 게시물 읽기
No. 10518
오라클의 통계정보관련 기능이 PostgreSQL에서 구현이 가능할까요?
작성자
dba
작성일
2025-03-14 11:00
조회수
79

안녕하세요

아래 오라클의 두 가지 기능

즉, 오라클은 통계정보 샘플링 기능과 통계정보가 갱신되지 않아야할 때 등 통계정보가 잠겨있고 백업 및 복구관리가 가능한데요 

PostgreSQL에서도 구현이 가능할까요? 만약 불가능 한 경우, 운영환경에서 통계정보갱신이 되지 않아야 하는 상황 등 통계정보 갱신 관리는 어떻게 하는지 궁금합니다.


1. 통계정보 샘플링 기능

오라클에서 schema1 스키마의 table1 테이블의 20%를 가지고 테이블,컬럼, 연관인덱스의 통계정보를 생성한 경우

execdbms_stats.gather_table_stats(ownname=>'schema1',tabname=>'table1',cascade=>TRUE,estimate_percent=>15);


2. 통계정보 백업 및 복구관리

2-1) 통계정보 백업테이블 drop

exec dbms_stat.drop_stat_table('emp'.'stats');


2-2) 통계정보 백업테이블 create

exec dbms_stats_create_stat_table('emp','stats');


2-3) 통계정보 백업(해당유저의 모든 테이블과 인덱스)

exec dbms_stat.export_schema_stats(ownname=>'emp',stattab=>'stats');

이 글에 대한 댓글이 총 1건 있습니다.

default_statistics_target 설정으로 통계정보 샘플링양을 지정할 수 있고,

그 수집된 통계 정보를 스냅샷 형태로 다른 테이블에 보관할 수는 있지만,

백업 받은 그 통계 정보를 다시 통계 정보 테이블에 반영할 수는 없습니다.

(극단적인 방법으로 슈퍼유저가 pg_statistics 테이블을 대상으로 DML 작업을 하면

되기는 하겠지만, 당연히 추천하지 않습니다. 그 뒤 무슨 일이 벌어질지 예상할 수 없습니다.)


1. 통계정보 수집량 변경하기

ioseph=> analyze verbose kostore;

정보:  "public.kostore" 자료 통계 수집 중

정보:  "kostore": 탐색한 페이지: 30000, 전체페이지: 33913, 실자료: 2085081개, 쓰레기자료: 0개; 표본 추출 자료: 30000개, 예상한 총 자료: 2357045개

ANALYZE

ioseph=> set default_statistics_target = 10000;

SET

ioseph=> analyze verbose kostore;

정보:  "public.kostore" 자료 통계 수집 중

정보:  "kostore": 탐색한 페이지: 33913, 전체페이지: 33913, 실자료: 2356915개, 쓰레기자료: 0개; 표본 추출 자료: 2356915개, 예상한 총 자료: 2356915개

ANALYZE


2. 통계정보 백업하기

통계정보 자료는 슈퍼유저만 접근 할 수 있기 때문에,

작업은 당연히 슈퍼유저로 해야할 것이고,

 stavaluesN 칼럼들이 anyarray 자료형으로 되어있기 때문에,

단순히 create table stats as select * from pg_statistic 으로 백업 받을 수는 없습니다.

해당 테이블의 각 칼럼 자료형을 찾아서 stvalues1..stvaluesN 칼럼의 자료형을 원본 테이블의 해당 칼럼 자료형의 배열형으로 지정해야하는 수고로움이 생기겠네요.

이렇게 만들어지기 때문에, 이 백업용 통계 정보 테이블은 각 테이블 단위로 있어야겠네요.

오라클처럼 함수 하나를 만들어서 써야 편할 것 같습니다.


그런데, 이렇게 잘 수집중에, 원본 테이블의 칼럼 구조가 바뀌면,

그 때는 백업 받은 통계정보 자료 수집용 테이블이 골치가 아프겠네요.


결론

통계정보를 백업받아서 그것을 다시 이용한다. (X)

통계 정보 자료를 주기적으로 백업한다(O, 생각보다 복잡한 작업이다.)

통계 정보 수집 대상 테이블의 칼럼 구조가 바뀌는 상황에 대처가 안된다.


이렇네요.

 

김상기(ioseph)님이 2025-03-14 13:00에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10518오라클의 통계정보관련 기능이 PostgreSQL에서 구현이 가능할까요? [1]
dba
2025-03-14
79
10517WAL 공부중인데 이게 정상인 상황인지 궁금합니다 [1]
박선웅
2025-02-26
131
10513link 오류 [2]
한만호
2025-02-12
136
10512archive_mode에서 on과 always의 차이가 무엇일까요? [1]
새내기
2025-02-11
120
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2025 DSN, All rights reserved.
작업시간: 0.012초, 이곳 서비스는
	PostgreSQL v17.4로 자료를 관리합니다