'buffer_pool'에 해당되는 글 1건

  1. 2016.06.08 InnoDB Buffer Pool 덤프 & 로드

InnoDB Buffer Pool 덤프 & 로드



InnoDB는 자주 사용하는 데이터를 버퍼풀에 모두 올려놓고 사용하는데 서버나 데몬이 


재가동될시에는 모든 캐시를 잃게 된다. 그래서 재가동 직후에는 디스크에서 모든 데이터를 


다시 읽어와야 되기 때문에 과부하가 걸리기 쉽다. 


물론 임의로 테이블과 인덱스를 풀스캔하면서 워밍업을 해줄순 있겠지만 사용량이나 빈도에 따라


잘~ 정리되어있던 예전 버퍼풀만 못할것이다. 



그래서 서버를 내리기 직전의 현재 버퍼풀을 덤프해 저장해두고 서버 재기동시 덤프를 복구해


재기동으로 인한 과부하를 막을수 있는 방법을 알아보도록 하자.



설정변수


MariaDB [(none)]> show variables like  'innodb_buffer_pool%';

+-------------------------------------+----------------+

| Variable_name                       | Value          |

+-------------------------------------+----------------+

| innodb_buffer_pool_dump_at_shutdown | OFF            |

| innodb_buffer_pool_dump_now         | OFF            |

| innodb_buffer_pool_dump_pct         | 100            |

| innodb_buffer_pool_filename         | ib_buffer_pool |

| innodb_buffer_pool_instances        | 8              |

| innodb_buffer_pool_load_abort       | OFF            |

| innodb_buffer_pool_load_at_startup  | OFF            |

| innodb_buffer_pool_load_now         | OFF            |

| innodb_buffer_pool_populate         | OFF            |

| innodb_buffer_pool_size             | 8589934592     |

+-------------------------------------+----------------+

10 rows in set (0.00 sec)


Mariadb 10.1 기준으로 innodb_buffer_pool 을 검색해보면 총 10개가 나오는데


버퍼풀 덤프&로드 작업에 필요한것도 있고 아닌것도 있지만.... 일단 나왔으니 다 정리해보자.


- innodb_buffer_pool_dump_at_shutdown

이 옵션이 ON으로 설정되어 있으면 서버가 정상종료시 자동으로 버퍼풀을 덤프한다.


- innodb_buffer_pool_dump_now

이 옵션의 값은 항상 OFF 이고 ON 으로 바꾸게 되면 그 즉시 버퍼풀을 덤프한다. 덤프가 끝나면 자동으로 OFF로 바뀐다.


- innodb_buffer_pool_dump_pct

버퍼풀의 얼마만큼을 덤프할껀지에 대한 퍼센트 값이다. 버전에 따라 기본값이 다르다.


- innodb_buffer_pool_filename

자동이든 수동이든 덤프된 파일명이다. 경로는 기본적으로 data 디렉토리다.


- innodb_buffer_pool_instances

버퍼풀을 운영할 인스턴스를 몇개나 띄우건지 지정해준다.


- innodb_buffer_pool_load_abort

버퍼풀을 로드하고 있을때 이 값을 ON으로 바꿔주면 로드가 취소된다.


- innodb_buffer_pool_load_at_startup

이 옵션이 ON으로 설정되어 있으면 서버 구동시 자동으로 덤프된 버퍼풀을 로드한다.


- innodb_buffer_pool_load_now

이 옵션도 항상 OFF 이고 이 값을 ON으로 바꾸면 그 즉시 덤프된 버퍼풀을 로드한다.


- innodb_buffer_pool_populate

이 값이 ON이면 서버 구동시 지정된 버퍼풀 사이즈 만큼의 메모리를 모두 할당한다.


- innodb_buffer_pool_size

MySQL, MariaDB에서 가장 중요한 옵션. 인덱스와 데이터에 대한 캐시사이즈 값이다.



위 설정중에 innodb_buffer_pool_instances, innodb_buffer_pool_populate, innodb_buffer_pool_size


3가지는 덤프&로드와는 무관한 옵션들이다.



실행 조건


>= MySQL5.6, >= MariaDB10.0



버퍼풀 덤프하기


MariaDB [(none)]> set global innodb_buffer_pool_dump_now=ON;

Query OK, 0 rows affected (0.00 sec)


MariaDB [(none)]> exit

Bye

[root@localhost ~]# ls -alh /app/mariadb/data/

합계 2.2G

drwxrwxr-x  5 mysql mysql  4.0K 2016-06-08 15:35 .

drwxr-xr-x 12 root  root   4.0K 2016-05-02 17:57 ..

-rw-rw----  1 mysql mysql   16K 2016-05-11 16:49 aria_log.00000001

-rw-rw----  1 mysql mysql    52 2016-05-11 16:49 aria_log_control

-rw-r-----  1 mysql root    76K 2016-06-08 15:35 error-log.err

-rw-rw----  1 mysql mysql  9.8K 2016-06-08 15:35 ib_buffer_pool

-rw-rw----  1 mysql mysql  128M 2016-06-08 15:34 ib_logfile0

-rw-rw----  1 mysql mysql  128M 2016-04-29 14:53 ib_logfile1

-rw-rw----  1 mysql mysql  128M 2016-04-29 14:54 ib_logfile2

-rw-rw----  1 mysql mysql  128M 2016-04-29 14:54 ib_logfile3

-rw-rw----  1 mysql mysql 1000M 2016-06-08 15:33 ibdata1

-rw-rw----  1 mysql mysql     0 2016-04-20 19:41 multi-master.info

drwx------  2 mysql mysql  4.0K 2016-04-20 19:41 mysql

drwx------  2 mysql mysql  4.0K 2016-04-20 19:41 performance_schema

-rw-rw-r--  1 mysql mysql  9.7K 2016-05-12 11:42 slow.log

-rw-rw----  1 mysql mysql   24K 2016-05-11 16:49 tc.log



이건 실서버가 아니라 덤프파일이 9.8K 밖에 안되지만 실서버라 해도 용량이 그렇게 크지 않다.


버퍼풀 덤프는 메모리에 있는 모든 내용을 파일로 쓰는게 아니라 버퍼풀에 캐싱된 페이지들의 


id 와 no 값만을 저장하기 때문이다. 그래서 버퍼풀이 몇백기가라 할지라도 덤프파일은 몇백메가면 충분하다.



버퍼풀 로드하기


MariaDB [(none)]> set global innodb_buffer_pool_load_now=ON;

Query OK, 0 rows affected (0.00 sec)


MariaDB [(none)]> show status like 'innodb_buffer_pool_load_status';

+--------------------------------+--------------------------------------------------+

| Variable_name                  | Value                                            |

+--------------------------------+--------------------------------------------------+

| Innodb_buffer_pool_load_status | Buffer pool(s) load completed at 160608 15:45:15 |

+--------------------------------+--------------------------------------------------+

1 row in set (0.01 sec)



innodb_buffer_pool_load_status 상태값으로 로드 현황을 볼 수 있다.


예제로 사용한 덤프파일이 작아서 너무 금방끝나는 바람에 completed 화면만 볼 수 있는데


로드중일때는 Loaded 4444/9999 pages 와 같이 진행상태를 확인할수 있다.





to Top