짧은 대답 - FreeableMemory가 정말로 낮아지지 않으면 (약 100-200 Mb) 또는 중요한 스왑이 발생하지 않는 한 걱정할 필요가 없습니다 (RDS SwapUsage 미터법 참조).
FreeableMemory는 MySQL 메트릭이 아니지만 OS 메트릭입니다. 정확한 정의를 내리기는 어렵지만, OS를 요청한 사람에게 할당 할 수있는 메모리로 취급 할 수 있습니다 (귀하의 경우에는 MySQL이 될 가능성이 큽니다). MySQL에는 전체 메모리 사용을 일부 제한으로 제한하는 설정 집합이 있습니다 (실제로는 this과 같은 것을 사용할 수 있습니다). 일반적으로 최대 연결 수에 도달하지 못하기 때문에 인스턴스가이 한도에 도달 할 가능성은 거의 없지만 여전히 가능합니다.
이제 FreeableMemory 측정 항목의 '거부'로 돌아갑니다. MySQL의 경우 대부분의 메모리는 InnoDB 버퍼 풀 (자세한 내용은 here 참조)에 의해 소비됩니다. RDS 인스턴스는 기본적으로이 버퍼의 크기가 호스트 실제 메모리의 75 %로 설정되어 있습니다.이 경우 대략 12GB입니다. 이 버퍼는 읽기 및 쓰기 작업에서 사용 된 모든 DB 데이터를 캐싱하는 데 사용됩니다. 그래서이 경우 버퍼가 실제로 커지기 때문에 천천히 캐시 된 데이터로 채워집니다 (이 버퍼는 실제로 모든 DB를 캐시 할만큼 충분히 크다). 그래서 처음 인스턴스를 시작할 때이 버퍼는 비어 있습니다. 그리고 일단이 데이터가 캐시로 가져 오는 DB에 읽기/쓰기 작업을 시작하기보다. 그들은이 캐시가 가득 차서 새로운 요청이 왔을 때까지 여기에 머무를 것입니다. 이 시점에서 가장 최근에 사용한 데이터는 새로운 데이터로 대체됩니다. 따라서 DB 인스턴스를 다시 시작한 후 FreeableMemory가 처음으로 감소한 것은이 사실을 설명합니다. 나쁜 일이 아닙니다. DB를 빠르게 작동시키기 위해 가능한 한 많은 데이터를 캐시에 저장하려고합니다. 불쾌해질 수있는 유일한 것은이 버퍼의 일부 또는 전부가 물리적 메모리에서 스왑으로 푸시 될 때뿐입니다. 이 시점에서 엄청난 성능 저하가 발생합니다.
스왑 핑 가능성을 줄이기 위해 FreeableMemory 메트릭이 지속적으로 100-200Mb의 레벨에있는 경우 다른 용도로 사용되는 MySQL max 메모리를 조정하는 것이 좋습니다.
이 문제를 언급 한 MySQL 설명서를 가르쳐 주시겠습니까? –
https://dev.mysql.com/doc/refman/5.7/en/buffering-caching.html -하지만 MySQL은 엄격하게 아닙니다. OS 자체 (RDS 또는 not)는 일반적으로 입출력을 캐시합니다.MySQL 버퍼링/캐싱 및 OS 캐싱 (디스크) I/O와 함께 일반적인 OS는 거의 항상 사용 가능한 RAM을 채 웁니다 (필요에 따라 항목을 플러시). 이것은 바람직합니다 - 나쁘지 않습니다. Linux는 일반적으로 SQL 프로세스없이 사용 가능한 RAM을 모두 사용합니다. 언급했듯이, freeable이 매우 낮아지지 않으면 (거기에 머무르거나/swaps) 괜찮습니다. – bshea