19
제 5회 엑셈 수요 세미나 자료 EXEM seminar report no. 005 (2016.06.23) Research & Contents Team

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

  • Upload
    exem

  • View
    196

  • Download
    4

Embed Size (px)

Citation preview

제 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 -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

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/

교육문의: 연구컨텐츠팀김숙진

[email protected]

© Copyrights 2001~2016, EXEM CO.,LTD. All Rights Reserved.