MySQL

Real MySQL - Global, Session, Dynamic, Static variable

weicome 2017. 8. 5. 11:43


본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 

- 포스팅에 포함된 Query 결과는 AWS EC2 FreeTier(CentOS7.2) 환경에 MySQL v5.7.17 에서 실행한 결과를 포함하였습니다. 실행환경에 따라 Query 실행시간이나 RDBMS 실행계획이 다를 수 있습니다. 

- 샘플 코드 dump 파일 적용안내 : http://cafe.naver.com/realmysql 

- 샘플 코드 dump 파일 경로 : http://github.com/wikibook/realmysql/archive/master.zip



서버 설정


- MySQL 서버는 단 하나의 설정 파일만 사용한다. (my.cnf/유닉스계열my.ini/윈도우계열)

- MySQL 서버는 시작될 때만 설정 파일을 참조한다. 지정된 여러 개의 디렉터리를 순차적으로 탐색하면서 처음 발견된 my.cnf 파일을 사용한다.

MySQL 시스템 변수

- MySQL 서버는 기동하면서 설정 파일의 내용을 읽어 메모리나 작동 방식을 초기화 하고 접속된 사용자를 제어하기 위해 이러한 값을 별도로 저장해 둔다. 이렇게 저장된 값을 시스템 변수라고 한다. "SHOW VARIABLES" 또는 "SHOW GLOBAL VARIABLES" 명령어로 확인할 수 있다.

- 시스템변수가 서버와 클라이언트에 영향을 미치는지 판단하려면 변수가 글로번 변수인지 세션 변수인지 구분할 수 있어야 한다.


글로벌 변수와 세션 변수


- 글로벌 범위의 시스템 변수는 서버 인스턴스에서 전체적으로 영향을 미치는 시스템 변수를 의미한다. 쿼리캐시 크기(query_cache_size), 키 캐시 크기(key_buffer_size) 그리고 InnoDB 버퍼 풀의 크기(innodb_buffer_pool_size)

- 세션 범위 변수는 MySQL 클라이언트가 MySQL 서버에 접속할 때 기본적으로 부여하는 옵션의 기본값을 제어하는 데 사용된다.

- 클라이언트가 처음에 접속하면 기본적으로 부여하는 디폴트 값을 가지고 있다. 클라이언트가 별도로 그 값을 변경하지 않은 경우에는 그대로 값이 유지되지만 클라이언트의 필요에 따라 개별 커넥션 단위로 다른 값을 변경할 수 있는 것이 세션 변수다.


동적 변수와 정적 변수


- MySQL 서버의 시스템 변수는 디스크에 저장된 설정파일을 변경하는 경우와 서버의 메모리에 있는 시스템 변수를 변경하는 경우로 구분할 수 있다.

- 디스크에 저장된 설정 파일 내용은 변경하더라도 MySQL을 재시작 하기 전에 적용되지 않는다.

- SHOW 명령이나 SET 명령으로 서버에 적용된 변수값을 확인하거나 바꿀 수 있다.

- SET 명령으로 변경되는 시스템 변수값은 설정파일(my.cnf)에 반영되지 않기 때문에 현재 기동되는 MySQL 인스턴스에만 유효하다.

- 동적으로 시스템 변수 값을 변경(SET)하더라도 MySQL 서버가 my.cnf 파일까지 업데이트해 주지는 않는다. 변경된 값을 앞으로도 유지하려면 my.cnf 파일도 직접 변경해야 한다.

- 시스템 변수 중에서도 동적인 변수들만 SET 명령으로 변경이 가능하다.