O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
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
감사합니다
Próximos SlideShares
Carregando em…5
×

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

3.413 visualizações

Publicada em

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

Publicada em: Software
  • Seja o primeiro a comentar

[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 감사합니다

×