SlideShare a Scribd company logo
제 5회 엑셈 수요 세미나 자료
EXEM seminar report no. 005 (2016.06.23)
Research & Contents Team
Table of Agenda
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
01.
02.
[MySQL] MVCC 기능 분석을 위한 page dump
[PostgreSQL] vacuum의 거의 모든 것 (1차)
Oracle Deep Internal
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
01. [MySQL] MVCC 기능 분석을 위한 page dump
발표자: 연구컨텐츠팀 이근오
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
MVCC 테스트
INSERT “A”
Session 1 Session 2
“Repeatable read, Read only” 설정
Session1 : T1 테이블에 INSERT “A”
Session2 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:04:51” 시점 데이타 조회  P1,P2,P3 모두 “A” 조회
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
MVCC 테스트
UPDATE “B”
Session 1 Session 3
Session 2
Session1 : T1 테이블에 UPDATE “B” WHERE “P1”
Session2 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:04:51” 시점데이타 조회  P1,P2,P3 = “A” 조회  MVCC 구현확인
Session3 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:05:31” 시점데이타 조회  P1 =“B” P2,P3=“A” 조회
“Repeatable read, Read only” 설정
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
MVCC 테스트
UPDATE “C”
Session 1 Session 4Session 2
Session 3
Session1 : T1 테이블에 UPDATE “C” WHERE “P1”
Session2 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:04:51” 시점데이타 조회  P1,P2,P3 = “A” 조회
Session3 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:05:31” 시점데이타 조회  P1 =“B” P2,P3=“A” 조회  MVCC 구현확인
Session4 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:05:58” 시점데이타 조회  P1 =“C” P2,P3=“A” 조회  MVCC 구현확인
“Repeatable read, Read only” 설정
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
https://dev.mysql.com/doc/internals/en/innodb-page-example.html
MySQL Internals Manual
MySQL 홈페이지에 게시되어 있는
MySQL Internals Manual - Dump 예시
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
MySQL Internals
INSERT “QQ1”,“A” 후 Dump (TABLE) INSERT “QQ1”,“A” 후 Dump (UNDO)
T1 테이블에 INSERT “A”를 실행한 후, TABLE PAGE(t1.ibd 파일)와 UNDO PAGE(ibdata1 파일)의
Dump 결과를 확인해보면 동일한 데이터가 저장된 것을 확인할 수 있다.
“QQ2”,“A”
“QQ3”,“A”
“QQ2”,“A”
“QQ3”,“A”
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
MySQL Internals
UPDATE “B” WHERE “QQ1” 후 Dump (TABLE) UPDATE “B” WHERE “QQ1” 후 Dump (UNDO)
T1 테이블에 UPDATE “B”를 실행하고 TABLE PAGE(t1.ibd 파일)
와 UNDO PAGE(ibdata1 파일)의 Dump 결과를 확인해 보면
1. TABLE PAGE : “B”로 변경됨
2. UNDO PAGE : 처음 “A”로 INSERT한 데이터와
UPDATE “B” 데이터가 저장된 것을 확인.
 MySQL에서 MVCC 구현을 UNDO 페이지에 페이지를 저장
해서 구현하는 것으로 추정됨.
Oracle Deep Internal
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
02. [PostgreSQL] vacuum의 거의 모든 것 (1차)
발표자: 연구컨텐츠팀 김숙진
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
1. Vacuum 정의 및 필요성
1) 변경 및 삭제된 자료들이 차지하고 있는 디스크 공간을 확보하기 위해서
2) Query Planner가 사용할 자료의 통계 정보를 갱신하기 위해서
3) 실자료 지도(visibility map, VM)의 정보를 갱신하기 위해서
(VM은 인덱스 전용의 검색 성능을 향상시키기 위해 사용함)
4) 트랜잭션 id가 겹침으로 인해 오래된 자료의 손실이 발생하는 것을 방지하기 위해서
2. Vacuum의 필요성
1. Vacuum의 정의 PostgreSQL에서 특정 튜플을 update하거나 delete 한다고 해서 해당 영역이 자동으로 재사용되
거나 사라지지 않는다. 이렇게 오래된 영역을 정리하여 공간을 반환하는 명령어가 Vacuum이다.
≒ 디스크 조각 모음
VM (Visibility Map)
실제 사용하는 자료의 정보만 보관,
FSM과 반대로 사용 공간에 대한 정보를 저장
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
FSM
(Free Space Map)
2. Vacuum 실행 구조
FSM (Free Space Map) : Vacuum의 기준
• 페이지의 빈 공간에 대한 정보를 보관
• 데이터베이스 내에 사용하지 않은 공간의 위치를 추적
Oracle, InnoDB는 undo(rollback) segment를 사용하여 MVCC 구현하는 반면, PostgreSQL는 내부 페이지를 사용함.
즉, update, delete된 행을 즉시 제거하지 않고, 이 공간을 VACUUM 작업을 통해서 반환함.
기존 테이블
ID NAME
1 Test1
2 Test2
3 Test3
4 Test4
5 Test5
변경 테이블
ID NAME
1 Test1
2 Test2
3 Test3
4 Test4
5 Test5
3 Test03
• Test3을 Test03으로 변경
• Test5를 삭제
참고: http://blog.gaerae.com/2015/09/postgresql-vacuum-fsm.html
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
FSM
(Free Space Map)
2. Vacuum 실행 구조
기존 테이블
ID NAME
1 Test1
2 Test2
3 Test3
4 Test4
5 Test5
3 Test03
변경 테이블
ID NAME
1 Test1
2 Test2
3 Test3
4 Test4
6 Test6
3 Test03
• Test 6 추가
6 Test6
• 새로운 데이터 insert시, FSM 확인 후 빈 공간에 데이터 추가
참고: http://blog.gaerae.com/2015/09/postgresql-vacuum-fsm.html
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
변경 테이블
ID NAME
1 Test1
2 Test2
4 Test4
6 Test6
3 Test03
기존 테이블
ID NAME
1 Test1
2 Test2
3 Test3
4 Test4
6 Test6
3 Test03
• Vacuum 실행하면 불필요한 정보가 삭제
Vacuum
참고: http://blog.gaerae.com/2015/09/postgresql-vacuum-fsm.html
2. Vacuum 실행 구조
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
3. 표준 vacuum VS Vacuum full
표준 vacuum Vacuum full
처리 방식
• 다른 자료가 저장될 수 있도록 빈 공간으로 표시
• OS 입장에서는 디스크의 여유 공간 확보가 불가
• 새 파일에 저장하는 방식 (pg_class의 relfilenode값이
변경)
• OS 입장에서 디스크의 여유 공간 확보가 가능
• 최적의 물리적 크기로 테이블 생성
처리 속도 vacuum full 보다는 시간이 적게 걸림 처리 속도가 매우 느려 시간이 오래 걸림
Lock 여부
여러 다른 작업들과 함께 사용 가능
Select, update, insert, delete (단, ALTER TABLE는 안됨)
해당 테이블에 배타적 잠금을 지정하기 때문에 어떤 작
업도 함께 사용할 수 없음
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
3. 표준 vacuum VS Vacuum full
[postgres@153_40 base]$ createdb vac
[postgres@153_40 base]$ oid2name | grep vac
1237571 vac pg_default
[postgres@153_40 base]$ cd 1237571/
[postgres@153_40 1237571]$ psql -d vac
(postgres@[local]:5432) [vac] > ! pwd
/usr/local/pgsql/data/base/1237571
(postgres@[local]:5432) [vac] > ! ls | head -5
12735
12735_fsm
12735_vm
12737
12737_fsm
(postgres@[local]:5432) [vac] > create table myt(id integer);
CREATE TABLE
(postgres@[local]:5432) [vac] > select pg_relation_filepath('myt');
pg_relation_filepath
----------------------
base/1237571/1237584
(1 row)
(postgres@[local]:5432) [vac] > ! ls -lt 123*
-rw------- 1 postgres postgres 0 Jun 21 16:10 1237584
Vacuum과 vacuum full 비교 시나리오
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
3. 표준 vacuum VS Vacuum full
(postgres@[local]:5432) [vac] > select pg_total_relation_size('myt');
pg_total_relation_size
------------------------
0
(1 row)
(postgres@[local]:5432) [vac] > insert into myt select generate_series(1,100000);
INSERT 0 100000
(postgres@[local]:5432) [vac] > select pg_total_relation_size('myt');
pg_total_relation_size
------------------------
3653632
(1 row)
(postgres@[local]:5432) [vac] > ! ls -lt | head -5
total 10380
-rw------- 1 postgres postgres 3629056 Jun 21 16:12 1237584
-rw------- 1 postgres postgres 65536 Jun 21 16:12 12764
-rw------- 1 postgres postgres 57344 Jun 21 16:12 12767
-rw------- 1 postgres postgres 32768 Jun 21 16:12 12744
(postgres@[local]:5432) [vac] > delete from myt where id > 5 and id < 100000;
DELETE 99994
(postgres@[local]:5432) [vac] > select pg_total_relation_size('myt');
pg_total_relation_size
------------------------
3653632
(1 row)
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.
3. 표준 vacuum VS Vacuum full
(postgres@[local]:5432) [vac] > vacuum myt;
VACUUM
(postgres@[local]:5432) [vac] > select pg_total_relation_size('myt');
pg_total_relation_size
------------------------
3661824
(1 row)
(postgres@[local]:5432) [vac] > insert into myt select generate_series(1,1000);
INSERT 0 1000
(postgres@[local]:5432) [vac] > select pg_total_relation_size('myt');
pg_total_relation_size
------------------------
3661824
(1 row)
(postgres@[local]:5432) [vac] > ! ls -lt 123*
-rw------- 1 postgres postgres 8192 Jun 21 16:13 1237584_vm
-rw------- 1 postgres postgres 3629056 Jun 21 16:12 1237584
-rw------- 1 postgres postgres 24576 Jun 21 16:11 1237584_fsm
(postgres@[local]:5432) [vac] > vacuum full myt;
VACUUM
(postgres@[local]:5432) [vac] > select pg_total_relation_size('myt');
pg_total_relation_size
------------------------
40960
(1 row)
(postgres@[local]:5432) [vac] > select pg_relation_filepath('myt');
pg_relation_filepath
----------------------
base/1237571/1237587
(1 row)
(postgres@[local]:5432) [vac] > ! ls -lt | head -5
total 6852
-rw------- 1 postgres postgres 0 Jun 21 16:14 1237584
-rw------- 1 postgres postgres 40960 Jun 21 16:14 1237587
-rw------- 1 postgres postgres 65536 Jun 21 16:12 12764
-rw------- 1 postgres postgres 57344 Jun 21 16:12 12767
pg_class의 relfilenode값, relation filepath 변경
디스크에 저장된 물리적인 파일의 위치를 찾는 쿼리 :
SELECT oid, pg_relation_filepath(oid), relname, relfilenode FROM pg_class LIMIT 10;
다른 자료가 저장될 수 있도록 빈 공간으로 표시
그래서 Insert 1000건을 해도 용량의 변화가 없음
새로운 빈 공간을 만들고, 이 공간에 변경 전의 튜플들을
옮기고 기존 파일에서 삭제
Vacuum full표준 vacuum
base/1237571/1237584
Vacuum 작업 후, vm 생성
Vacuum verbose [테이블명] ;
Verbose : 해당 테이블에 대한 자세한 vacuum 활동 보고를 나타냄
Research & Contents
Blog
Video
E-mail
NAVER http://cafe.naver.com/playexem
ITPUB http://blog.itpub.net/31135309/
Wordpress https://playexem.wordpress.com/
Slideshare http://www.slideshare.net/playexem
Youtube https://www.youtube.com/channel/UC5wKR
_-A0eL_Pn_EMzoauJg
Tudou http://www.tudou.com/home/maxgauge/
교육문의: 연구컨텐츠팀 김숙진
edu@ex-em.com
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.

More Related Content

What's hot

Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대
PgDay.Seoul
 
PostgreSQL Deep Internal
PostgreSQL Deep InternalPostgreSQL Deep Internal
PostgreSQL Deep Internal
EXEM
 
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
PgDay.Seoul
 
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
PgDay.Seoul
 
PostgreSql vaccum
PostgreSql vaccumPostgreSql vaccum
PostgreSql vaccum
승범 현
 
파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄
SeongHyun Ahn
 
파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄
SeongHyun Ahn
 
Federated Engine 실무적용사례
Federated Engine 실무적용사례Federated Engine 실무적용사례
Federated Engine 실무적용사례
I Goo Lee
 
MySQL GTID 시작하기
MySQL GTID 시작하기MySQL GTID 시작하기
MySQL GTID 시작하기
I Goo Lee
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
Seok-joon Yun
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
I Goo Lee
 
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracleORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
엑셈
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
YoungHeon (Roy) Kim
 
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracleSQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
엑셈
 
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
Seok-joon Yun
 
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
Seok-joon Yun
 
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례BJ Jang
 
Enterprise Linux 7 new feature_systemd_booting
Enterprise Linux 7 new feature_systemd_bootingEnterprise Linux 7 new feature_systemd_booting
Enterprise Linux 7 new feature_systemd_booting
suk kim
 
Result Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracleResult Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracle
엑셈
 
[2015 05-29] Oracle Lock
[2015 05-29] Oracle Lock[2015 05-29] Oracle Lock
[2015 05-29] Oracle Lock
Seok-joon Yun
 

What's hot (20)

Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대
 
PostgreSQL Deep Internal
PostgreSQL Deep InternalPostgreSQL Deep Internal
PostgreSQL Deep Internal
 
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
 
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
 
PostgreSql vaccum
PostgreSql vaccumPostgreSql vaccum
PostgreSql vaccum
 
파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄
 
파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄
 
Federated Engine 실무적용사례
Federated Engine 실무적용사례Federated Engine 실무적용사례
Federated Engine 실무적용사례
 
MySQL GTID 시작하기
MySQL GTID 시작하기MySQL GTID 시작하기
MySQL GTID 시작하기
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
 
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracleORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracleSQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
 
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
[2015-07-10-윤석준] Oracle 성능 관리 & v$sysstat
 
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
[2015-06-19] Oracle 성능 최적화 및 품질 고도화 2
 
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
 
Enterprise Linux 7 new feature_systemd_booting
Enterprise Linux 7 new feature_systemd_bootingEnterprise Linux 7 new feature_systemd_booting
Enterprise Linux 7 new feature_systemd_booting
 
Result Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracleResult Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracle
 
[2015 05-29] Oracle Lock
[2015 05-29] Oracle Lock[2015 05-29] Oracle Lock
[2015 05-29] Oracle Lock
 

Viewers also liked

제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
EXEM
 
Performance schema 설정
Performance schema 설정Performance schema 설정
Performance schema 설정
EXEM
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
복연 이
 
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략KTH
 
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
Ji-Woong Choi
 
【中文】 odi no.004 analysis of oracle performance degradation caused by ineffi...
【中文】   odi no.004 analysis of oracle performance degradation caused by ineffi...【中文】   odi no.004 analysis of oracle performance degradation caused by ineffi...
【中文】 odi no.004 analysis of oracle performance degradation caused by ineffi...
EXEM
 
Oracle Deep Internal 4 (ver.2)
Oracle Deep Internal 4 (ver.2)Oracle Deep Internal 4 (ver.2)
Oracle Deep Internal 4 (ver.2)
EXEM
 
제 8회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 8회 엑셈 수요 세미나 자료 연구컨텐츠팀제 8회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 8회 엑셈 수요 세미나 자료 연구컨텐츠팀
EXEM
 
[MySQL 스터디] 기타기능
[MySQL 스터디] 기타기능[MySQL 스터디] 기타기능
[MySQL 스터디] 기타기능
Jong Ho Park
 
2009년 시무식 Apm
2009년 시무식 Apm2009년 시무식 Apm
2009년 시무식 ApmEXEM
 
밋업발표
밋업발표밋업발표
밋업발표
진성 박
 
XDebug For php debugging
XDebug For php debuggingXDebug For php debugging
XDebug For php debugging
Omid Khosrojerdi
 
[2015-05-22] Oracle Ways of Concurrency Control
[2015-05-22] Oracle Ways of Concurrency Control[2015-05-22] Oracle Ways of Concurrency Control
[2015-05-22] Oracle Ways of Concurrency Control
Seok-joon Yun
 
[2015-06-05] Oracle TX Lock
[2015-06-05] Oracle TX Lock[2015-06-05] Oracle TX Lock
[2015-06-05] Oracle TX Lock
Seok-joon Yun
 
Oracle History #9
Oracle History #9Oracle History #9
Oracle History #9
Kyung Sang Jang
 
MariaDB Other Features
MariaDB Other FeaturesMariaDB Other Features
MariaDB Other Features
JongJin Lee
 
Oracle Deep Internal 3 (ver.2)
Oracle Deep Internal 3 (ver.2)Oracle Deep Internal 3 (ver.2)
Oracle Deep Internal 3 (ver.2)
EXEM
 
Oracle Deep Internal 2 (ver.2)
Oracle Deep Internal 2 (ver.2)Oracle Deep Internal 2 (ver.2)
Oracle Deep Internal 2 (ver.2)
EXEM
 
MariaDB
MariaDBMariaDB
MariaDB
ymtech
 

Viewers also liked (20)

제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 6회 엑셈 수요 세미나 자료 연구컨텐츠팀
 
Performance schema 설정
Performance schema 설정Performance schema 설정
Performance schema 설정
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
 
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략
 
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
 
【中文】 odi no.004 analysis of oracle performance degradation caused by ineffi...
【中文】   odi no.004 analysis of oracle performance degradation caused by ineffi...【中文】   odi no.004 analysis of oracle performance degradation caused by ineffi...
【中文】 odi no.004 analysis of oracle performance degradation caused by ineffi...
 
test
testtest
test
 
Oracle Deep Internal 4 (ver.2)
Oracle Deep Internal 4 (ver.2)Oracle Deep Internal 4 (ver.2)
Oracle Deep Internal 4 (ver.2)
 
제 8회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 8회 엑셈 수요 세미나 자료 연구컨텐츠팀제 8회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 8회 엑셈 수요 세미나 자료 연구컨텐츠팀
 
[MySQL 스터디] 기타기능
[MySQL 스터디] 기타기능[MySQL 스터디] 기타기능
[MySQL 스터디] 기타기능
 
2009년 시무식 Apm
2009년 시무식 Apm2009년 시무식 Apm
2009년 시무식 Apm
 
밋업발표
밋업발표밋업발표
밋업발표
 
XDebug For php debugging
XDebug For php debuggingXDebug For php debugging
XDebug For php debugging
 
[2015-05-22] Oracle Ways of Concurrency Control
[2015-05-22] Oracle Ways of Concurrency Control[2015-05-22] Oracle Ways of Concurrency Control
[2015-05-22] Oracle Ways of Concurrency Control
 
[2015-06-05] Oracle TX Lock
[2015-06-05] Oracle TX Lock[2015-06-05] Oracle TX Lock
[2015-06-05] Oracle TX Lock
 
Oracle History #9
Oracle History #9Oracle History #9
Oracle History #9
 
MariaDB Other Features
MariaDB Other FeaturesMariaDB Other Features
MariaDB Other Features
 
Oracle Deep Internal 3 (ver.2)
Oracle Deep Internal 3 (ver.2)Oracle Deep Internal 3 (ver.2)
Oracle Deep Internal 3 (ver.2)
 
Oracle Deep Internal 2 (ver.2)
Oracle Deep Internal 2 (ver.2)Oracle Deep Internal 2 (ver.2)
Oracle Deep Internal 2 (ver.2)
 
MariaDB
MariaDBMariaDB
MariaDB
 

Similar to 제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀

Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedWeb Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Jungsu Heo
 
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)Amazon Web Services Korea
 
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
Seok-joon Yun
 
ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차
승빈이네 공작소
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장SeongHyun Ahn
 
ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기
Yungon Park
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancementsbeamofhope
 
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
NAVER D2
 
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
엑셈
 
데이타베이스 기본튜닝
데이타베이스 기본튜닝 데이타베이스 기본튜닝
데이타베이스 기본튜닝
Jinuk Bhak
 
효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차
희동 강
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)
Gruter
 
Kubernetes on GCP
Kubernetes on GCPKubernetes on GCP
Kubernetes on GCP
Daegeun Kim
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
I Goo Lee
 
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
PgDay.Seoul
 
Web Analytics at Scale with Elasticsearch @ naver.com - Part 1
Web Analytics at Scale with Elasticsearch @ naver.com - Part 1Web Analytics at Scale with Elasticsearch @ naver.com - Part 1
Web Analytics at Scale with Elasticsearch @ naver.com - Part 1
Jungsu Heo
 
오라클 DB를 AWS 데이터베이스로 마이그레이션 하기 - 윤기원 :: AWS Database Modernization Day 온라인
오라클 DB를 AWS 데이터베이스로 마이그레이션 하기 - 윤기원 :: AWS Database Modernization Day 온라인오라클 DB를 AWS 데이터베이스로 마이그레이션 하기 - 윤기원 :: AWS Database Modernization Day 온라인
오라클 DB를 AWS 데이터베이스로 마이그레이션 하기 - 윤기원 :: AWS Database Modernization Day 온라인
Amazon Web Services Korea
 
Ssd 성능시험 cubrid mysql
Ssd 성능시험 cubrid mysqlSsd 성능시험 cubrid mysql
Ssd 성능시험 cubrid mysqlswkim79
 

Similar to 제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀 (20)

Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedWeb Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
 
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
 
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1
 
ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장
 
ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements
 
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
 
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
 
테스트
테스트테스트
테스트
 
데이타베이스 기본튜닝
데이타베이스 기본튜닝 데이타베이스 기본튜닝
데이타베이스 기본튜닝
 
효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)
 
Kubernetes on GCP
Kubernetes on GCPKubernetes on GCP
Kubernetes on GCP
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
 
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
 
Scala for play
Scala for playScala for play
Scala for play
 
Web Analytics at Scale with Elasticsearch @ naver.com - Part 1
Web Analytics at Scale with Elasticsearch @ naver.com - Part 1Web Analytics at Scale with Elasticsearch @ naver.com - Part 1
Web Analytics at Scale with Elasticsearch @ naver.com - Part 1
 
오라클 DB를 AWS 데이터베이스로 마이그레이션 하기 - 윤기원 :: AWS Database Modernization Day 온라인
오라클 DB를 AWS 데이터베이스로 마이그레이션 하기 - 윤기원 :: AWS Database Modernization Day 온라인오라클 DB를 AWS 데이터베이스로 마이그레이션 하기 - 윤기원 :: AWS Database Modernization Day 온라인
오라클 DB를 AWS 데이터베이스로 마이그레이션 하기 - 윤기원 :: AWS Database Modernization Day 온라인
 
Ssd 성능시험 cubrid mysql
Ssd 성능시험 cubrid mysqlSsd 성능시험 cubrid mysql
Ssd 성능시험 cubrid mysql
 

More from EXEM

Amazon aurora 1
Amazon aurora 1Amazon aurora 1
Amazon aurora 1
EXEM
 
Oracle Deep Internal 3 (ver.2)
Oracle Deep Internal 3 (ver.2)Oracle Deep Internal 3 (ver.2)
Oracle Deep Internal 3 (ver.2)
EXEM
 
Oracle Deep Internal 1 (ver.2)
Oracle Deep Internal 1 (ver.2)Oracle Deep Internal 1 (ver.2)
Oracle Deep Internal 1 (ver.2)
EXEM
 
[KOR] ODI no.004 analysis of oracle performance degradation caused by ineffic...
[KOR] ODI no.004 analysis of oracle performance degradation caused by ineffic...[KOR] ODI no.004 analysis of oracle performance degradation caused by ineffic...
[KOR] ODI no.004 analysis of oracle performance degradation caused by ineffic...
EXEM
 
[ODI] chapter3 What is Max CR DBA(Max length)?
[ODI] chapter3 What is Max CR DBA(Max length)? [ODI] chapter3 What is Max CR DBA(Max length)?
[ODI] chapter3 What is Max CR DBA(Max length)?
EXEM
 
[ODI] chapter2 what is "undo record chaining"?
[ODI] chapter2 what is "undo record chaining"?[ODI] chapter2 what is "undo record chaining"?
[ODI] chapter2 what is "undo record chaining"?
EXEM
 
[ODI] chapter1 When Update statement is executed, How does oracle undo work?
[ODI] chapter1 When Update statement is executed,  How does oracle undo work?[ODI] chapter1 When Update statement is executed,  How does oracle undo work?
[ODI] chapter1 When Update statement is executed, How does oracle undo work?
EXEM
 
[Practical owi] lock & latch
[Practical owi] lock & latch[Practical owi] lock & latch
[Practical owi] lock & latch
EXEM
 

More from EXEM (8)

Amazon aurora 1
Amazon aurora 1Amazon aurora 1
Amazon aurora 1
 
Oracle Deep Internal 3 (ver.2)
Oracle Deep Internal 3 (ver.2)Oracle Deep Internal 3 (ver.2)
Oracle Deep Internal 3 (ver.2)
 
Oracle Deep Internal 1 (ver.2)
Oracle Deep Internal 1 (ver.2)Oracle Deep Internal 1 (ver.2)
Oracle Deep Internal 1 (ver.2)
 
[KOR] ODI no.004 analysis of oracle performance degradation caused by ineffic...
[KOR] ODI no.004 analysis of oracle performance degradation caused by ineffic...[KOR] ODI no.004 analysis of oracle performance degradation caused by ineffic...
[KOR] ODI no.004 analysis of oracle performance degradation caused by ineffic...
 
[ODI] chapter3 What is Max CR DBA(Max length)?
[ODI] chapter3 What is Max CR DBA(Max length)? [ODI] chapter3 What is Max CR DBA(Max length)?
[ODI] chapter3 What is Max CR DBA(Max length)?
 
[ODI] chapter2 what is "undo record chaining"?
[ODI] chapter2 what is "undo record chaining"?[ODI] chapter2 what is "undo record chaining"?
[ODI] chapter2 what is "undo record chaining"?
 
[ODI] chapter1 When Update statement is executed, How does oracle undo work?
[ODI] chapter1 When Update statement is executed,  How does oracle undo work?[ODI] chapter1 When Update statement is executed,  How does oracle undo work?
[ODI] chapter1 When Update statement is executed, How does oracle undo work?
 
[Practical owi] lock & latch
[Practical owi] lock & latch[Practical owi] lock & latch
[Practical owi] lock & latch
 

제 5회 엑셈 수요 세미나 자료 연구컨텐츠팀

  • 1. 제 5회 엑셈 수요 세미나 자료 EXEM seminar report no. 005 (2016.06.23) Research & Contents Team
  • 2. Table of Agenda © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. 01. 02. [MySQL] MVCC 기능 분석을 위한 page dump [PostgreSQL] vacuum의 거의 모든 것 (1차)
  • 3. Oracle Deep Internal © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. 01. [MySQL] MVCC 기능 분석을 위한 page dump 발표자: 연구컨텐츠팀 이근오
  • 4. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. MVCC 테스트 INSERT “A” Session 1 Session 2 “Repeatable read, Read only” 설정 Session1 : T1 테이블에 INSERT “A” Session2 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:04:51” 시점 데이타 조회  P1,P2,P3 모두 “A” 조회
  • 5. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. MVCC 테스트 UPDATE “B” Session 1 Session 3 Session 2 Session1 : T1 테이블에 UPDATE “B” WHERE “P1” Session2 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:04:51” 시점데이타 조회  P1,P2,P3 = “A” 조회  MVCC 구현확인 Session3 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:05:31” 시점데이타 조회  P1 =“B” P2,P3=“A” 조회 “Repeatable read, Read only” 설정
  • 6. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. MVCC 테스트 UPDATE “C” Session 1 Session 4Session 2 Session 3 Session1 : T1 테이블에 UPDATE “C” WHERE “P1” Session2 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:04:51” 시점데이타 조회  P1,P2,P3 = “A” 조회 Session3 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:05:31” 시점데이타 조회  P1 =“B” P2,P3=“A” 조회  MVCC 구현확인 Session4 : “REPEATABLE READ, READ ONLY ;” 설정으로 “17:05:58” 시점데이타 조회  P1 =“C” P2,P3=“A” 조회  MVCC 구현확인 “Repeatable read, Read only” 설정
  • 7. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. https://dev.mysql.com/doc/internals/en/innodb-page-example.html MySQL Internals Manual MySQL 홈페이지에 게시되어 있는 MySQL Internals Manual - Dump 예시
  • 8. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. MySQL Internals INSERT “QQ1”,“A” 후 Dump (TABLE) INSERT “QQ1”,“A” 후 Dump (UNDO) T1 테이블에 INSERT “A”를 실행한 후, TABLE PAGE(t1.ibd 파일)와 UNDO PAGE(ibdata1 파일)의 Dump 결과를 확인해보면 동일한 데이터가 저장된 것을 확인할 수 있다. “QQ2”,“A” “QQ3”,“A” “QQ2”,“A” “QQ3”,“A”
  • 9. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. MySQL Internals UPDATE “B” WHERE “QQ1” 후 Dump (TABLE) UPDATE “B” WHERE “QQ1” 후 Dump (UNDO) T1 테이블에 UPDATE “B”를 실행하고 TABLE PAGE(t1.ibd 파일) 와 UNDO PAGE(ibdata1 파일)의 Dump 결과를 확인해 보면 1. TABLE PAGE : “B”로 변경됨 2. UNDO PAGE : 처음 “A”로 INSERT한 데이터와 UPDATE “B” 데이터가 저장된 것을 확인.  MySQL에서 MVCC 구현을 UNDO 페이지에 페이지를 저장 해서 구현하는 것으로 추정됨.
  • 10. Oracle Deep Internal © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. 02. [PostgreSQL] vacuum의 거의 모든 것 (1차) 발표자: 연구컨텐츠팀 김숙진
  • 11. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. 1. Vacuum 정의 및 필요성 1) 변경 및 삭제된 자료들이 차지하고 있는 디스크 공간을 확보하기 위해서 2) Query Planner가 사용할 자료의 통계 정보를 갱신하기 위해서 3) 실자료 지도(visibility map, VM)의 정보를 갱신하기 위해서 (VM은 인덱스 전용의 검색 성능을 향상시키기 위해 사용함) 4) 트랜잭션 id가 겹침으로 인해 오래된 자료의 손실이 발생하는 것을 방지하기 위해서 2. Vacuum의 필요성 1. Vacuum의 정의 PostgreSQL에서 특정 튜플을 update하거나 delete 한다고 해서 해당 영역이 자동으로 재사용되 거나 사라지지 않는다. 이렇게 오래된 영역을 정리하여 공간을 반환하는 명령어가 Vacuum이다. ≒ 디스크 조각 모음 VM (Visibility Map) 실제 사용하는 자료의 정보만 보관, FSM과 반대로 사용 공간에 대한 정보를 저장
  • 12. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. FSM (Free Space Map) 2. Vacuum 실행 구조 FSM (Free Space Map) : Vacuum의 기준 • 페이지의 빈 공간에 대한 정보를 보관 • 데이터베이스 내에 사용하지 않은 공간의 위치를 추적 Oracle, InnoDB는 undo(rollback) segment를 사용하여 MVCC 구현하는 반면, PostgreSQL는 내부 페이지를 사용함. 즉, update, delete된 행을 즉시 제거하지 않고, 이 공간을 VACUUM 작업을 통해서 반환함. 기존 테이블 ID NAME 1 Test1 2 Test2 3 Test3 4 Test4 5 Test5 변경 테이블 ID NAME 1 Test1 2 Test2 3 Test3 4 Test4 5 Test5 3 Test03 • Test3을 Test03으로 변경 • Test5를 삭제 참고: http://blog.gaerae.com/2015/09/postgresql-vacuum-fsm.html
  • 13. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. FSM (Free Space Map) 2. Vacuum 실행 구조 기존 테이블 ID NAME 1 Test1 2 Test2 3 Test3 4 Test4 5 Test5 3 Test03 변경 테이블 ID NAME 1 Test1 2 Test2 3 Test3 4 Test4 6 Test6 3 Test03 • Test 6 추가 6 Test6 • 새로운 데이터 insert시, FSM 확인 후 빈 공간에 데이터 추가 참고: http://blog.gaerae.com/2015/09/postgresql-vacuum-fsm.html
  • 14. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. 변경 테이블 ID NAME 1 Test1 2 Test2 4 Test4 6 Test6 3 Test03 기존 테이블 ID NAME 1 Test1 2 Test2 3 Test3 4 Test4 6 Test6 3 Test03 • Vacuum 실행하면 불필요한 정보가 삭제 Vacuum 참고: http://blog.gaerae.com/2015/09/postgresql-vacuum-fsm.html 2. Vacuum 실행 구조
  • 15. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. 3. 표준 vacuum VS Vacuum full 표준 vacuum Vacuum full 처리 방식 • 다른 자료가 저장될 수 있도록 빈 공간으로 표시 • OS 입장에서는 디스크의 여유 공간 확보가 불가 • 새 파일에 저장하는 방식 (pg_class의 relfilenode값이 변경) • OS 입장에서 디스크의 여유 공간 확보가 가능 • 최적의 물리적 크기로 테이블 생성 처리 속도 vacuum full 보다는 시간이 적게 걸림 처리 속도가 매우 느려 시간이 오래 걸림 Lock 여부 여러 다른 작업들과 함께 사용 가능 Select, update, insert, delete (단, ALTER TABLE는 안됨) 해당 테이블에 배타적 잠금을 지정하기 때문에 어떤 작 업도 함께 사용할 수 없음
  • 16. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. 3. 표준 vacuum VS Vacuum full [postgres@153_40 base]$ createdb vac [postgres@153_40 base]$ oid2name | grep vac 1237571 vac pg_default [postgres@153_40 base]$ cd 1237571/ [postgres@153_40 1237571]$ psql -d vac (postgres@[local]:5432) [vac] > ! pwd /usr/local/pgsql/data/base/1237571 (postgres@[local]:5432) [vac] > ! ls | head -5 12735 12735_fsm 12735_vm 12737 12737_fsm (postgres@[local]:5432) [vac] > create table myt(id integer); CREATE TABLE (postgres@[local]:5432) [vac] > select pg_relation_filepath('myt'); pg_relation_filepath ---------------------- base/1237571/1237584 (1 row) (postgres@[local]:5432) [vac] > ! ls -lt 123* -rw------- 1 postgres postgres 0 Jun 21 16:10 1237584 Vacuum과 vacuum full 비교 시나리오
  • 17. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. 3. 표준 vacuum VS Vacuum full (postgres@[local]:5432) [vac] > select pg_total_relation_size('myt'); pg_total_relation_size ------------------------ 0 (1 row) (postgres@[local]:5432) [vac] > insert into myt select generate_series(1,100000); INSERT 0 100000 (postgres@[local]:5432) [vac] > select pg_total_relation_size('myt'); pg_total_relation_size ------------------------ 3653632 (1 row) (postgres@[local]:5432) [vac] > ! ls -lt | head -5 total 10380 -rw------- 1 postgres postgres 3629056 Jun 21 16:12 1237584 -rw------- 1 postgres postgres 65536 Jun 21 16:12 12764 -rw------- 1 postgres postgres 57344 Jun 21 16:12 12767 -rw------- 1 postgres postgres 32768 Jun 21 16:12 12744 (postgres@[local]:5432) [vac] > delete from myt where id > 5 and id < 100000; DELETE 99994 (postgres@[local]:5432) [vac] > select pg_total_relation_size('myt'); pg_total_relation_size ------------------------ 3653632 (1 row)
  • 18. © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved. 3. 표준 vacuum VS Vacuum full (postgres@[local]:5432) [vac] > vacuum myt; VACUUM (postgres@[local]:5432) [vac] > select pg_total_relation_size('myt'); pg_total_relation_size ------------------------ 3661824 (1 row) (postgres@[local]:5432) [vac] > insert into myt select generate_series(1,1000); INSERT 0 1000 (postgres@[local]:5432) [vac] > select pg_total_relation_size('myt'); pg_total_relation_size ------------------------ 3661824 (1 row) (postgres@[local]:5432) [vac] > ! ls -lt 123* -rw------- 1 postgres postgres 8192 Jun 21 16:13 1237584_vm -rw------- 1 postgres postgres 3629056 Jun 21 16:12 1237584 -rw------- 1 postgres postgres 24576 Jun 21 16:11 1237584_fsm (postgres@[local]:5432) [vac] > vacuum full myt; VACUUM (postgres@[local]:5432) [vac] > select pg_total_relation_size('myt'); pg_total_relation_size ------------------------ 40960 (1 row) (postgres@[local]:5432) [vac] > select pg_relation_filepath('myt'); pg_relation_filepath ---------------------- base/1237571/1237587 (1 row) (postgres@[local]:5432) [vac] > ! ls -lt | head -5 total 6852 -rw------- 1 postgres postgres 0 Jun 21 16:14 1237584 -rw------- 1 postgres postgres 40960 Jun 21 16:14 1237587 -rw------- 1 postgres postgres 65536 Jun 21 16:12 12764 -rw------- 1 postgres postgres 57344 Jun 21 16:12 12767 pg_class의 relfilenode값, relation filepath 변경 디스크에 저장된 물리적인 파일의 위치를 찾는 쿼리 : SELECT oid, pg_relation_filepath(oid), relname, relfilenode FROM pg_class LIMIT 10; 다른 자료가 저장될 수 있도록 빈 공간으로 표시 그래서 Insert 1000건을 해도 용량의 변화가 없음 새로운 빈 공간을 만들고, 이 공간에 변경 전의 튜플들을 옮기고 기존 파일에서 삭제 Vacuum full표준 vacuum base/1237571/1237584 Vacuum 작업 후, vm 생성 Vacuum verbose [테이블명] ; Verbose : 해당 테이블에 대한 자세한 vacuum 활동 보고를 나타냄
  • 19. Research & Contents Blog Video E-mail NAVER http://cafe.naver.com/playexem ITPUB http://blog.itpub.net/31135309/ Wordpress https://playexem.wordpress.com/ Slideshare http://www.slideshare.net/playexem Youtube https://www.youtube.com/channel/UC5wKR _-A0eL_Pn_EMzoauJg Tudou http://www.tudou.com/home/maxgauge/ 교육문의: 연구컨텐츠팀 김숙진 edu@ex-em.com © Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.

Editor's Notes

  1. Z
  2. PostgreSQL는 다른 RDBMS와 다르게 vacuum이라는 명령어가 있습니다. 특정 튜플을 update하거나 delete 한다고 해서 해당 영역이 자동으로 재사용되거나 사라지지 않는다. 이렇게 오래된 영역을 정리하여 공간을 반환하는 명령어가 Vacuum이다. ≒ 디스크 조각 모음
  3. Oracle, InnoDB는 rollback segment를 사용하여 MVCC 구현하지만, Postgres에서는 내부페이지를 사용함. 즉 update, delete된 행을 즉시 제거하지 않음. 결국에는 이공간을 VACUUM작업을 통해서 회수해야함. 갱신 · 삭제를 할 경우, FSM을 검색하여 불필요한 공간을 회수합니다.
  4. Oracle, InnoDB는 rollback segment를 사용하여 MVCC 구현하지만, Postgres에서는 내부페이지를 사용함. 즉 update, delete된 행을 즉시 제거하지 않음. 결국에는 이공간을 VACUUM작업을 통해서 회수해야함. 갱신 · 삭제를 할 경우, FSM을 검색하여 불필요한 공간을 회수합니다.
  5. Oracle, InnoDB는 rollback segment를 사용하여 MVCC 구현하지만, Postgres에서는 내부페이지를 사용함. 즉 update, delete된 행을 즉시 제거하지 않음. 결국에는 이공간을 VACUUM작업을 통해서 회수해야함. 갱신 · 삭제를 할 경우, FSM을 검색하여 불필요한 공간을 회수합니다.
  6. Vacuum full을 하는 것을 권장하지 않음
  7. L long 문법으로 출력 T 파일 명 대신에 수정된 시간으로 분류