MySQL /MariaDB 통계 정보
· Version : MySQL 5.7, MariaDB 10.0
비용기반 최적화에서 가장 중요한것은 통계 정보이다. 통계 정보가 정확하지 않다면, 옵티마이저는 엉뚱한 실행계획을 생성하기 때문이다. MySQL, MariaDB의 통계 정보 또한 일반 다른 RDBMS와 같이 비용기반 옵티마이저를 사용하지만 아직 상용 RDBMS에 비해서는 다양하지 않다.
MariaDB 10.0은 MySQL 5.6의 기능을 포함하고 있기 때문에 MySQL 5.6 과 매우 유사하다. MySQL 5.6 부터는 InnoDB 스토리지 엔진을 사용하는 테이블에 대한 통계 정보를 영구적(Persistent)으로 관리할 수 있다. MySQL 5.5 버전 까지는 show index from 으로 인덱스 칼럼의 분포를 확인할 수 있었지만 MySQL 5.6 부터는 mysql 데이터베이스에서 innodb_index_stats 테이블과 innodb_table_stats 테이블에서도 인덱스를 조회할 수있다.
show index from nclick.nclick; |
select * from mysql.innodb_index_stats; |
select * from mysql.innodb_table_stats; |
MySQL 5.6 부터는 테이블을 생성할 때 STATS_PERSISTENT 옵션을 사용하여 통계 정보를 영구보관할 수 있다.
· 0 : 통계 정보를 MySQL 5.5 이전의 방식으로 관리, 단기적으로 사용
· 1 : 통계 정보를 innodb_index_stats, innodb_table_stats 테이블에 저장하여 영구 사용
· DEFAULT : 기본값 1의 설정을 적용.
Innodb_stats_auto_recalc 시스템 설정 변수값을 OFF로 설정해도 통계가 자동으로 수집되는것을 막을 수 있다.
· 1 : 통계를 자동으로 수집
· 0 : ANALYZE TABLE 명령이 있을때만 수집
· DEFAULT : 기본값 0의 설정을 적용
CREATE TABLE `t1` ( `id` int(8) NOT NULL auto_increment, `data` varchar(255), `date` datetime, PRIMARY KEY (`id`), INDEX `DATE_IX` (`date`) ) ENGINE=InnoDB, STATS_PERSISTENT=1, STATS_AUTO_RECALC=1, STATS_SAMPLE_PAGES=25; |
[참고자료]
· Configuring Persistent Optimizer Statistics Parameters : https://dev.mysql.com/doc/refman/5.7/en/innodb-persistent-stats.html
· Configuring Non-Persistent Optimizer Statistics Parameters : https://dev.mysql.com/doc/refman/5.7/en/innodb-statistics-estimation.html
2019-09-11 / 강성욱 / http://sungwookkang.com
MySQL, MySQL STATS, innodb_index_stats, innodb_table_stats, MySQL 통계, 히스토 그램, 옵티마이저
'MySQL, MariaDB' 카테고리의 다른 글
MySQL/MariaDB Full Table Scan (0) | 2019.09.19 |
---|---|
MariaDB 히스토그램 (옵티마이저가 실행계획 생성시 참고하는 데이터 분포 정보) (0) | 2019.09.18 |
MySQL/MariaDB 파일 읽기/쓰기시 발생할 수 있는 secure-file-priv 오류 (0) | 2019.07.24 |
MySQL/MariaDB ROW Size Limit (0) | 2019.07.20 |
MySQL/MariaDB sql_mode 설정 변경으로 NULL 데이터 처리하기 (0) | 2019.07.06 |