본문 바로가기

MySQL별책부록39

MySQL Ver. 5.7 DML 작업 성능 개선 MySQL Ver. 5.7에서 DML 작업의 성능 개선을 위한 어떤 내용들이 변경되었는지 간단히 알아보도록 하자. 1. Fix index->lock contention InnoDB는 Primary Index나 Secondary index나 모든 인덱스에 대해 RW Lock을 사용하여 인덱스를 보호한다. MySQL Ver. 5.7 이전에는 모든 변경 작업에 대해 다른 스레드의 접근을 막기 위해 모든 인덱스를 X-lock을 사용하여 접근을 막았었다. (즉, leaf 페이지 와 non-leaf페이지를 포함하여 다 접근을 막았다. ) 이와 같은 로직을 사용했었기 때문에 동시에 진행되는 DML 작업에 대해 indx->lock 경합이 자주 발생했었다. MySQL Ver. 5.7에서는 non-leaf 페이지에 대해서.. 2016. 6. 1.
MySQL Ver. 5.7 InnoDB 소소한 기능 개선 1. InnoDB buffer pool size 온라인으로 변경하기 MySQL Ver. 5.7.5 부터 추가된 기능으로 시스템 변수에 값을 변경하여 버퍼풀 사이즈의 크기를 변경하는 것이 가능하다. 실제 내부적으로는 모든 실행중인 트랜잭션들이 완료될 때까지 작업을 시작하지는 않는다. 그리고, 변경하는 작업이 시작되면 InnoDB 에서 새로운 트랜잭션을 실행하지 못한다. 즉, 사이즈를 변경하는 작업 중일 때에는 어떤 트랜잭션도 실행 되지 않는다. 이 규칙에도 예외는 있다. 바로 사이즈를 줄이는 작업인데, 이 작업이 조각모음을 통해 페이지가 제거되는 작업으로 처리가 된다고 판단되면 동시 작업이 허용되고, 위에서 설명한 규칙이 적용되지 않는다. 참고 사항으로 Nested Transaction(중첩된 트랜잭션)의.. 2016. 5. 9.
26. MySQL Ver. 5.7 show slave status 기능 개선 겪어본 사람은 겪어 봤을 거고, 못 겪어본 사람은 못 겪어봤을 현상. show slave status 로 인해 MySQL에 lock 경합이 유발되는 현상이 있다. show slave status는 상태 정보 확인을 위해 실행 시 해당 정보에 대한 lock을 획득하여 정보를 보여준다. 그래서, 다른 세션에서 stop slave를 실행하여 완료가 되지 못한 상황인 경우, show slave status 구문을 실행하면 결과값을 보여주지 못한 현상을 경험할 수 있다. 그런데 이 현상이 MySQL Ver. 5.7.9 부터는 사라지게 되는데.....MySQL Ver. 5.7.9 부터 락을 획득하지 않은 상태에서 상태 정보를 보여주게 변경되었기 때문이다. 해당 내용은 다음의 url에서 확인할 수 있다. https:.. 2016. 5. 3.
25. MySQL Ver. 5.7 NUMA 성능 지원 기능 추가 MySQL Ver. 5.7.9 부터 NUMA 아키텍쳐로 운영되는 서버에 대해 InnoDB의 buffer pool을 관리할 수 있게 설정할 수 있는 파라메터가 추가되었다. innodb_numa_interleave 라는 시스템 변수이다. MySQL의 지원 기능에 대해 알아보기 전에 NUMA에 대해서 간단히 알아보도록 하자. NUMA는 SMP(Symmetric Multi-Processing)/UMA(Uniform Memory Access) 아키텍쳐의 문제점을 해결하기 위해 만들어진 아키텍쳐이다. SMP/UMA의 특징 1. 모든 CPU가 모든 메모리에 접근이 가능하다. 2. 한번에 하나의 CPU만 메모리에 접근하는 것이 가능하다. 3. 적절한 알고리즘을 통해 메모리 접근 스케쥴링을 해야 한다. 4. 현재 성능 .. 2016. 3. 24.