Upload
exem
View
196
Download
4
Embed Size (px)
Citation preview
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 -51273512735_fsm12735_vm1273712737_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 -5total 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 -5total 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
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/
교육문의: 연구컨텐츠팀김숙진
© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.