ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySQL Cluster 체크포인트 (LCP, GCP)
    MySQL_Section/cluster 2014. 11. 18. 17:22
    출처 『돌고래 사육사』 | 돌고래사육사
    원문 http://blog.naver.com/seuis398/70086062984
    MySQL Cluster에서는 GCP(Global Checkpoint)와 LCP(Local Checkpoint), 2가지 종류의 체크포인트를 수행한다.

    일반적으로 DB에서 트랜잭션이 Commit 되면, 트랜잭션 로그(Redo Log)가 디스크로 저장이 된다.
    하지만 MySQL Cluster에서는 트랜잭션이 Commit 되는 경우, 트랜잭션 로그(Redo Log)를 디스크에 Flush 하지 않는다.
    Redo Log는 DB Crash 상황에서 Commit 된 데이터의 복구에 사용되기 때문에 디스크 저장시 Buffered I/O를 하지 않고 fsync 호출을 수행한다.
    이로 인해 Redo Log의 디스크 저장 작업은 시스템 성능 및 트랜잭션 응답시간에 영향을 주게 된다.

    MySQL Cluster는 최소한 2대의 Data Node에서 동일 데이터와 트랜잭션 정보를 가지고 있다는 가정으로 구성하기 때문에, 굳이 이 과정을 수행하지 않는 것이다.

    디스크로 Flush 되지 않은 Redo Log는 Global Checkpoint가 발생할 때, 디스크로 저장된다.
    Global Checkpoint는 모든 Data Node가 Redo Log를 디스크로 안전하게 저장하는 것을 의미하며, 2초에 한번씩 발생한다.
    (TimeBetweenGlobalCheckpoints 파라미터 사용, Default 2000)
    단일 Data Node의 장애시에는 아무런 영향이 없지만, Node Group의 모든 서버가 동시에 Crash 되는 경우에는 최대 2초간의 Commit 된 데이터가 유실될 수 있으므로 유의해야 한다.

    그리고 각 Data Node에서는 데이터의 변경 내용을 주기적으로 디스크로 저장하는데, 이 과정이 Local Checkpoint이다.
    Data Node에서 Local Checkpoint가 발생했다는 것은 오래된 Redo Log가 더이상 필요없으므로 Data Node에서 삭제되어도 무방함을 의미한다.
    Local Checkpoint가 수행되는 동안에도 계속 데이터는 변경이 되므로, 이 경우 Undo Log를 읽어서 consistency
    를 유지하게 된다.
    기본적으로 Local Checkpoint는 4MB의 Write Operation 마다 1회 수행이 된다.
    (TimeBetweenLocalCheckpoints 파라미터 사용, Default 20)

    유의해야 할 점은 
    Local Checkpoint 주기는 ms 단위로 지정하지 않는다는 점이다.
    하나의 Write Operation은 4 byte로 구성이 되며 
    TimeBetweenLocalCheckpoints 값이 20인 경우, 4byte * (2^20), 즉 4MB의 변경이 일어날 때마다 Local Checkpoint를 수행한다는 의미이다.
    TimeBetweenLocalCheckpoints  값이 1 증가할 때마다, 체크포인트 주기가 2배씩 늘어남에 유의해야 한다.
    예를들어, TimeBetweenLocalCheckpoints  값을 21로 변경하는 경우, 8MB마다 Local Checkpoint가 수행된다.


    'MySQL_Section > cluster' 카테고리의 다른 글

    [Mysql] MySQL NDB Cluster  (0) 2014.11.18
Designed by Tistory.