14
PostgreSQL DB Tuning 기업사례 PGDay.Seoul 2017 송춘자([email protected])

[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

Embed Size (px)

Citation preview

Page 1: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

PostgreSQL

DB Tuning 기업사례

PGDay.Seoul 2017

송춘자([email protected])

Page 2: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

송춘자 [email protected]

ChemEssen,Inc 개발부서장

고려대학교 컴퓨터정보통신대학원 소프트웨어공학과

‘16 PostgreSQL DB 시작

‘99 web program 시작

‘97 Oracle Process Monitoring tool 제작 by PB

‘96 OCP-DBA 7.3 취득

‘93 UNIX & C System program 시작

Page 3: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

About ChemEssen, Inc

2006 설립, 40개 기술특허, 글로벌 웹서비스

화학기술과 정보기술의 융합 서비스 제공

Chemical Quantum Application + Mathematical Modeling + IT

Page 4: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

검색 속도 개선 상황 발생

신규 자료 입력 발생

Master data 285만건 1억6백만건, 37배 증가

Master data size 25 GB 1 TB, 40배 증가

검색속도 저하 발생

651 msec 10분 17초, 948 배 증가 (ID)

1.2 초 7분 20초, 367 배 증가 (name)

773 msec 10분, 776 배 증가 (smiles)

Chemical data 특수성

IUPAC Name

• (3R,6R,7R)-2,3,7-trimethyl-6-(propan-2-yl)tetradecane

• N'-[(2E)-3-(3,4-dimethoxyphenyl)prop-2-enoyl]-2-phenylacetohydrazide

Smiles

• CC(C)CCCC(C)C3CCC4C2CC=C1CC(O)CCC1(C)C2CCC34C

Formula

• C27H46O

• C11H14O3S2

Page 5: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

속도 개선 결과

구분 Column type 285만건 1억6백만건

개선전

1억6백만건

개선후

ID VC(12) 651 msec 10분 17초 32 msec

Name VC(4890) 1.2 sec 6분 16초 7 sec

Smiles Text 773 msec 10분 25초 547 msec

Formula VC(50) 1.2 sec 10분 33초 32 msec

InChIKey VC(50) 930 msec 10분 22초 46 msec

Page 6: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

속도개선방법

개발소스에서 사용중인 SQL query 변경

업무규칙 변경 가능 부분 협의 적용

Index 재생성

Text Search 기능 적용

DBMS Parameter 조정

Page 7: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

Text Search 기능 적용 순서

검색 전용 tsvector 컬럼 추가

ALTER TABLE chemicalsc.tb_chem_info

ADD COLUMN textsearchable_index_col tsvector;

Data update

UPDATE chemicalsc.tb_chem_info SET textsearchable_index_col

= to_tsvector('english', coalesce(replace(upper(iupac_name), ' ', ''), ''));

Gin 인덱스 생성

CREATE INDEX idx_chem_info_textsearchable_index_col

ON chemicalsc.tb_chem_info USING gin (textsearchable_index_col)

TABLESPACE tbs_chemical_idx00;

Page 8: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

Sql query - 개선 전

SELECT chem_info_id, iupac_name,

(length('Benzene') - length(iupac_name) + 100) as jaro

FROM chemicalsc.tb_chem_info

WHERE iupac_name_upper_stuck like replace(upper( '%Benzene%' ), ' ', '' )

ORDER BY jaro desc, iupac_name asc

LIMIT 2000;

Page 9: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

Sql query - 개선 후

SET work_mem to '100MB';

SELECT chem_info_id, iupac_name,

(length('benzen’) - length(iupac_name)+100) as jaro

FROM chemicalsc.tb_chem_info

WHERE textsearchable_index_col @@ to_tsquery('english', 'benzen')

ORDER BY jaro desc, iupac_name asc

LIMIT 2000;

Page 10: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

DB Server Spec

Version: PostgreSQL 9.5.8 on x86_64-pc-linux-gnu

CPU : XeonE5-2643 3.3GHz*8

RAM : 32 GB

Disk : 24 TB (1+0)

Max Connection : 100

Page 11: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

postgresql.conf

effective_cache_size

데이터 캐싱에 사용할 수 있는 메모리 양

인덱스 사용여부 결정

shaed_buffers할당메모리+사용가능한OS캐시 메모리

시스템 전체메모리 *(50% ~ 75%)

32GB * 50% = 16GB, 32GB * 75% = 24GB

maintenance_work_mem

Vacuum, create index 작업시 사용

1GB당50MB

32 * 50MB = 1,600 MB

shared_buffers

Disk IO최소화 목적

시스템 전체 메모리 *25%

32 GB * 0.25 = 8 GB

Page 12: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

postgresql.conf

work_mem

sort, bitmap작업,hash join, merge join작업

최대크기=total RAM /max_connections/ 4

안전크기=total RAM /max_connections/ 16

세션마다 다르게 설정 가능

32 GB / 100 / 4 = 0.08 GB = 80 MB

32 GB / 100 / 16 = 0.02 GB = 20 MB

wal_buffers

DB변경사항을 임시 저장하는 버퍼

16MB

max_wal_size / min_wal_size

2GB / 1GB

stats_temp_directory

/run/shm

Page 13: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

Data update하면서…

인덱스 생성은 data insert / update 이후 생성

인덱스 생성된 상태에서

data file 301개 update 처리진행 42일 소요

Vaccum 설정 check 필수 – 1억건 이상

data file 301개 auto vaccum 처리 10일 소요

데이터 insert 시 COPY command 이용

set command 이후 copy command

Source data 파일 여러 개 분할하여 COPY 진행

입력 실패시 재작업 최소화

Page 14: [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자

Q & A

감사합니다