IT Japan

Index Condition Pushdown 본문

MySQL

Index Condition Pushdown

swhwang 2017. 5. 31. 17:06
반응형

Index Condition Pushdown

MySQL/MariaDB는 구조적으로 DB 엔진과 스토리지 엔진 역할이 명확하게 구분됩니다.
DB 엔진은 데이터를 처리하여 클라이언트에게 전달하고, 스토리지 엔진은 물리적 장치에서 읽어와 DB 엔진에 전달합니다.
이런 구조이기 때문에 다양한 스토리지 엔진을 가질 수 있다는 확장성이 있지만, 그에 따라 내부적인 비효율이 발생하기도 합니다.
다음과 같은 SQL이 호출된다고 가정합니다. tbl 테이블에는 (key_col1, key_col2)로 인덱스가 구성되어 있습니다.

select * from tbl
where key_col1 between 10 and 11
and key_col2 like '%foo%';

여기서 데이터를 스토리지 엔진에 전달할 때는 key_col1에 해당하는 조건만 전달할 수 있습니다. key_col2는 문자열 패턴 검색이므로 인덱스 사용에서는 무의미하기 때문이죠.
만약 key_col1 의 between 조건 결과가 100만 건이라고 가정하면, 스토리지 엔진으로 부터 대상 데이터 100만 건을 모두 DB 엔진으로 가져와서 key_col2 유효성을 체크합니다.
그렇기에 스토리지 엔진에서 DB엔진으로 데이터를 전송하는 “Sending Data”에서 비효율이 발생하기도 합니다.

그러나 MariaDB 5.3.3부터 Index Condition Pushdown 기능이 추가되면서, 인덱스 데이터 구조를 활용하여 한번 더 필터링하여 필요한 데이터만 테이블 데이터에서 읽고 DB 엔진에 전달합니다.

위 그림에서는 앞선 그림과는 다르게 오직 한 건만 DB 엔진에 전달합니다.
불필요한 데이터를 DB엔진에 전달하지 않기 때문에 퍼포먼스가 크게 향상되겠죠.

단, Index Condition Pushdown 기능이 동작하기 위해서는 위와 같이 “조건을 포함하는 형식”으로 인덱스가 구성이 되어 있어야 합니다.


Index Condition Pushdown in MySQL 5.6 and MariaDB 5.5 and its performance impact

Benchmark results

  • Benchmark TPC-H (InnoDB tables)
  • The size of the buffer pool used for the benchmarks is 6G and the disks are 4 5.4K disks in Software RAID5.
  • In-memory workload
  • IO bound workload (dataset size ~95G)
  • MySQL 5.5 와는 2배 이상 속도 향상이 있습니다. MariaDB 5.5 와 MySQL 5.6 은 ICP 성능 관점에서는 서로 동일한 결과를 나타 냅니다.


반응형

'MySQL' 카테고리의 다른 글

MySQL의 릴리즈 사이클  (0) 2017.06.02
MySQL with tcmalloc  (0) 2017.05.31
PaceMaker+DRBD구축4 【MySQL인스톨】  (0) 2017.05.26
MySQL의 심플유저 계정 설정  (0) 2017.05.25
MySQL의 기동과 정지 - Oracle과의 비교  (0) 2017.05.25
Comments