18.3.3.12 MySQL Cluster의 전송 버퍼 매개 변수 구성
이전 NDB 커널에서는 클러스터의 각 노드에 대해 크기가 2M 바이트로 고정 된 전송 버퍼가 채용 된이 버퍼는 노드가 시작될 때 할당했습니다. 이 버퍼의 크기는 클러스터 시작 후 변경할 수 없기 때문에 사전에 트랜스 포터 소켓에 대한 최대 부하에 대응할 수있는 충분한 크기로해야했습니다. 그러나 많은 경우 대부분의 메모리가 사용되지 않기 때문에, 이것은 비효율적 인 메모리의 사용 방법이며, 그 결과 많은 API 노드에 대응하고 확장 할 때 대량의 자원이 낭비 될 가능성 이있었습니다.
이 문제는 결국 (MySQL Cluster NDB 7.0) 모든 트랜스 포터가 공유 풀에서 메모리를 동적으로 할당 통합 된 전송 버퍼를 채용하는 것으로 해결되었습니다. 그러면 송신 버퍼의 크기를 원하는대로 조정할 수 있습니다. 통합 된 전송 버퍼의 구성은 다음 매개 변수를 설정하면 가능합니다.
TotalSendBufferMemory이 매개 변수는 모든 유형의 MySQL Cluster 노드에 대해 설정할 수 있습니다. 즉,
config.ini
파일의[ndbd]
[[mgm]
및[api]
(또는[mysql]
) 섹션에 설정할 수 있습니다. 이것은 각 노드가 할당 모든 구성된 트랜스 포터 간의 사용으로 설정되는 총 메모리 량 (바이트 단위)를 나타냅니다. 설정하는 경우 최소는 256K 바이트 최대는 4294967039입니다.기존 구성과의 호환성을 보장하기 위해이 매개 변수의 기본값은 구성된 모든 트랜스 포터의 최대 전송 버퍼 크기의 총에 트랜스 포터 당 32K 바이트 (1 페이지)을 더한 값으로되어 합니다. 최대는 다음 표와 같이 트랜스 포터의 유형에 따라 다릅니다.
Transporter | Maximum Send Buffer Size (bytes) |
---|---|
TCP | SendBufferMemory (default = 2M) |
SCI | SendLimit (default = 8K) plus 16K |
SHM | 20K |
이로 인해 기존의 구성이 MySQL Cluster NDB 6.3 이전과 거의 동일하게 작동하고 각 트랜스 포터에서 같은 양의 메모리와 전송 버퍼 공간을 사용할 수 있습니다. 그러나 특정 트랜스 포터에 사용되지 않은 메모리는 다른 트랜스 포터로도 사용할 수 없습니다.
OverloadLimit이 매개 변수는
config.ini
파일의[tcp]
섹션에서 사용 된 연결이 과부하 상태로 간주되기 전에 송신 버퍼에 존재하는 보내지 않은 데이터의 양 (바이트 단위)를 나타냅니다. 이러한 과부하가 발생하면 과부하 연결에 영향을 미치는 트랜잭션이 실패하고 과부하 상태가 끝날 때까지 다음과 같은 오류가 발생합니다 : NDB API 오류 1218 (Send Buffers overloaded in NDB kernel ). 기본값은 0입니다. 이 경우 특정 연결에 대한 실질적인 과부하 제한은SendBufferMemory * 0.8
로 계산됩니다. 이 매개 변수의 최대 값은 4G입니다.SendBufferMemory이 값은 단일 트랜스 포터가
TotalSendBufferMemory
에 지정된 전체 풀에서 사용할 수있는 메모리 양에 대한 엄격한 제한을 나타냅니다. 그러나 모든 구성된 트랜스 포터의SendBufferMemory
의 합계는 특정 노드에 설정된TotalSendBufferMemory
보다 커질 수 있습니다. 다수의 노드가 사용되는 경우 모든 트랜스 포터가 최대 메모리 양을 동시에 필요로하지 않는 한,이 같은 방법으로 메모리가 절약됩니다.