달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
반응형

http://sqlmvp.kr/220365937569

MySQL/MariaDB Memory 관련 설정 변수


 


  • Version : Mariadb 5.5.4.2-WinX64


 


MySQL/MariaDB 서버에서는 메모리 관련된 설정이 중요하다. MySQL에서 스토리지 엔진별로 주요 메모리 공간이 공유되지 않기 때문에 사용하는 스토리지 엔진에 맞게 메모리 사용을 제한하는 것이 중요하다.


 


여기에서는 중요한 변수 몇 가지만 소개한다. 자세한 내용은 공식 매뉴얼을 참고한다.


 


설정 가능한 변수 목록은 show variables 명령을 사용하여 확인 할 수 있다.


show variables;


 



 


  • innodb_buffer_pool_size : 디스크에서 데이터를 메모리에 캐싱함과 동시에 데이터의 변경을 버퍼링하는 역할을 수행한다. 일반적으로 전체 메모리의 50% ~ 80%까지 설정하며 낮은 값부터 조금씩 크기를 올려가며 적절한 값을 찾는 것이 것이 좋다. 정적 변수이기 때문에 설정 적용을 위해서는 MySQL 재시작이 필요하다.

  • join_buffer_size : 조인이 발생할 때마다 사용되는 버퍼가 아니다. 적절한 조인 조건이 없어서 드리븐 테이블의 검색이 풀 테이블 스캔으로 유도되는 경우 사용 된다.  

  • key_buffer_size : MyISAM의 키 버퍼는 인덱스를 메모리에 저장하는 버퍼의 크기이다. 인덱스만 캐시하기 때문에 InnoDB의 버퍼 풀만큼 할당해서는 안된다. 일반 적으로 전체 메모리의 30~50% 할당하는 것이 좋다.

  • read_buffer_size : MySQL 매뉴얼에서는 풀 테이블 스캔이 발생하는 경우 사용하는 버퍼라고 설명하고 있지만 많은 스토리지 엔진에서 다른 용도로 사용하기도 하기 때문에 명확히 정의하기 어렵다.

  • read_rnd_buffer_size : 인덱스를 사용해 정렬할 수 없을 경우 정렬된 데이터를 메모리에 저장하여 디스크를 다시 한번 읽지 않도록 버퍼링한다. 이때 버퍼의 크기를 결정하는 역할을 한다.

  • sort_buffer_size : 인덱스를 사용할 수 없는 정렬에 메모리 공간을 얼마나 할당할지 결정하는 설정값이다. 이 크기가 너무 작으면 디스크 사용확률이 높아지고 높아지면 클라이언트 스레드가 사용하는 메모리의 양이 커져 메모리 낭비가 심해진다. 이 메모리 공간이 크다고 해서 무조건 정렬이 빨리 끝나는 것은 아니다.

  • tmp_table_size : 메모리에 생성되는 임시 테이블의 최대 크기를 설정한다.

  • Query_cache_size, query_cache_limit : 쿼리 캐시에 관련된 캐시의 크기를 설정한다. 쿼리 캐시는 무조건 크게 설정하는 것이 항상 좋은 것은 아니다.

  • key_cache_block_size – block 크기이며 기본값 1024(단위 byte) 이다.

  • myisam_sort_buffer_size : Repair table, Alter table, CREATE INDEX에 사용되는 버퍼 메모리 크기이다. 최대크기는 4GB이다.


 


[참고자료]


RealMySQL (위키북스)

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

MySQL/MariaDB 아키텍처 메모리 할당 및 사용 구조

 

  • Version : Mariadb 5.5.4.2-WinX64

 

MySQL/MariaDB 메모리 공간은 크게 글로벌 메모리 영역과 로컬 메모리 영역으로 구분할 수 있다. 글로벌 메모리 영역은 MySQL 서버가 시작되면서 무조건 운영체제로부터 할당된다. 글로벌 메모리 영역과 로컬 메모리 영역의 차이는 MySQL서버 내에 존재하는 스레드가 공유해서 사용하는 공간인지 아닌지에 따라 구분된다.

 


  • MySQL 서버의 메모리사용량 =  (글로벌 메모리) + (각 클라이언트 스레드 사용 메모리)

 

[글로벌 메모리 영역]

일반적으로 클라이언트 스레드의 수와 무관하게 하나의 메모리 공간이 할당된다. 필요에 따라서 2개 이상의 메모리 공간을 할당 받을 수도 있다. 생성된 글로벌 메모리 영역이 N개라도 모든 스레드에 의해 공유된다.

 

 

[로컬 메모리 영역]

세션 메모리 영역이라고 표현하며 MySQL 서버상에 존재하는 클라이언트 스레드가 쿼리를 처리하는데 사용하는 메모리 영역이다. 클라이언트 스레드가 사용하는 메모리 공간이라고 해서 클라이언트 메모리 영역 또는 세션 메모리 영역이라고도 한다.

로컬 메모리는 각 클라이언트 스레드별로 독립적으로 할당되며 절대 공유되어 사용되지 않는다. 각 쿼리의 용도별로 필요할 때만 공간이 할당되고 필요하지 않을때는 MySQL이 메모리 공간을 할당하지 않을 수도 있다(대표적으로 소트 버퍼, 조인 버퍼 등). 로컬 메모리 공간은 커넥션이 열려있는 동안 계속 할당된 상태로 남아 있는 공간도 있고(커넥션 버퍼, 결과 버퍼), 쿼리를 실행하는 순간에만 할당했다가 다시 해제하는 공간(소트 버퍼나 조인 버퍼)도 있다.

 

[참고자료]

RealMySQL (위키북스)

 

  • Version : Mariadb 5.5.4.2-WinX64

 

MySQL/MariaDB 메모리 공간은 크게 글로벌 메모리 영역과 로컬 메모리 영역으로 구분할 수 있다. 글로벌 메모리 영역은 MySQL 서버가 시작되면서 무조건 운영체제로부터 할당된다. 글로벌 메모리 영역과 로컬 메모리 영역의 차이는 MySQL서버 내에 존재하는 스레드가 공유해서 사용하는 공간인지 아닌지에 따라 구분된다.

 


  • MySQL 서버의 메모리사용량 =  (글로벌 메모리) + (각 클라이언트 스레드 사용 메모리)

 

[글로벌 메모리 영역]

일반적으로 클라이언트 스레드의 수와 무관하게 하나의 메모리 공간이 할당된다. 필요에 따라서 2개 이상의 메모리 공간을 할당 받을 수도 있다. 생성된 글로벌 메모리 영역이 N개라도 모든 스레드에 의해 공유된다.

 

 

[로컬 메모리 영역]

세션 메모리 영역이라고 표현하며 MySQL 서버상에 존재하는 클라이언트 스레드가 쿼리를 처리하는데 사용하는 메모리 영역이다. 클라이언트 스레드가 사용하는 메모리 공간이라고 해서 클라이언트 메모리 영역 또는 세션 메모리 영역이라고도 한다.

로컬 메모리는 각 클라이언트 스레드별로 독립적으로 할당되며 절대 공유되어 사용되지 않는다. 각 쿼리의 용도별로 필요할 때만 공간이 할당되고 필요하지 않을때는 MySQL이 메모리 공간을 할당하지 않을 수도 있다(대표적으로 소트 버퍼, 조인 버퍼 등). 로컬 메모리 공간은 커넥션이 열려있는 동안 계속 할당된 상태로 남아 있는 공간도 있고(커넥션 버퍼, 결과 버퍼), 쿼리를 실행하는 순간에만 할당했다가 다시 해제하는 공간(소트 버퍼나 조인 버퍼)도 있다.

 

[참고자료]

RealMySQL (위키북스)

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|

마리아DB

Develope/DB...etc... 2015. 9. 2. 13:40
반응형
반응형
Posted by 친절한 웬디양~ㅎㅎ
|