모니터링(Grafana, Prometheus)/Grafana

Grafana database is locked

babbeolicoding 2025. 4. 11. 23:33
반응형

Grafana 사용 시 metrics을 수집하는 쿼리가 많으면

database is locked이라는 에러가 뜬다.

특히 alert 전송을 걸어두면 해당 에러가 생길 때마다 alert이 날아온다.

 

이런 경우 grafana.db을 mysql 같은 다른 db로 전환해도 되지만

SQLite3를 그대로 쓰면서 가장 간단하게 해당 오류를 해결하는 방법이 있다.

#grafana.db sqlite3 journal_mode 변경
sudo sqlite3 /var/lib/grafana/grafana.db 'pragma journal_mode=wal;'

#모드 변경 확인
sqlite3
Pragma journal_mode;
출력 결과 : wal

해당 작업을 하고 나면
grafana.db-wal, grafana.db-shm 두가지 파일이 더 생긴다.

grafana.db-wal
=> Write-Ahead Logging 파일. 변경 사항이 여기에 먼저 기록됨
grafana.db-shm
=> Shared Memory 파일. WAL 관련 동기화 정보가 담김

WAL 모드에서는 변경 사항을 바로 DB 파일에 기록하지 않고 *.db-wal 파일에 먼저 기록
여러 프로세스가 동시에 읽을 수 있고, 쓰기는 WAL에 순차적으로 들어감 → 동시성↑, 성능↑
SQLite가 자동으로 일정 시점에 WAL 내용을 DB에 병합 (checkpoint)함
*.db-wal과 *.db-shm은 SQLite가 필요할 때 생성하고, 필요 없어지면 삭제하기도 함
반응형