Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
PostgreSQL
DB Tuning 기업사례
PGDay.Seoul 2017
송춘자(cjsong@naver.com)
송춘자 cjsong@naver.com
 ChemEssen,Inc 개발부서장
 고려대학교 컴퓨터정보통신대학원 소프트웨어공학과
 ‘16 PostgreSQL DB 시작
 ‘99 web program 시작
 ‘97 O...
About ChemEssen, Inc
 2006 설립, 40개 기술특허, 글로벌 웹서비스
 화학기술과 정보기술의 융합 서비스 제공
 Chemical Quantum Application + Mathematical M...
검색 속도 개선 상황 발생
 신규 자료 입력 발생
 Master data 285만건  1억6백만건, 37배 증가
 Master data size 25 GB  1 TB, 40배 증가
 검색속도 저하 발생
 6...
속도 개선 결과
구분 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
...
속도개선방법
 개발소스에서 사용중인 SQL query 변경
 업무규칙 변경 가능 부분 협의 적용
 Index 재생성
 Text Search 기능 적용
 DBMS Parameter 조정
Text Search 기능 적용 순서
 검색 전용 tsvector 컬럼 추가
ALTER TABLE chemicalsc.tb_chem_info
ADD COLUMN textsearchable_index_col tsvect...
Sql query - 개선 전
SELECT chem_info_id, iupac_name,
(length('Benzene') - length(iupac_name) + 100) as jaro
FROM chemicalsc.t...
Sql query - 개선 후
SET work_mem to '100MB';
SELECT chem_info_id, iupac_name,
(length('benzen’) - length(iupac_name)+100) as ...
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 T...
postgresql.conf
 effective_cache_size
 데이터 캐싱에 사용할 수 있는 메모리 양
 인덱스 사용여부 결정
 shaed_buffers할당메모리+사용가능한OS캐시 메모리
 시스템 전체메...
postgresql.conf
 work_mem
 sort, bitmap작업,hash join, merge join작업
 최대크기=total RAM /max_connections/ 4
 안전크기=total RAM ...
Data update하면서…
 인덱스 생성은 data insert / update 이후 생성
 인덱스 생성된 상태에서
data file 301개 update 처리진행 42일 소요
 Vaccum 설정 check 필수...
Q & A
감사합니다
Upcoming SlideShare
Loading in …5
×

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

930 views

Published on

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

Published in: Software
  • Be the first to comment

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

  1. 1. PostgreSQL DB Tuning 기업사례 PGDay.Seoul 2017 송춘자(cjsong@naver.com)
  2. 2. 송춘자 cjsong@naver.com  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 시작
  3. 3. About ChemEssen, Inc  2006 설립, 40개 기술특허, 글로벌 웹서비스  화학기술과 정보기술의 융합 서비스 제공  Chemical Quantum Application + Mathematical Modeling + IT
  4. 4. 검색 속도 개선 상황 발생  신규 자료 입력 발생  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
  5. 5. 속도 개선 결과 구분 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
  6. 6. 속도개선방법  개발소스에서 사용중인 SQL query 변경  업무규칙 변경 가능 부분 협의 적용  Index 재생성  Text Search 기능 적용  DBMS Parameter 조정
  7. 7. 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;
  8. 8. 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;
  9. 9. 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;
  10. 10. 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
  11. 11. 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
  12. 12. 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
  13. 13. 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 진행  입력 실패시 재작업 최소화
  14. 14. Q & A 감사합니다

×