데이터베이스 #메모리비우기 #메모리 #리눅스 #CentOS

echo 3 > /proc/sys/vm/drop_caches 명령어를 쓰면 뭐가 안 좋나요?

안녕하세요!


사내 DB서버 메모리가 높아 


free -m의 used가 전체 용량의 80% 이상입니다.

echo 3 > /proc/sys/vm/drop_caches 명령어를 사용해 비워주려고 합니다.


예전에 다른서버에서는 그냥 마음대로 사용했는데, DB서버이다보니 조금 조심스럽네요.


사실 정확히 어떤기능인지도 모르고 그냥 사용하다보니 메모리가 비워져서 막 사용을 했었거든요..


혹시 사용하면 서버에 이상이 생길까요?

(OS는 CentOS 입니다)


부작용이 생긴다면 어떤 부작용이 생길까요?

서버벨은 거의 모든 브랜드의 서버, 네트워크장비, 파트 및 옵션을 운영하고 있습니다.

Sponsored http://www.serverbells.com

서버벨은 HP, DELLEMC, IBM, LENOVO, CISCO, FUJITSU, ARISTA, ARUBA 등 전반적인 IT브랜드 신품/리퍼 재고를 유지 및 서버/스토리지/네트워크/옵션/파트 등을 전문적으로 운영하는 기업입니다.

자세히 보기

9개의 답변이 있습니다.

0 추천 | 5달 전

echo 3 > /proc/sys/vm/drop_caches 를 사용하려면 DB서버에서는 신중하게 사용해야 합니다.

특히, 메모리 부족 문제가 아닌 단순히 캐시 비우기로 사용 가능한 메모리를 확보하려는 경우, 사용을 지양해야 합니다.


그래서, 캐시를 수동으로 비우는 대신, 메모리 사용 상태를 모니터링하고 근본적인 문제를 해결하는 것이 장기적으로 더 안정적이고 효과적입니다.

Reply

댓글 남기기

답변을 작성 하시려면 로그인이 필요합니다.

로그인 회원가입

0 추천 | 5달 전

디비 자체에서 메모리 정리를 하시는게 안전 할것 같습니다.

Reply

댓글 남기기

답변을 작성 하시려면 로그인이 필요합니다.

로그인 회원가입

1 추천 | 5달 전

프로덕션 DB서버에서 단순히 캐시를 강제로 비우는 것은 권장되지 않습니다. 예)MySQL 설정값과 쿼리 튜닝을 통해 메모리 사용을 효율화하고, OS 및 DB 레벨의 모니터링을 통해 필요 시 점진적으로 설정을 조정하는 방안을 권장합니다.

  • 1.drop_caches 기능:
    echo 3 > /proc/sys/vm/drop_caches 명령은 OS 레벨의 파일 시스템 캐시(Page Cache, Dentry, Inode)를 초기화하여 사용 가능한 메모리를 증가시킨 것처럼 보이게 합니다. 그러나 이는 실제 성능 개선과는 무관하며, 캐시 재구축으로 인한 디스크 I/O 증가로 DB쿼리 응답 시간이 일시적으로 늘어날 수 있습니다.
  • 2.부작용:

  • 성능 저하: 캐시 초기화 후 디스크 접근 빈도가 늘어남에 따라 쿼리 응답 속도 저하

  • 시스템 부하 증가: 새로운 캐시를 형성하기 위한 추가 I/O 발생


  • MySQL DB 메모리 사용 조정 예시:
    단순히 캐시를 비우는 대신 MySQL 설정값을 조정하여 메모리 사용을 효율화하는 방식을 고려할 수 있습니다. 


  • 예를 들어: 이외에도 Slow Query Log 분석을 통한 쿼리 튜닝, 적절한 인덱싱, OS나 MySQL 자체 모니터링 툴을 활용한 자원 사용 패턴 분석 등으로 메모리 사용을 최적화할 수 있습니다.

  • InnoDB 버퍼 풀 크기 조정(innodb_buffer_pool_size): DB 주요 데이터가 InnoDB 버퍼 풀에 캐시되도록 충분한 메모리를 할당합니다. 메모리가 너무 작으면 디스크 I/O 증가로 성능 저하가 발생하며, 너무 크면 OS 레벨 캐시나 다른 프로세스에 할당할 메모리가 부족해질 수 있습니다.
  • Key Buffer Size(key_buffer_size) (MyISAM 사용 시): 인덱스 캐시 크기를 적절히 조정하여 디스크 읽기를 최소화합니다.
  • Query Cache 사용성 재검토(query_cache_size): Query Cache 사용 시 오히려 성능 병목이 생길 수 있으므로 상황에 맞게 비활성화하거나 크기를 조정합니다.



Reply

댓글 남기기

답변을 작성 하시려면 로그인이 필요합니다.

로그인 회원가입

1 추천 | 5달 전

캐시는 기존에 실행된 프로그램들이 사용했던 메모리로 실행중이거나 새로 시작될  프로그램들이

필요 시 빠르게 재사용 할 수 있는 메모리 영역입니다. 흔히 디스크 캐시라고도 하는데 , 캐시를 유지

하는 이유는 동일한 데이터를 요구하는 프로그램이 있을 경우 디스크로 부터 다시 읽어 들이는 것보다

캐시된 데이터를 읽는 것이 성능에 유리하기 때문입니다,

따라서 Cached영역은 실행중인 프로그램이 메모리가 필요할 경우 바로 사용되어지는 Free 메모리라고

생각 할수 있습니다.

메모리 사용은 크게 프로세스가 사용하는 Heap 영역과 Disk 캐시 영역으로 나눌 수 있죠

Cached 영역에 Page cache뿐만 아니라 파일의 자료 구조인 inode와 dentry 정보를 저장하여

Cached 영역이 증가 할수록 free 영역은 감소하게 됩니다.

  • 1.DB서버에서 Cache 영역을 주기적으로 삭제하려고 한다면 DB워크로드 영향은

       대용량 데이터 베이스에서는 캐시를 재로딩으로 앤해 쿼리 응답시간이 크게 증가할수 있습니다. 

    2.트랜잭션 처리와 I/O 성능에 부정적인 영향을 미칠수가 있습니다.

    3. 캐시를 갑자기 지우면 데이터베이스의 버퍼 풀과 캐시된 데이터가 무효화됩니다.

    4.CPU와 디스크 I/O에 큰 부하를 줄 수 있습니다.

제 의견은 대용량 DB의 경우는 문제점이 있다고 보구요. 메모리 여유율을 가지고 싶다면 

서비스 특성에 따라 또는 피크 시간을 확인하여 메모리 증설을 하시는 좋을것 같습니다. 

Reply

댓글 남기기

답변을 작성 하시려면 로그인이 필요합니다.

로그인 회원가입

0 추천 | 5달 전

작은 서비스의 서버에서는 별 표가 나지 않지만

큰 서비스가 운영 중인 서버에서는 문제가 될 수도 있습니다.

cache는 io를 시간을 줄이기 위햇 메모리에 데이터를 캐싱해서 빠르게 처리하는 위함인데요.

그 cache를 비우면 cache 데이터를 활용하던 서비스가 hang이 걸리거나

disk에서 cache로 다시 데이터를 불러와야 하기에 아주 느려질 수 있습니다.

특히, 중요한 트랜젝션을 처리하는 DB의 경우 DB 데이터를 디스크에 제대로 쓰지 못하는

문제로 데이터 무결성에 문제가 될 수 있습니다.

운영 중인 상태에서는 권장하지 않습니다. 다만 꼭 필요하면 서비스를 내리고 cache clear하고

다시 서비스는 올리는 방법을 권장합니다. 


Reply

댓글 남기기

답변을 작성 하시려면 로그인이 필요합니다.

로그인 회원가입

0 추천 | 5달 전

일단 DB서버는.. 그렇게 비우지마시고, 유지보수가 있다면 유지보수의 도움을 받아 정리하세요..

그냥 캐시라도 마음대로 지우면... DB서버라 무슨문제가 발생할지 모릅니다. 

물론 일반 서버들도.. 문제가 되면 크지만.. 특히 DB는.. 더욱더 문제가 클수있기에(lock이 걸릴수도있고..) 신중히 접근하는걸 추천드립니다.

Reply

댓글 남기기

답변을 작성 하시려면 로그인이 필요합니다.

로그인 회원가입

0 추천 | 5달 전

https://blog.naver.com/hanajava/220718077400


위의 글에서 보면 반드시 좋은것만은 아니라고 하네요.


일부 데이터 충돌로 인해 DB가 손상될 수도 있다고 합니다. 조심스럽게 사용해야 할 듯 해요....

Reply

댓글 남기기

답변을 작성 하시려면 로그인이 필요합니다.

로그인 회원가입

0 추천 | 5달 전


.https://www.reallinux.co.kr/blog/234


링크 참고하세요. DB 튜닝을 받아 보시는게..

Reply

댓글 남기기

답변을 작성 하시려면 로그인이 필요합니다.

로그인 회원가입

1st 5stars

0 추천 | 5달 전

/proc/sys/vm/drop_caches

는 메모리 상에 있는 process가 작동하면서 사용하는 각종 설정값이 저장되어 있는 내용이라 할 수 있겠고요.


drop_caches 라는 메모리 상에 있는 파일에 cache 설정에 대한 값을 참고해서 cache를 drop 시켜 캐시 메모리를 사용하지 않게 하는 용도라 생각되고요.


drop_caches에 0이 들어가 있는 것이 기본값인데, 0일 경우에는 cache memory를 drop하지 않고 사용하게 되는 것이되겠고요.


1 값일 경우에는 pagecache drop해서 비움.

2 값일 경우에는 dentries와 inodes를 drop해서 비움

3 값일 경우에는 pagecache, dentries, inodes를 모두 drop해서 비움


캐시라는 것은 찾으려고 하는 내용을 디스크와 같은 느린 저장 장치에서 찾아서 가져오는 것이 아니라, 빨리 접근할 수 이쓴 캐시 메모리에서 신속하게 가져와서 사용할 수 있게 해 주어 처리 성능을 높여 주는 효과를 가져다 주게 되는데요.

캐시 메모리에 저장되어 있는 내용을 drop 시켜서 제거 시켜 버린다면, 사용하려는 데이터가 원본이 있는 느린 장치에서 찾아 가져와야 해서 데이터를 처리하는 성능 향상 효과를 얻지 못하게 되는 결과를 가져 오지 않을까 싶네요.


현재 설정이 어떻게 되어 있는 지 확인해 보려면 

cat /proc/sys/vm/drop_caches    명령으로

/proc/sys/vm/ 디렉터리 아래에 있는 drop_caches file에 어떤 값이 저장되어 있는지 확인해 볼 수 있고요.

해당 내용에 저장된 값을 변경하려면

출력 명령이 echo를 사용해서

echo 1 > /proc/sys/vm/drop_caches 와 같이 drop_caches에 기록된 값을 1로 변경할 수 있겠고요.


기본값이 0으로 변경하고 싶다면 echo 0 > /proc/sys/vm/drop_caches   으로 바꿀수 있고, 모든 캐시를 drop 하도록 유지하고 싶다면 echo 3 > /proc/sys/vm/drop_caches  명령으로 값을 3으로 변경해 두면 되겠고요.

Reply

댓글 남기기

답변을 작성 하시려면 로그인이 필요합니다.

로그인 회원가입

답변 달기

답변을 작성 하시려면 로그인이 필요합니다.

로그인 회원가입

IT 솔루션 또는 하드웨어 도입을 검토 중 이신가요?

쉐어드IT 솔루션 상담실에서 믿을 수 있는 제품과 업체를 추천 받으실 수 있습니다.

솔루션 상담실 IT 컨시어지 서비스

데이터베이스 카테고리의 다른 질문들...

  • 3달 전
  • 댓글 : 3달 전
  • 11달 전
  • 댓글 : 11달 전
  • 12달 전
  • 댓글 : 12달 전
  • 약 일 년 전
  • 댓글 : 약 일 년 전
  • 약 일 년 전
  • 댓글 : 약 일 년 전