MariaDB 10.4 버전대에서 메모리 관련하여 문제가 있다 한다. 쿼리가 많으면 메모리를 엄청 잡아 먹는데 그 후로 갱신이 되지 않는다. 원인을 찾아 보니 malloc 함수 문제라는 이야기가 있어 그걸 아래 절차대로 교체를 해 보았다.
1. 보유 중인 malloc 확인
mysql> SHOW VARIABLES LIKE 'version_malloc_library'; MariaDB [(none)]> SHOW VARIABLES LIKE 'version_malloc_library'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | version_malloc_library | system | +------------------------+--------+ 1 row in set (0.001 sec) |
version_mallloc_library 를 확인해 보면 system 이라고 나온다.
2. 여러 제안이 있었지만 jemalloc을 쓰기로 했다. 아래 명령어로 설치를 한다.
yum install jemalloc |
3. library 를 설치했으면 설정 파일에 넣는다.
파일 수정 /etc/systemd/system/mariadb.service.d/*.conf ( mariadb.service.d/에 conf 파일이 하나 있다.)
아래 항목을 추가한다.
Environment="LD_PRELOAD=/usr/lib64 /libjemalloc.so.1" |
시스템마다 저 libjemalloc.so.1 위치가 다르니 위치 확인을 반드시 한 후 정확한 폴더 명을 적어줘야 한다.
4. 시스템 적용
아래와 같이 입력한다.
systemctl stop mariadb.service && systemctl daemon-reload && systemctl start mariadb.service |
경우에 따라서는 daemon이 안 뜨는 경우도 있는데, 그런 때는 systemctl status mariadb.service 명령어를 입력하여 오류 코드를 확인해야 한다.
5. 확인 : 아래와 같이 결과가 나오면 성공이다.
# pmap `pidof mysqld` | grep jemalloc 00007f7f114a8000 196K r-x-- libjemalloc.so.1 00007f7f114d9000 2044K ----- libjemalloc.so.1 00007f7f116d8000 8K r---- libjemalloc.so.1 00007f7f116da000 4K rw--- libjemalloc.so.1 |
참고
- https://asrarabukhair.com/2020/07/15/mariadb-10-4-x-memory-footprint-issue/
- https://blog.daum.net/keydream/14636167
innodb_buffer_pool_size = 12G
innodb_buffer_pool_instances = 8
innodb_flush_log_at_trx_commit = 0
innodb_log_files_in_group = 3
innodb_thread_concurrency = 12
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_io_capacity = 200
key_buffer_size = 32M