MySQL에서 파일을 더 열 수 없거나 테이블 캐시를 늘려야 할 때 확인하는 제한값입니다. MySQL 변수만 바꾸어도 systemd 프로세스의 한도가 낮으면 원하는 값이 적용되지 않을 수 있습니다. 실제 실행 서비스와 프로세스에서 순서대로 확인합니다.
현재 제한 조회
DB의 변수와 systemd 설정을 각각 확인합니다. 셸에서 실행한 ulimit -n은 현재 셸의 값으로, systemd가 실행한 mysqld의 값과 같다고 가정하지 않습니다.
SHOW VARIABLES LIKE 'open_files_limit';
SHOW VARIABLES LIKE 'table_open_cache';
SHOW GLOBAL STATUS LIKE 'Opened_files';systemctl show mysqld -p LimitNOFILE -p MainPID
sudo cat /proc/$(systemctl show mysqld -p MainPID --value)/limits배포판 유닛을 덮어쓰지 않고 조정
/usr/lib/systemd/system의 원본 유닛을 직접 고치면 패키지 업데이트에 의해 사라질 수 있습니다. drop-in 설정으로 추가하고 재시작 계획을 잡습니다. 10000은 원노트의 예시이며 실제 필요량을 측정해 결정합니다.
sudo systemctl edit mysqld[Service]
LimitNOFILE=10000sudo systemctl daemon-reload
sudo systemctl restart mysqld
systemctl show mysqld -p LimitNOFILE서비스 이름이 mysqld84 등으로 다르면 실제 인스턴스에 맞춰 수정합니다. 파일 한도 변경은 프로세스 재시작 이후 적용됩니다. 운영 서비스에서는 연결 영향과 복제 상태도 함께 확인합니다.
DB 변수와 실제 사용량 재확인
재기동 뒤 open_files_limit을 다시 조회합니다. table_open_cache는 파일 한도뿐 아니라 연결 수, 테이블 수, 메모리 사용량과 함께 검토합니다. 숫자를 무조건 최대로 올리기보다 오류 발생 시각의 파일 사용량과 테이블 캐시 통계를 비교합니다. 변경 전 수치와 변경 후 결과를 기록해 효과를 판단합니다.