systemd의 파일 한도와 MySQL open_files_limit 조정하기

목차

MySQL에서 파일을 더 열 수 없거나 테이블 캐시를 늘려야 할 때 확인하는 제한값입니다. MySQL 변수만 바꾸어도 systemd 프로세스의 한도가 낮으면 원하는 값이 적용되지 않을 수 있습니다. 실제 실행 서비스와 프로세스에서 순서대로 확인합니다.

현재 제한 조회

DB의 변수와 systemd 설정을 각각 확인합니다. 셸에서 실행한 ulimit -n은 현재 셸의 값으로, systemd가 실행한 mysqld의 값과 같다고 가정하지 않습니다.

TERMINAL / CONFIG
SHOW VARIABLES LIKE 'open_files_limit';
SHOW VARIABLES LIKE 'table_open_cache';
SHOW GLOBAL STATUS LIKE 'Opened_files';
TERMINAL / CONFIG
systemctl show mysqld -p LimitNOFILE -p MainPID
sudo cat /proc/$(systemctl show mysqld -p MainPID --value)/limits

배포판 유닛을 덮어쓰지 않고 조정

/usr/lib/systemd/system의 원본 유닛을 직접 고치면 패키지 업데이트에 의해 사라질 수 있습니다. drop-in 설정으로 추가하고 재시작 계획을 잡습니다. 10000은 원노트의 예시이며 실제 필요량을 측정해 결정합니다.

TERMINAL / CONFIG
sudo systemctl edit mysqld
TERMINAL / CONFIG
[Service]
LimitNOFILE=10000
TERMINAL / CONFIG
sudo systemctl daemon-reload
sudo systemctl restart mysqld
systemctl show mysqld -p LimitNOFILE

서비스 이름이 mysqld84 등으로 다르면 실제 인스턴스에 맞춰 수정합니다. 파일 한도 변경은 프로세스 재시작 이후 적용됩니다. 운영 서비스에서는 연결 영향과 복제 상태도 함께 확인합니다.

DB 변수와 실제 사용량 재확인

재기동 뒤 open_files_limit을 다시 조회합니다. table_open_cache는 파일 한도뿐 아니라 연결 수, 테이블 수, 메모리 사용량과 함께 검토합니다. 숫자를 무조건 최대로 올리기보다 오류 발생 시각의 파일 사용량과 테이블 캐시 통계를 비교합니다. 변경 전 수치와 변경 후 결과를 기록해 효과를 판단합니다.

DB › MySQL
MySQL 목록