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

More Related Content

What's hot (20)

PDF
Mvcc in postgreSQL 권건우
PgDay.Seoul
 
PDF
Database option SDO mismatch: PDB installed version 12.1.0.2.0. CDB installed...
Navneet Upneja
 
PDF
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
PgDay.Seoul
 
PPTX
MySQL8.0_performance_schema.pptx
NeoClova
 
PDF
Tanel Poder - Performance stories from Exadata Migrations
Tanel Poder
 
PDF
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
PgDay.Seoul
 
PDF
5 Steps to PostgreSQL Performance
Command Prompt., Inc
 
PDF
Intro ProxySQL
I Goo Lee
 
PPT
Oracle 10g Performance: chapter 02 aas
Kyle Hailey
 
PDF
Learning postgresql
DAVID RAUDALES
 
PDF
Tanel Poder - Scripts and Tools short
Tanel Poder
 
PDF
MySQL 8.0 Optimizer Guide
Morgan Tocker
 
PDF
Oracle Database SQL Tuning Concept
Chien Chung Shen
 
PDF
PostgreSQL: Advanced indexing
Hans-Jürgen Schönig
 
PPTX
MySQL_MariaDB-성능개선-202201.pptx
NeoClova
 
PDF
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
MongoDB
 
PDF
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon Web Services Korea
 
PPTX
Understanding my database through SQL*Plus using the free tool eDB360
Carlos Sierra
 
PDF
ProxySQL High Avalability and Configuration Management Overview
René Cannaò
 
PDF
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
NAVER D2
 
Mvcc in postgreSQL 권건우
PgDay.Seoul
 
Database option SDO mismatch: PDB installed version 12.1.0.2.0. CDB installed...
Navneet Upneja
 
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
PgDay.Seoul
 
MySQL8.0_performance_schema.pptx
NeoClova
 
Tanel Poder - Performance stories from Exadata Migrations
Tanel Poder
 
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
PgDay.Seoul
 
5 Steps to PostgreSQL Performance
Command Prompt., Inc
 
Intro ProxySQL
I Goo Lee
 
Oracle 10g Performance: chapter 02 aas
Kyle Hailey
 
Learning postgresql
DAVID RAUDALES
 
Tanel Poder - Scripts and Tools short
Tanel Poder
 
MySQL 8.0 Optimizer Guide
Morgan Tocker
 
Oracle Database SQL Tuning Concept
Chien Chung Shen
 
PostgreSQL: Advanced indexing
Hans-Jürgen Schönig
 
MySQL_MariaDB-성능개선-202201.pptx
NeoClova
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
MongoDB
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon Web Services Korea
 
Understanding my database through SQL*Plus using the free tool eDB360
Carlos Sierra
 
ProxySQL High Avalability and Configuration Management Overview
René Cannaò
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
NAVER D2
 

Similar to [Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자 (20)

PDF
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
Seok-joon Yun
 
PDF
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
PgDay.Seoul
 
PPTX
효율적인 SQL 작성방법 1주차
희동 강
 
PPTX
DBMS 아키텍처
HaksunLEE6
 
PDF
제 10회 엑셈 수요 세미나 자료 연구컨텐츠팀
EXEM
 
PDF
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
엑셈
 
PPT
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
Kenu, GwangNam Heo
 
PPTX
데이타베이스 기본튜닝
Jinuk Bhak
 
PDF
SPA(SQL Performance Analyze)를 이용한 통계 정보 수집_Wh oracle
엑셈
 
PPTX
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
BJ Jang
 
PPTX
Db optimal solution
Park SooHyun
 
PDF
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
Seok-joon Yun
 
PPTX
효율적인Sql작성방법 4주차
희동 강
 
PPTX
효율적인Sql작성방법 3주차
희동 강
 
PDF
Database 튜닝 교육 110124
한 경만
 
PDF
Fundamentals of Oracle SQL
JAEGEUN YU
 
PDF
성능 좋은 SQL 작성법
Devgear
 
PDF
Oracle Query Optimizer 관련 Parameter_OracleParameter
엑셈
 
PDF
PostgreSQL로 배우는 SQL 기초
Jiho Lee
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
Seok-joon Yun
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
PgDay.Seoul
 
효율적인 SQL 작성방법 1주차
희동 강
 
DBMS 아키텍처
HaksunLEE6
 
제 10회 엑셈 수요 세미나 자료 연구컨텐츠팀
EXEM
 
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
엑셈
 
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
Kenu, GwangNam Heo
 
데이타베이스 기본튜닝
Jinuk Bhak
 
SPA(SQL Performance Analyze)를 이용한 통계 정보 수집_Wh oracle
엑셈
 
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
BJ Jang
 
Db optimal solution
Park SooHyun
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
Seok-joon Yun
 
효율적인Sql작성방법 4주차
희동 강
 
효율적인Sql작성방법 3주차
희동 강
 
Database 튜닝 교육 110124
한 경만
 
Fundamentals of Oracle SQL
JAEGEUN YU
 
성능 좋은 SQL 작성법
Devgear
 
Oracle Query Optimizer 관련 Parameter_OracleParameter
엑셈
 
PostgreSQL로 배우는 SQL 기초
Jiho Lee
 
Ad

More from PgDay.Seoul (20)

PDF
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
PgDay.Seoul
 
PDF
[pgday.Seoul 2022] PostgreSQL with Google Cloud
PgDay.Seoul
 
PDF
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
PgDay.Seoul
 
PDF
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
PgDay.Seoul
 
PDF
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
PgDay.Seoul
 
PDF
[Pgday.Seoul 2019] Advanced FDW
PgDay.Seoul
 
PDF
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
PgDay.Seoul
 
PDF
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
PgDay.Seoul
 
PDF
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기
PgDay.Seoul
 
PDF
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
PgDay.Seoul
 
PDF
[Pgday.Seoul 2018] replacing oracle with edb postgres
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
PgDay.Seoul
 
PDF
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
PgDay.Seoul
 
PDF
PostgreSQL 9.6 새 기능 소개
PgDay.Seoul
 
PDF
pg_hba.conf 이야기
PgDay.Seoul
 
PDF
Pgday bdr 천정대
PgDay.Seoul
 
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
PgDay.Seoul
 
[pgday.Seoul 2022] PostgreSQL with Google Cloud
PgDay.Seoul
 
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
PgDay.Seoul
 
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
PgDay.Seoul
 
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
PgDay.Seoul
 
[Pgday.Seoul 2019] Advanced FDW
PgDay.Seoul
 
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
PgDay.Seoul
 
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
PgDay.Seoul
 
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기
PgDay.Seoul
 
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
PgDay.Seoul
 
[Pgday.Seoul 2018] replacing oracle with edb postgres
PgDay.Seoul
 
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
PgDay.Seoul
 
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
PgDay.Seoul
 
[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명
PgDay.Seoul
 
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
PgDay.Seoul
 
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
PgDay.Seoul
 
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
PgDay.Seoul
 
PostgreSQL 9.6 새 기능 소개
PgDay.Seoul
 
pg_hba.conf 이야기
PgDay.Seoul
 
Pgday bdr 천정대
PgDay.Seoul
 
Ad

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

  • 2. 송춘자 [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 시작
  • 3. About ChemEssen, Inc  2006 설립, 40개 기술특허, 글로벌 웹서비스  화학기술과 정보기술의 융합 서비스 제공  Chemical Quantum Application + Mathematical Modeling + IT
  • 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. 속도 개선 결과 구분 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. 속도개선방법  개발소스에서 사용중인 SQL query 변경  업무규칙 변경 가능 부분 협의 적용  Index 재생성  Text Search 기능 적용  DBMS Parameter 조정
  • 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. 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. 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. 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. 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. 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. 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 진행  입력 실패시 재작업 최소화