Computer/MySQL

mysql 변수

알찬돌삐 2012. 8. 10. 16:04

5.2.2. 서버 시스템 변수

 

mysql 서버는 서버가 어떻게 구성되었는지를 가리키는 많은 시스템 변수들을 유지 관리 한다. 각 시스템 변수는 디폴트 값을 가지고 있다. 시스템 변수들은 명령어 라인 또는 옵션 파일에서 옵션을 사용하여 서버 스타트업 때 설정될 수 있다. 대부분의 것들은 서버가 구동되고 있는 동안에 SET 명령문을 가지고 동적으로 변경할 수 있는데, 이 명령문은 서버를 종료하고 재 구동 시키지 않는 상태에서 서버 동작을 수정할 수 있다. 여러분은 수식 안에 있는 시스템 변수를 참조할 수도 있다.

 

시스템 변수 이름과 값을 볼 수 있는 방법은 여러 가지가 있다:

    * 서버가 디폴트 및 옵션 파일에서 읽는 변수 값을 보기 위해서는, 아래의 명령어를 사용한다:

mysqld --verbose --help

    * 옵션 파일에 있는 설정 값은 무시하고, 서버 자체가 컴파일한 디폴트에 근거해서 사용할 값을 보기 위해서는, 아래의 명령어를 사용한다:

mysqld --no-defaults --verbose --help

    * 구동 중에 있는 서버가 현재 사용하는 값을 보기 위해서는, SHOW VARIABLES 명령문을 사용한다.

이 섹션에서는 각 시스템 변수를 보다 자세하게 설명한다. 버전 번호가 없는 변수들은 모든 MySQL 5.0 릴리즈에 존재하는 것임을 의미한다. 이러한 변수들에 대한 이전 버전 정보는 MySQL 3.23, 4.0, 4.1 Reference Manual을 참조하기 바란다.

 

부가적인 시스템 변수에 대한 정보는 아래의 섹션을 참고하기 바란다:

    * Section 5.2.3, “Using System Variables”에서는 시스템 변수 값을 설정하고 출력하기 위한 신텍스를 설명한다.
    * Section 5.2.3.2, “동적(dynamic) 시스템 변수”에서는 런타임 시에 설정할 수 있는 변수들을 설명한다.
    * 시스템 변수 튜닝에 대한 정보는 Section 7.5.2, “Tuning Server Parameters”에서 설명하고 있다.
    * Section 14.2.4, “InnoDB Startup Options and System Variables”에서는InnoDB 시스템 변수를 설명한다.

Note: 아래의 변수 설명문 중에는 변수를 “활성화” 또는 “비활성화” 하는 것에 대해 설명하는 것이 있다. 이러한 변수들은 SET 명령문을 사용해서 그 값을 ON 또는 1로 설정해서 활성화 시키거나, 또는 OFF 또는 0으로 설정해서 비활성화 시킬 수가 있다. 하지만, 이러한 변수들을 명령어 라인 또는 옵션 파일에서 설정하기 위해서는, 이것들은 반드시 1 또는 0으로 설정해야 한다; ON 또는 OFF로 설정하면 구동이 되지 않는다. 예를 들면, 명령어 라인에서, --delay_key_write=1는  구동할 수 있지만, --delay_key_write=ON 는 실행할 수 없다.

버퍼 크기, 길이, 그리고 스택의 크기에 대한 값은 별도로 지정되지 않는 한 바이트 단위로 지정한이다.

    * auto_increment_increment

auto_increment_increment 및 auto_increment_offset는 마스터와 마스터간의 리플리케이션을 위한 용도로 사용되며, 또한 AUTO_INCREMENT 컬럼의 동작을 제어하기 위해서도 사용된다. 두 변수 모두 글로벌 또는 로컬 변수로 지정할 수 있으며, 또한 각각은 1에서 65,535 사이의 정수 값을 가질 수 있다. 위의 두 변수 중에 하나를 0으로 설정하면 그 값은 0 대신에 1로 설정된다. 위의 두 변수 중에 하나를 65.535보다 큰 값 또는 0보다 작은 값으로 설정하면 그 값은 65.535가 된다.

 

auto_increment_increment 또는 auto_increment_offset 값을 정수가 아닌 값으로 설정하고자 하면 에러가 발생하고, 그 변수의 실제 값이 그대로 유지된다.

 

이 두 변수는 AUTO_INCREMENT 실행에 아래와 같이 영향을 준다:

          o auto_increment_increment는 연속적인 컬럼 값 사이의 간격을 제어 한다. 예를 들면:

mysql> SHOW VARIABLES LIKE 'auto_inc%';

+--------------------------+-------+

| Variable_name            | Value |

+--------------------------+-------+

| auto_increment_increment | 1     |

| auto_increment_offset    | 1     |

+--------------------------+-------+

2 rows in set (0.00 sec)

 

mysql> CREATE TABLE autoinc1

    -> (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);

  Query OK, 0 rows affected (0.04 sec)

 

mysql> SET @@auto_increment_increment=10;

Query OK, 0 rows affected (0.00 sec)



mysql> SHOW VARIABLES LIKE 'auto_inc%';

+--------------------------+-------+

| Variable_name            | Value |

+--------------------------+-------+

| auto_increment_increment | 10    |

| auto_increment_offset    | 1     |

+--------------------------+-------+

2 rows in set (0.01 sec)

 

mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);

Query OK, 4 rows affected (0.00 sec)

Records: 4  Duplicates: 0  Warnings: 0

 

mysql> SELECT col FROM autoinc1;

+-----+

| col |

+-----+

|   1 |

|  11 |

|  21 |

|  31 |

+-----+

4 rows in set (0.00 sec)

(이러한 변수들의 현재 값을 얻기 위해 SHOW VARIABLES를 어떻게 사용했는지 잘 알아 두기 바란다.)

          o auto_increment_offset는 AUTO_INCREMENT 컬럼 값의 시작 포인트를 결정한다. 아래에 나오는 명령문들이 auto_increment_increment 설명에서 나왔던 예제와 같은 세션 동안 실행된다고 가정한다:

mysql> SET @@auto_increment_offset=5;

Query OK, 0 rows affected (0.00 sec)

 

mysql> SHOW VARIABLES LIKE 'auto_inc%';

+--------------------------+-------+

| Variable_name            | Value |

+--------------------------+-------+

| auto_increment_increment | 10    |

| auto_increment_offset    | 5     |

+--------------------------+-------+

2 rows in set (0.00 sec)

 

mysql> CREATE TABLE autoinc2

    -> (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);

Query OK, 0 rows affected (0.06 sec)

 

mysql> INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL);

Query OK, 4 rows affected (0.00 sec)

Records: 4  Duplicates: 0  Warnings: 0

 

mysql> SELECT col FROM autoinc2;

+-----+

| col |

+-----+

|   5 |

|  15 |

|  25 |

|  35 |

+-----+

4 rows in set (0.02 sec)

만약에 auto_increment_offset 값이 auto_increment_increment 값보다 크다면, auto_increment_offset 값은 무시된다.

 

이 변수들 중에 하나 또는 두개 모두 변경된 후에 새로운 열이 AUTO_INCREMENT 컬럼을 가지고 있는 테이블에 삽입 된다면, 그 결과는 직관적으로 볼 수 없게 되는데, 그 이유는 AUTO_INCREMENT 값 시리즈는 컬럼에 이미 존재하는 어떠한 변수들도 고려하지 않고 계산되기 때문이며, 또한 삽입되는 바로 다음의 값이 적어도 AUTO_INCREMENT 컬럼에 있는 최대 존재 값 보다 큰 시리즈에 있는 값이 되기 때문이다. 다른 말로 한다면, 그 시리즈는 다음과 같이 계산된다:

auto_increment_offset + N × auto_increment_increment

여기에서 N 은 시리즈[1, 2, 3, ...]에 있는 양수 정수 값이다. 예를 들면:

mysql> SHOW VARIABLES LIKE 'auto_inc%';

+--------------------------+-------+

| Variable_name            | Value |

+--------------------------+-------+

| auto_increment_increment | 10    |

| auto_increment_offset    | 5     |

+--------------------------+-------+

2 rows in set (0.00 sec)

 

mysql> SELECT col FROM autoinc1;

+-----+

| col |

+-----+

|   1 |

|  11 |

|  21 |

|  31 |

+-----+

4 rows in set (0.00 sec)

 

mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);

Query OK, 4 rows affected (0.00 sec)

Records: 4  Duplicates: 0  Warnings: 0

 

mysql> SELECT col FROM autoinc1;

+-----+

| col |

+-----+

|   1 |

|  11 |

|  21 |

|  31 |

|  35 |

|  45 |

|  55 |

|  65 |

+-----+

8 rows in set (0.00 sec)

auto_increment_increment 및 auto_increment_offset용으로 나온 값은 시리즈 5 + N × 10을 만들어 내는데, 즉, [5, 15, 25, 35, 45, ...]가 된다. INSERT 보다 앞선 col 컬럼에 있는 최대값은 31이 되며, AUTO_INCREMENT 시리즈에서 그 다음으로 사용 가능한 값은 35가 된다. 따라서 그 시점에 시작되는 col에 대한 삽입 값과 결과는 SELECT 쿼리로 나오는 것과 같게 된다.

 

이러한 두 변수가 하나의 단일 테이블에 영향을 주도록 제한하는 것은 불가능하며, 따라서 이 변수들을 다른 데이터 베이스 관리 시스템이 제공하는 시퀀스에서는 사용할 수가 없다; 이 변수들은 MySQL 서버에 있는 모든 테이블의 모든 AUTO_INCREMENT 컬럼 동작을 제어한다. 이 변수들 중에 하나가 글로벌로 설정 된다면, 그 효과는 글로벌 값이 변경되거나 또는 그것들을 로컬 변수로 설정해서 무시하도록 하지 않거나, mysqld를 재 구동하지 않는 한 계속 유지를 하게 된다. 로컬 변수로 지정하면, 새로운 값은 모든 테이블에서 현재의 사용자가 세션 기간 동안 새롭게 삽입하는 AUTO_INCREMENT 컬럼에 영향을 미치게 되며, 그 세션 동안 값을 변경하지 않는 한 계속 유지를 한다.

 

auto_increment_increment 변수는 MySQL 5.0.2에 추가 되었다. 디폴트 값은 1이다. 

 

Section 6.13, “Auto-Increment in Multiple-Master Replication”를 참조할 것

    * auto_increment_offset

이 변수는 MySQL 5.0.2에서 소개가 되었다. 이것의 디폴트 값은 1이다. auto_increment_increment를 참조하기 바란다.

    * back_log

MySQL이 가질 수 있는 엄청난 양의 연결 요청 수. 이것은 메인 MySQL 쓰레드가 매우 짧은 시간 동안 엄청난 수의 연결을 요청 받을 때 활동하기 시작한다. 그런 경우가 되면 이 변수는 얼마 동안 (실제로는 매우 짧은 시간 동안) 메인 쓰레드로 하여금 연결을 검사하고 새로운 쓰레드를 시작하도록 만든다. back_log 값은 MySQL이 새로운 요청에 대해 답을 하기 위해 순간적으로 멈추기 전에 얼마나 많은 요청을 스택에 넣어 둘 수 있는지를 표시한다. 이 값을 증가 시키는 것은 매우 짧은 시간 동안에 많은 수의 연결을 예상할 경우에만 필요하게 된다.

 

다른 말로 설명하면, 이 값은 서버쪽으로 들어오는 TCP/IP 연결에 대한 수신 큐 (listen queue)의 크기가 된다. 여러분이 사용하는 OS는 이 큐 크기에 대해 고유 값을 가지고 있다. 유닉스의 listen() 시스템 호출에 대한 매뉴얼에서 보다 자세한 정보를 찾을 수 있을 것이다. 여러분이 사용하는 OS 사용 설명서에서 이 변수의 최대 값을 알아보기 바란다. back_log 는 OS 가 제한하는 크기를 초과할 수는 없다.

    * basedir

MySQL이 설치된 베이스 디렉토리. 이 변수는 --basedir 옵션을 가지고 설정할 수 있다.

    * bdb_cache_size

BDB 테이블용 캐시 인덱스와 열에 할당 되는 버퍼의 크기. 여러분이 BDB 테이블을 사용하지 않는다면, 이 캐시에 메모리를 할당하지 않기 위해서는 mysqld를 --skip-bdb와 함께 시작해야 한다.

    * bdb_home

BDB 테이블에 대한 베이스 디렉토리. 이것은 datadir 변수와 동일한 값으로 지정되어야 한다..

    * bdb_log_buffer_size

BDB 테이블용 캐시 인덱스와 열에 할당 되는 버퍼의 크기. 만약에 BDB 테이블을 사용하지 않으면, 이것을 0으로 설정해야 하거나 또는 이 캐시에 메모리를 할당하지 않기 위해서 mysqld를 --skip-bdb와 함께 시작해야 한다.

    * bdb_logdir

BDB 스토리지 엔진이 자신의 로그 파일을 기록하는 디렉토리. 이 변수는 --bdb-logdir 옵션을 가지고 설정할 수 있다.

    * bdb_max_lock

BDB 테이블을 위해 활성화 시킬 수 있는 잠금의 최대 수(디폴트로는 10,000). 여러분이 오랜 트랜젝션을 실행할 때 또는 mysqld가 쿼리를 계산하기 위해 많은 수의 열들을 검사할 때 아래와 같은 에러가 발생할 경우에는 이 값을 증가 시켜야 한다:

bdb: Lock table is out of available locks

Got error 12 from ...

    * bdb_shared_data

여러분이 --bdb-shared-data를 사용해서 다중 프로세스 모드에 있는 버클리 DB(Berkeley DB)를 구동 시킨다면 이것은 ON이 된다. (버클리 DB를 초기화 할 때에는 DB_PRIVATE를 사용하지 말 것.)

    * bdb_tmpdir

BDB 임시 파일 디렉토리.

    * binlog_cache_size

트랜젝션 동안 바이너리 로그용 SQL명령문을 가지고 있기 위한 캐시의 크기. 서버가 어느 한 트랜젝션 스토리지 엔진을 지원할 경우 또는 서버가 바이너리 로그 활성화 상태 ((--log-bin 옵션)일 경우라면 각 클라이언트에 대해서 바이너리 캐시가 할당된다. 여러분이 크기가 큰 다중-명령문 트랜젝션을 자주 사용하는 경우라면 이 캐시의 크기를 크게 해서 성능을 향상 시킬 수가 있다. Binlog_cache_use 와 Binlog_cache_disk_use 상태 변수는 이 변수의 크기를 튜닝 하는데 유용하게 사용 된다.

    * bulk_insert_buffer_size

MyISAM은 비어 있지 않은 테이블에 데이터를 추가할 때 INSERT ... SELECT, INSERT ... VALUES (...), (...), ..., 및 LOAD DATA INFILE에 대해서 벌크 (bulk) 삽입 연산을 보다 빠르게 진행하기 위해서 특별한 트리 형태의 캐시를 사용한다. 이 변수는 쓰레드당 캐시 트리의 크기를 바이트 단위로 제한 한다. 이 변수를 0으로 설정하면 위에서 설명한 최적화 기능이 비활성화 된다. 디폴트 크기는 8MB이다.

    * character_set_client

클라이언트로부터 전달되는 명령문용 문자 셋.

    * character_set_connection

문자 셋 인트로듀서 (introducer)를 갖고 있지 않는 리터럴 (literal) 및 숫자-문자 (number-to-string) 변환을 위해 사용되는 문자 셋.

    * character_set_database

디폴트 데이터 베이스가 사용하는 문자 셋. 서버는 디폴트 데이터 베이스가 변할 때 마다 이 변수를 설정한다. 디폴트 데이터 베이스가 없다면, 이 변수는 character_set_server와 같은 값을 가지게 된다.

    * character_set_filesystem

파일 시스템 문자 셋. 이 변수는 LOAD DATA INFILE 과 SELECT ... INTO OUTFILE 명령문 그리고 LOAD_FILE() 함수와 같은 파일 이름을 참조하는 스트링 리터럴을 해석하는데 사용된다. 이러한 파일 이름은 파일을 오픈 하려는 시도가 있기 전에 character_set_client에서 character_set_filesystem으로 변환된다. 디폴트 값은 binary인데, 이것은 이무런 변환이 없다는 것을 의미한다. 멀티 바이트 파일 이름을 사용할 수 있는 시스템에서는 서로 다른 값을 사용하도록 한다. 예를 들면, 시스템이 UTF-8를 사용해서 파일 이름을 표시한다면, character_set_filesytem을 'utf8'로 설정한다.  이 변수는 MySQL 5.0.19에 추가 되었다.

    * character_set_results

쿼리 결과를 클라이언트에 리턴하기 위해 사용되는 문자 셋.

    * character_set_server

서버의 디폴트 문자 셋.

    * character_set_system

식별자 (identifier)를 저장하기 위해 서버가 사용하는 문자 셋. 그 값은 항상 utf8 이 된다.

    * character_sets_dir

문자 셋이 설치되어 있는 디렉토리.

    * collation_connection

연결 문자 셋의 콜레션 (collation).

    * collation_database

디폴트 데이터 베이스가 사용하는 콜레션 (collation). 서버는 디폴트 데이터베이스가 변경될 때 마다 이 변수를 설정한다. 디폴트 데이터 베이스가 없다면, 이 변수의 값은 collation_server의 값과 같게 된다.

    * collation_server

서버의 디폴트 콜레션 (collation).

    * completion_type

트랜젝션 완료 타입:

          o 만약에 값이 0 (디폴트)이면, COMMIT 과 ROLLBACK 은 실행되지 않음.
          o 값이 1이면, COMMIT 과 ROLLBACK 은 각각 COMMIT AND CHAIN 과 ROLLBACK AND CHAIN과 같게 된다. (새로운 트랜젝션이 이제 막 완료된 트랜젝션과 동일한 고립 (isolation) 레벨을 가지고 곧장 실행된다.)
          o 값이 2이면, COMMIT 과 ROLLBACK 은 COMMIT RELEASE및 ROLLBACK RELEASE 값과 각각 같게 된다. (서버는 트랜젝션을 마친 후에 접속을 끊는다.)

이 변수는 MySQL 5.0.3에서 추가 되었다.

    * concurrent_insert

만약에 ON (디폴트 값)이면, MySQL은 INSERT 와 SELECT 명령문으로 하여금 중간에 빈 블록이 없는 MyISAM 테이블에 대해서 동시에 구동 될 수 있도록 해 준다. mysqld 을 --safe 또는 --skip-new와 함께 실행시키면 이 옵션을 오프 (off)시킬 수가 있다.

 

MySQL 5.0.6에서는, 이 변수는 세 개의 정수 값으로 변경 되었다:

 

Value
   

Description

0
   

오프(Off)

1
   

(디폴트) 테이블 중간에 빈 공간이 없는 MyISAM 테이블에 대한 동시 삽입을 가능하게 함

2
   

모든 MyISAM 테이블에 대한 동시 삽입을 가능하게 함. 테이블이 중간에 공간을 가지고 있고 다른 쓰레드가 사용을 하고 있다면, 새로운 열은 테이블 맨 마지막에 삽입이 된다. 테이블이 사용되고 있지 않다면, MySQL은 일반적인 읽기 잠금을 실행하고 새로운 열을 테이블의 빈 공간에 삽입한다.

    * connect_timeout

mysqld 서버가 Bad handshake에 반응하기 전에 연결 패킷을 기다리는 대기 시간.

    * datadir

MySQL 데이터 디렉토리. 이 변수는 --datadir 옵션으로 설정할 수 있다.

    * date_format

이 변수는 구현 되지 않음.

    * datetime_format

이 변수느 구현 되지 않음.

    * default_week_format

WEEK() 함수용으로 사용하기 위한 디폴트 모드 값. Section 12.5, “날짜 및 시간 함수”를 참조할 것.

    * delay_key_write

이 옵션은 MyISAM 테이블에만 적용된다. 이것은 아래의 값 중에 하나를 가지고서 CREATE TABLE 명령문에서 사용되는 DELAY_KEY_WRITE 테이블 옵션을 처리한다.

 

Option
   

Description

OFF
   

DELAY_KEY_WRITE 는 무시된다.

ON
   

MySQL CREATE TABLE 명령문에서 지정 되는 DELAY_KEY_WRITE 옵션들의 값을 존중한다. 이것이 디폴트 값이다.

ALL
   

새롭게 열린 모든 테이블을, 마치 DELAY_KEY_WRITE 활성화 옵션을 가지고 생성 된 것처럼 다룬다.

 

만약에 DELAY_KEY_WRITE가 테이블에 대해서 활성화 되어 있다면, 모든 인덱스를 업데이트 하고 있는 테이블에 대해서는 키 버퍼가 플러시 되지 않고, 대신에 테이블이 닫힐 때에만 플러시를 하게 된다. 여러분이 이 기능을 사용한다면, 키가 많은 경우에는 속도가 증가하지만, 서버를 --myisam-recover 옵션 (예를 들면, --myisam-recover=BACKUP,FORCE)과 함께 구동 시켜서 모든 MyISAM 테이블을 자동으로 검사하도록 해야 한다.

 

--external-locking를 사용해서 외부잠금을 활성화 시킨다고 하더라도 지연 키 작성 (delayed key write)을 사용하는 테이블에 대한 인덱스 손실은 막지 못한다는 것을 알아 두기 바란다.

    * delayed_insert_limit

delayed_insert_limit 지연 열 삽입을 하고 나면, INSERT DELAYED 핸들러 쓰레드는 어떤 SELECT 명령문 실행이 지연되고 있는지를 검사하게 된다. 만약에 이러한 지연 명령문이 존재한다면, 지연된 열을 삽입하기 전에 이 명령문이 먼저 실행되도록 허용한다.

    * delayed_insert_timeout

INSERT DELAYED 핸들러 쓰레드가 INSERT 명령문이 종료되기 전에 대기해야 하는 시간.

    * delayed_queue_size

이것은 INSERT DELAYED 명령문을 처리할 때 큐에 넣을 수 있는 테이블당 열의 한계 값이다. 큐가 가득 차게 되면, INSERT DELAYED 명령문을 실행하고자 하는 클라이언트는 큐가 다시 비워질 때까지 기다려야 한다.

    * div_precision_increment

이 변수는 / 연산자를 사용한 나눗셈 결과를 보다 정확하게 얻기 위해 지정하는 정밀도(precision) 숫자를 가리킨다 . 디폴트 값은 4 이다. 최소 및 최대의 값은 각각 0과 30이다. 아래의 예문은 디폴트 값을 늘리는 것이 어떤 효과를 나타내는지를 보여 주는 것이다.

mysql> SELECT 1/7;

+--------+

| 1/7    |

+--------+

| 0.1429 |

+--------+

mysql> SET div_precision_increment = 12;

mysql> SELECT 1/7;

+----------------+

| 1/7            |

+----------------+

| 0.142857142857 |

+----------------+

이 변수는 MySQL 5.0.6에서 추가 되었다.

    * engine_condition_pushdown

이 변수는 NDB에 적용된다. 디폴트 값은 0 (OFF)이다: mycol 이 인덱스가 아닌 (non-indexed) 컬럼인 곳에서 SELECT * FROM t WHERE mycol = 42와 같은 쿼리를 실행한다면, 쿼리는 모든 NDB 노드에 있는 전체 테이블을 스캔하면서 실행된다. 각 노드는 MySQL 서버에 모든 열을 보내는데 이 서버는 WHERE 조건문을 적용한다.  engine_condition_pushdown이 1 (ON)로 설정되어 있다면, 조건문은 스토리지 엔진에 “밀어 넣어 (pushed down)”지게 되고 NDB 노드로 보내지게 된다. 각 노드는 이 조건문을 사용해서 스캔을 하게 되며, 이 조건문에 일치하는 열만을 MySQL 서버에 리턴한다.

 

이 변수는 MySQL 5.0.3에서 추가 되었다. 이 버전 이전에는, 디폴트 NDB 동작은 이 변수가 OFF로 설정되었을 때와 같았다. 

    * expire_logs_days

바이너리 로그를 자동으로 삭제하기 위한 날짜의 수. 디폴트는 0 이며, 이것은 “자동 삭제 없음 (no automatic removal)”을 의미하는 것이다. 스타트업 및 바이너리 로그 로테이션이 있을 때에만 삭제가 가능하다.

    * flush

만약에 ON이 되면, 각 SQL명령문이 실행된 후에 서버는 모든 변경 사항을 디스크에 플러시(동기화) 시킨다. 정상적인 경우, MySQL은 각 SQL 명령문이 실행된 후에만 모든 변경 사항을 디스크에 작성하고 디스크와의 동기화는 OS로 하여금 처리하도록 만든다. Mysqld를 --flush 옵션과 함께 구동 시키면 이 변수는 ON 으로 설정 된다.

    * flush_time

이것을 0 이 아닌 값으로 설정을 하면, 사용하던 시스템 자원을 해제하고 플레시되지 않은 데이터를 디스크에 동기화 시키기 위해 모든 테이블은 flush_time 동안 닫히게 된다. 우리는 이 옵션을 윈도우 9x, Me, 또는 시스템 자원이 작은 시스템에서만 사용할 것을 권장한다.

    * ft_boolean_syntax

IN BOOLEAN MODE를 사용하는 불리안 전체-문장 검색 (full text search)이 지원하는 연산자 리스트.

디폴트 값은 '+ -><()~*:""&|'이다. 이 값을 변경하는 규칙은 아래와 같다:

          o 연산자 함수는 스트링 안에 있는 위치를 가지고 결정한다.
          o 대체되는 값은 14개의 문자로 이루어져야 한다.
          o 각 문자는 ASCII non-alphanumeric 이어야 한다.
          o 처음 또는 두 번째 문자는 스페이스 이어야 한다.
          o 11번째와 12번째의 구문 인용 부호 문자를 제외하고는 문자를 중복해서 사용할 수는 없다.
          o 10, 13, 그리고 14 (디폴트는 ‘:’, ‘&’, and ‘|’로 되어 있음)는 나중에 사용할 목적으로 사용이 지정 (reserve)되어 있다.
    * ft_max_word_len

하나의 FULLTEXT 인덱스 안에 포함되는 단어의 최대 길이.

Note: FULLTEXT 인덱스 값을 변경한 후에는 반드시 재 구축해야 한다. REPAIR TABLE tbl_name QUICK을 사용한다.

    * ft_min_word_len

하나의 FULLTEXT 인덱스에 포함 되는 단어의 최소 길이.

 

Note: FULLTEXT 인덱스 값을 변경한 후에는 반드시 재 구축해야 한다. REPAIR TABLE tbl_name QUICK을 사용한다.

    * ft_query_expansion_limit

WITH QUERY EXPANSION을 사용하는 전체-문장 검색용으로 사용하는 탑 매치 (top match)숫자.

    * ft_stopword_file

전체-문장 검색용 스톱워드 (stopword) 리스트를 읽기 위한 파일. 이 파일에 있는 모든 단어들이 사용된다; 코멘트는 사용되지 않는다. 디폴트로 스톱워드의 빌트인 (built-in) 리스트가 사용된다 (myisam/ft_static.c 파일에 정의된 것 같은). 이 변수를 빈 스트링 ('')으로 설정하면 스톱워드 필터링이 비활성화 된다.

 

Note: FULLTEXT 인덱스 값을 변경한 후에는 반드시 재 구축해야 한다. REPAIR TABLE tbl_name QUICK을 사용한다.

l        group_concat_max_len

GROUP_CONCAT() 함수를 위한 최대 사용 길이. 디폴트는 1024이다.

    * have_archive

만약에 mysqld가 ARCHIVE 테이블을 지원하면 YES 가 되고, 그렇지 않으면 NO가 된다.

    * have_bdb

mysqld가 BDB 테이블을 지원하면 YES가 된다. 만약에 skip-bdb이 사용되면 DISABLED 이 된다.

    * have_blackhole_engine

mysqld가 BLACKHOLE 테이블을 지원하면 YES. 아니면, NO.

    * have_compress

zlib 압축 라이브러리를 서버에서 사용할 수 있으면 YES. 아니면, NO. 아닌 경우에는, COMPRESS()와 UNCOMPRESS()는 사용할 수 없다.

    * have_crypt

crypt() 시스템 호출을 서버에서 사용할 수 있다면 YES. 아니면, NO.  아닌 경우에는, ENCRYPT() 함수를 사용할 수 없다.

    * have_csv

mysqld가 ARCHIVE 테이블을 지원하면 YES. 아니면, NO.

    * have_example_engine

mysqld가 EXAMPLE 테이블을 지원하면 YES. 아니면, NO.

l        have_federated_engine

mysqld가 FEDERATED 테이블을 지원하면 YES. 아니면, NO. 이 변수는 MySQL 5.0.3에서 추가 되었다.

    * have_geometry

서버가 스파샬 (spatial) 데이터 타입을 지원하면 YES. 아니면, NO.

    * have_innodb

mysqld가 InnoDB 테이블을 지원하면 YES. --skip-innodb이 사용되면, DISABLED.

    * have_isam

MySQL 5.0의 경우에는 이 변수를 이전 버전과의 호환성을 위해서만 사용한다. 이것은 항상 NO 인데, 그 이유는 ISAM 테이블이 더 이상 지원되지 않기 때문이다.

    * have_ndbcluster

mysqld가 NDB Cluster 테이블을 지원하면 YES. --skip-ndbcluster 이 사용되면, DISABLED.

    * have_openssl

mysqld가 서버/클라이언트 프로토콜 SSL (암호화)을 지원하면 YES. 아니면, NO.

    * have_query_cache

mysqld가 쿼리 캐시를 지원하면 YES. 아니면, NO.

    * have_raid

MySQL 5.0에서, 이 변수는 예전 버전과의 호환성을 위해서만 사용된다. 이것은 항상 NO인데, 그 이유는 RAID 테이블은 더 이상 지원되지 않기 때문이다.

    * have_rtree_keys

RTREE 인덱스를 사용할 수 있다면 YES. 아니면, NO. (이것은 MyISAM 테이블에 있는 스파샬 인덱스를 위해 사용된다.)

    * have_symlink

심볼릭 링크 지원이 활성화 되면 YES. 아니면, NO. 유닉스에서 DATA DIRECTORY 와 INDEX DIRECTORY 테이블 옵션 지원을 위해서, 그리고 윈도우에서는 데이터 디렉토리 심링크(symlink)를 지원하기 위해서는 이 변수가 필요하다.

    * init_connect

연결 되어 있는 각 클라이언트를 위해 서버가 실행하는 스트링. 이 스트링은 한 개 또는 그 이상의 SQL 명령문으로 구성된다. 다중 명령문을 지정하기 위해서는, 각각을 세미콜론으로 구분한다. 예를 들면, 각 클라이언트는 디폴트로 오토커미트 (autocommit) 모드를 활성화 해서 사용한다. 오토커미트를 디폴트로 비활성화 시킬 수 있는 글로벌 시스템 변수는 없으나, init_connect를 사용하면 동일한 효과를 얻을 수가 있다:

SET GLOBAL init_connect='SET AUTOCOMMIT=0';

이 변수를 명령어 라인 또는 옵션 파일에서 설정할 수 있다. 옵션 파일에 안에서 이 변수를 설정하기 위해서는 다음의 라인을 추가한다:

[mysqld]

init_connect='SET AUTOCOMMIT=0'

SUPER 권한을 가지고 있는 사용자는 init_connect 컨텐츠를 실행할 수 없다는 점을 알아두기 바란다. 이것은 init_connect에 대한 오류 값으로 인해 모든 클라이언트가 연결을 할 수 없는 경우가 발생하지 않도록 하기 위한 것이다. 예를 들면, 이 변수 값에 신텍스 에러가 있는 명령문이 들어 있을 수도 있는데, 이런 일이 발생하면 클라이언트가 연결을 할 수 없게 된다. init_connect 를 SUPER 권한을 가지고 있는 사용자용으로 실행하지 않으면 연결을 열고 init_connect 값을 고치는 것이 가능해진다.

    * init_file

여러분이 서버를 구동할 때 --init-file 옵션을 사용해서 지정한 파일의 이름. 이것은 서버가 구동될 때 실행되기를 원하는 SQL 명령문을 가지고 있는 파일이어야 한다. 각 명령문은 싱글 라인으로 되어 있어야 하고 코멘트가 없어야 한다.

    * init_slave

이 변수는 init_connect와 유사하지만, SQL 쓰레드가 시작될 때마다 슬레이브 서버가 실행하는 스트링이 된다. 스트링 포맷은 init_connect 변수 포맷과 같다.

    * innodb_xxx

InnoDB 시스템 변수는 Section 14.2.4, “InnoDB 스타트업 옵션 및 시스템 변수”에 나와 있다.

    * interactive_timeout

인터액티브 (interactive) 연결이 닫히기 전에 서버가 대기하는 시간. 인터액티브 클라이언트는 mysql_real_connect()를 위한 CLIENT_INTERACTIVE 옵션을 사용하는 클라이언트 형태로 정의된다. wait_timeout을 참조할 것.

    * join_buffer_size

인덱스를 사용하지 않는 조인이 (join) 전체 테이블을 스캔하기 위해 사용하는 버퍼의 크기. 정상적인 경우, 빠른 조인을 얻을 수 있는 최선의 방법은 인덱스를 추가하는 것이다. 인덱스 추가가 불가능할 때 전체 조인을 보다 빠르게 하기 위해서는 join_buffer_size 값을 늘리면 된다. 하나의 조인 버퍼가 두 테이블 간의 각 전체 조인을 위해 할당된다. 인덱스를 사용하지 않는 여러 개의 테이블 간의 복잡한 조인을 위해서는, 다중 조인 버퍼가 필요할 수도 있다.

    * key_buffer_size

모든 쓰레드는 MyISAM 테이블을 위한 인덱스 블록을 버퍼링하고 공유한다. key_buffer_size는 인덱스 블록을 위해 사용되는 버퍼의 크기이다. 키 버퍼는 키 캐시라고도 불린다.

 

key_buffer_size의 최대 사용 가능 설정 값은 4GB이다. 하지만, 효과적으로 사용되는 최대 크기는 이보다는 작은데, 이 크기는 여러분이 사용하는 시스템의 물리적인 RAM과 OS 또는 하드웨어 플랫폼이 한정하는 프로세스 당 RAM의 한계치에 따라 정해진다.

 

여유가 있는 만큼 최대한의 크기로 이 값을 늘려서 보다 나은 인덱스 핸들링 (모든 읽기와 다중 쓰기에 대해)을 구현한다. MySQL이 주로 구동되는 머신의 전체 메모리 중에서 25%를 사용하는 것이 가장 일반적인 방법이다. 하지만, 이 값을 너무 크게 설정하면 (예를 들면, 전체 메모리의 50% 이상), 시스템은 극도의 성능 저하가 발생할 수도 있다. MySQL은 데이터 읽기를 위한 파일 시스템 캐싱을 OS에 의존하기 때문에, 이러한 파일 시스템 캐싱을 위한 메모리 여유 공간을 확보해 두어야 한다. 또한, 다른 스토리지 엔진을 위한 메모리 공간도 고려를 해야 한다.

 

SHOW STATUS 명령문 및 Key_read_requests, Key_reads, Key_write_requests, 그리고 Key_writes 상태 변수를 조사함으로써 키 버퍼의 성능을 검사할 수가 있다.

 

Key_reads/Key_read_requests 비율은 일반적으로 0.01 보다 작게 나온다.

 

Key_writes/Key_write_requests 비율은 업데이트와 삭제를 주로 사용할 경우에는, 거의 1 정도가 되지만, 만약에 많은 열을 동시에 업데이트를 하거나 또는 DELAY_KEY_WRITE 테이블 옵션을 사용할 경우에는 1보다 훨씬 작게 나온다.

 

사용 중에 있는 키 버퍼의 조각 (fraction)은 key_buffer_size를 Key_blocks_unused 상태 변수와 버퍼 블록 크기를 조인 (join)해서 측정할 수가 있으며, 이것은 key_cache_block_size 시스템 변수를 가지고 사용할 수가 있다:

1 - ((Key_blocks_unused × key_cache_block_size) / key_buffer_size)

이 값은 추정 값일 뿐인데, 그 이유는 키 버퍼에 있는 일정 공간들이 관리 구조상 내부적으로 할당되어 있기 때문이다.

 

다중의 MyISAM 키 캐시를 생성하는 것은 가능하다. 4GB의 크기 제한은 각 캐시에 개별적으로 적용되며, 그룹으로는 적용되지 않는다.

    * key_cache_age_threshold

이 값은 핫 서브-체인(hot sub-chain)에서 웜 서브 체인(warm sub-chain)으로 버퍼를 디모션(demotion)시키는 것을 제어한다. 보다 작은 값일수록 디모션이 더 빠르게 진행된다. 최소 값은 100 이다. 디폴트 값은 300이다.

    * key_cache_block_size

키 캐시에 있는 블록의 바이트 크기. 디폴트는 1024이다.

    * key_cache_division_limit

키 캐시 버퍼 체인의 핫 및 왐 서브 체인 (hot and warm sub-chain)간의 구분 포인트(division point). 이것은 왐 서브 체인용으로 사용되는 버퍼의 퍼센트 값이 된다. 사용 가능한 범위는 1에서 100까지 이다. 디폴트 값은 100이다.

    * language

에러 메시지용으로 사용되는 언어.

    * large_file_support

mysqld가 대용량 파일 지원을 위한 옵션과 함께 컴파일 되었는지를 확인함.

    * large_pages

대용량 페이지 지원이 활성화 되었는지를 검사. 이 변수는 MySQL 5.0.3에 추가 되었다.

    * license

서버가 가지고 있는 라이센스 타입.

    * local_infile

LOCAL이 LOAD DATA INFILE 명령문을 지원하는지를 검사.

    * locked_in_memory

mysqld가 메모리에서 –memlock을 가지고 잠겨 있는지를 검사.

    * log

모든 명령문을 일반 쿼리 로그에 기록하는 것이 활성화 되었는지를 검사.

    * log_bin

바이너리 로그가 활성화 되었는지를 검사.

    * log_bin_trust_function_creators

이 변수는 바이너리 로그가 활성화 되었을 때 적용된다. 이것은 스토어드 함수 생성기(creator)가 바이너리 로그에 불안정한 이벤트를 작성하는 스토어드 함수를 생성하지 못하도록 제어한다. 0 (디폴트)으로 설정되면, 사용자가 CREATE ROUTINE 또는 ALTER ROUTINE 권한과 더불어서 SUPER 권한을 갖고 있지 않는 한 스토어드 함수를 생성 또는 변경할 수가 없게 된다. 0으로 설정하면 함수가 DETERMINISTIC 특성 또는 READS SQL DATA 또는 NO SQL 특성을 가지고 선언되어야 하는 제약이 추가된다. 이 변수를 1로 설정하면, MySQL은 스토어드 함수 생성에서 대해서 이러한 제약을 하지 않게 된다.

 

이 변수는 MySQL 5.0.16에 추가 됨.

    * log_bin_trust_routine_creators

이것의 예전 이름은 log_bin_trust_function_creators이었다. MySQL 5.0.16 이전에는, 이것이 스토어드 프로시저에는 적용되었으나 스토어드 함수에는 적용되지 않았다. 5.0.16 이후에는, 이 변수의 기능이 거의 없어졌다. 이것은 예전 버전과의 호환성을 위해서만 인식되고 있지만 경고문은 만들게 된다.

 

이 변수는 MySQL 5.0.6에 추가 되었다.

    * log_error

에러 로그의 위치.

    * log_slave_updates

마스터 서버로부터 슬레이브 서버가 받게 되는 업데이트가 슬레이브 자신의 바이너리 로그에 기록되는지를 검사한다. 바이너리 로깅을 슬레이브에서 영향을 주기 위해서는 이것이 반드시 활성화 되어야 한다. Section 6.8, “리플리케이션 스타트업 옵션”를 참조할 것.

·            log_slow_queries

슬로우 쿼리가 로그 되는지를 검사. “슬로우(Slow)”는 long_query_time 변수 값을 가지고 측정한다. Section 5.12.4, “슬로우 쿼리 로그”를 참조.

    * log_warnings

추가적인 경고 메시지가 나오는지를 검사. 디폴트로는 활성화 (1)되어 있다. 허용되지 않은 연결은 그 값이 1보다 크지 않으면 에러 로그에 기록되지 않는다.

    * long_query_time

쿼리 실행이 이 값보다 오래 걸리면, 서버는 Slow_queries 상태 변수를 증가시킨다. --log-slow-queries 옵션을 사용하면, 쿼리는 슬로우 쿼리 로그 파일에 기록된다. 이 값은 CPU 시간이 아닌 실제 시간으로 측정되기 때문에, 가볍게 (lightly) 로드된 시스템의 한계 상황 (threshold)에 있는 쿼리는 무겁게 (heavily) 로드된 시스템의 한계 상황 위에 있는 것 보다 우선권을 가지게 된다. 최소 값은 1이다. Section 5.12.4, “슬로우 쿼리 로그”를 참조할 것.

    * low_priority_updates

만약에 이 값을 1로 설정하면, 모든 INSERT, UPDATE, DELETE, 및 LOCK TABLE WRITE 명령문은 이것들이 영향을 주는 테이블에 더 이상 처리되지 않은 SELECT 또는 LOCK TABLE READ 명령문이 없을 때 실행을 대기한다. 예전에는 이 변수를 sql_low_priority_updates라고 불렀다.

    * lower_case_file_system

이 변수는 데이터 디렉토리가 저장되어 있는 파일 시스템의 대소 문자 구분 여부를 나타낸다. OFF는 파일 이름의 대소 문자 구분을 하는 것을 의미하며, ON은 구분 하지 않는다는 것을 나타낸다.

    * lower_case_table_names

이 변수가 1로 설정되면, 테이블 이름은 디스크에 소문자로 저장되고 테이블 이름 비교는 대소 문자를 구분하지 않게 된다. 2로 설정되면, 테이블 이름은 지정한 문자 크기의 이름으로 저장되지만, 소문자 비교만을 하게 된다. 이 옵션은 데이터 베이스 이름과 테이블 별칭에도 적용된다.

 

InnoDB 테이블을 사용하는 경우에는, 모든 플랫폼에 이 변수 값을 1로 설정해서 모든 이름이 소문자로 변환되도록 해야 한다.

 

대소 문자를 구분하는 파일 이름을 갖고 있지 않는 시스템 (윈도우 또는 Mac OS X)에서 MySQL을 구동하고 있다면, 이 변수를 0으로 설정하지 말아야 한다. 이 변수가 스타트업 때 설정되지 않고 데이터 디렉토리가 저장되어 있는 파일 시스템이 파일 이름의 문자 크기를 구분하지 않는다면, MySQL은 자동으로 lower_case_table_names을 2로 설정한다.

    * max_allowed_packet

패킷 한 개의 최대 크기 또는 생성되었거나 생성 중인 스트링의 최대 크기.

패킷 메시지 버퍼는 net_buffer_length 바이트 크기로 초기화 되지만, 필요할 경우에는 max_allowed_packet 바이트만큼 커지게 된다. 디폴트 값은 대형 패킷을 가져올 만큼의 크기가 된다.

 

여러분이 BLOB 컬럼 또는 긴 스트링을 사용한다면 이 값을 늘려야 한다. 그 크기는 여러분이 원하는 BLOB의 크기만큼 만들어야 한다. max_allowed_packet에 대한 프로토콜 제한치는 1GB이다.

    * max_binlog_cache_size

다중 명령문 트랜젝션이 이것보다 많은 메모리를 요구한다면, 서버는 Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage 에러를 발생 시킨다.

    * max_binlog_size

바이너리 로그에 기록하는 것으로 인해 현재의 로그 파일 크기가 이 변수 값을 초과하게 된다면, 서버는 바이너리 로그를 로테이트 시킨다 (현재의 파일을 닫고 다음 파일을 연다). 여러분은 이 변수의 값을 1GB보다 초과하거나 4096 바이트 보다 작게 설정할 수 없다. 디폴트 값은 1GB이다.

 

하나의 트랜젝션은 그 자체가 바이너리 로그에 기록되기 때문에, 트랜젝션을 여러 개로 나누어서 각 바이너리에 저장하는 것은 불가능 하다. 그러므로, 커다란 트랜젝션을 가지고 있는 경우에는, max_binlog_size 보다 큰 바이너리 로그를 볼 수도 있을 것이다.

 

max_relay_log_size가 0이면, max_binlog_size의 값은 릴레이 로그에도 함께 적용된다.

    * max_connect_errors

만약에 어떤 호스트에서 나오는 인터럽트의 숫자가 이 변수의 숫자보다 많으면, 그 호스트가요청하는 다음 연결은 차단된다. FLUSH HOSTS 명령문을 사용하면 차단된 호스트를 해제 시킬 수 있다.

    * max_connections

클라이언트의 동시 연결 허용 숫자. 이 값을 늘리면 mysqld가 요구하는 파일 디스크립터(descriptor)의 숫자가 늘어나게 된다.

    * max_delayed_threads

INSERT DELAYED 명령문을 처리하기 위해서는 쓰레드의 숫자를 이 값보다 크게 시작하지 말 아야 한다. 만약에 모든 INSERT DELAYED 쓰레드를 사용한 후에 새로운 테이블에 데이터를 삽입하고자 한다면, 삽입되는 열은 마치 DELAYED 속성을 지정하지 않은 것처럼 동작한다. 이것을 0으로 설정하면, MySQL은 DELAYED 열을 처리하는 쓰레드를 결코 생성하지 않는다; 이로 인해 DELAYED가 전체적으로 비활성화된다.

    * max_error_count

SHOW ERRORS 와 SHOW WARNINGS 명령문에 의해 화면에 보여주기 위해 저장하는 에러, 경고, 그리고 노트 메시지의 최대 숫자.

    * max_heap_table_size

이 변수는 MEMORY 테이블이 커질 수 있는 최대의 크기를 설정한다. 이 변수의 값은 MEMORY 테이블의 MAX_ROWS 값을 계산하는데 사용된다. 이 변수 값 설정은 테이블이 CREATE TABLE과 같은 명령문을 가지고 재 생성 되지 않거나 ALTER TABLE 또는 TRUNCATE TABLE을 가지고 변경되지 않는 한 기존의 어떠한 MEMORY 테이블에도 영향을 미치지 않는다.

    * max_insert_delayed_threads

이 변수는 max_delayed_threads와 동일한 것이다.

    * max_join_size

max_join_size 열 (싱글-테이블 명령문에 대해서) 또는 열 조합 (다중-테이블 명령문에 대해서) 보다 많은 것을 검사하는데 필요하거나 또는 max_join_size 디스크 검사보다 많은 것을 처리하는 SELECT 명령문을 허용하지 않는다. 이 값을 설정하면, 여러분은 키가 올바르게 사용되지 않고 오랜 시간 동안 처리가 되는 SELECT 명령문을 가져올 수가 있다. 사용자가 WHERE 구문이 부족하거나, 오랜 시간이 걸리는, 또는 수많은 열을 리턴 하는 조인 (join)을 실행하고자 한다면, 이것을 설정한다.

 

DEFAULT 값이 아닌 것으로 이 변수를 설정하면 SQL_BIG_SELECTS 값은 0으로 리셋 된다.

 

SQL_BIG_SELECTS 값을 다시 설정하면, max_join_size 변수는 무시된다.

 

쿼리 결과가 쿼리 캐시에 있다면, 결과 크기 검사는 수행되지 않는데, 그 이유는 결과 값이 이전에 이미 계산되었기 때문에 클라이언트에 그것을 보낼 필요가 없기 때문이다.

 

예전에는 이 변수를 sql_max_join_size라고 했었다.

    * max_length_for_sort_data

어떤 filesort 알고리즘을 사용할지 결정하는 인덱스 값의 크기를 컷오프함 (cutoff).

    * max_relay_log_size

리플리케이션 슬레이브가 자신의 릴레이 로그에 기록을 함으로써 현재의 로그 파일이 이 변수 크기보다 커지게 되면, 슬레이브는 릴레이 로그를 로테이트 시킨다 (현재의 파일을 닫고 그 다음의 파일을 연다). 만약에 max_relay_log_size가 0 이면, 서버는 max_binlog_size를 바이너리 로그와 릴레이 로그 모두를 위해 사용한다. max_relay_log_size가 0보다 크게 되면, 서버는 릴레이 로그 크기를 제한하게 되고, 여러분이 두 개의 로그 파일을 서로 다른 크기로 사용할 수 있도록 한다.

 

max_relay_log_size는 4096 바이트와 1GB, 또는 0으로 설정해야 한다. 디폴트 값은 0이다.

    * max_seeks_for_key

키를 기반으로 열을 찾을 때 검색 (seek)하는 최대 추정 숫자의 한계.  MySQL 옵티마이저는, 인덱스를 스캐닝해서 테이블에서 매칭 열을 찾을 때, 인덱스의 실제 기수 (cardinality)에는 상관 없이 키 검사의 숫자가 이것보다 크지 않다고 가정한다. 이것을 작은 값으로 설정해서(100 정도) MySQL로 하여금 테이블 스캔 대신에 인덱스 스캔 하도록 만들 수가 있다.

    * max_sort_length

BLOB 또는 TEXT 값을 정렬할 때 사용하는 바이트 수. 각 값의 첫 번째 max_sort_length 바이트만이 사용된다; 나머지는 무시된다.

    * max_tmp_tables

클라이언트가 동시에 오픈할 수 있는 임시 테이블의 최대 숫자. (이 옵션은 아직 어떠한 연산도 하지 않는다.)

    * max_user_connections

지정한 모든 MySQL 계정에게 허용된 최대 동시 연결 수. 0 은 “제한 없음 (no limit)”을 의미 한다.

MySQL 5.0.3 이전에는, 이 변수는 글로벌 범위에서만 사용되었다. MySQL 5.0.3 이후에는, 읽기 전용 범위에서도 적용된다. 이 변수는 글로벌 및 세션 범위 (읽기 전용)로 설정할 수 있다. 현재의 계정이 0이 아닌 MAX_USER_CONNECTIONS 리소스 리미트 (limit)를 가지고 있지 않는 한 세션 변수는 글로벌 변수와 같은 값을 가지게 된다. 이와 같은 경우, 세션 변수에는 계정 리미트가 적용된다.

    * max_write_lock_count

이 변수만큼 쓰기 잠금 (lock)을 실행 한 후에, 지연 중인 읽기 잠금 요청을 실행하도록 만든다.

    * myisam_data_pointer_size

아무런 MAX_ROWS 옵션이 지정되지 않을 때 CREATE TABLE이 MyISAM 테이블용으로 사용하는 디폴트 포인터 크기 (바이트 단위). 이 변수는 2보다 작거나 7보다 클 수가 없다. 디폴트는 6이다 (5.0.6 이전에는 4 이다). 이 변수는 MySQL 4.1.2에서 추가 되었다.

    * myisam_max_extra_sort_file_size (거의 사용하지 않음)

빠른 MyISAM 인덱스 생성을 위해 사용하는 임시 파일이 여기에서 지정하는 키 캐시보다 크다면, 키 캐시 방식을 사용하게 된다. 이것은 인덱스를 생성하기 위해 좀 더 느린 키 캐시 방식을 사용하는 대형 테이블에서 긴 문자 키를 사용하도록 하기 위해 주로 사용된다. 이 값은 바이트로 지정한이다.

 

Note: 이 변수는 MySQL 5.0.6에서 삭제되었다.

    * myisam_max_sort_file_size

MyISAM 인덱스를 재 생성하는 동안 (REPAIR TABLE, ALTER TABLE, 또는 LOAD DATA INFILE를 실행하는 동안) MySQL이 사용할 수 있는 임시 파일의 최대 크기. 파일의 크기가 이 값보다 크면, 인덱스는 좀 더 느린 키 캐시를 대신 사용해서 생성된다.

    * myisam_recover_options

--myisam-recover 옵션의 값. Section 5.2.1, “mysqld Command Options”를 참조할 것.

    * myisam_repair_threads

이 값이 1보다 크면, MyISAM 테이블 인덱스는 Repair by sorting 프로세스 동안에 병렬 (각 인덱스는 자신의 쓰레드에 있게 됨)로 생성된다. 디폴트는 1이다. Note: 다중-쓰레드 리페어 (repair)는 아직 베타 수준이다.

    * myisam_sort_buffer_size

REPAIR TABLE을 실행하는 동안 MyISAM 인덱스를 정렬할 때 또는 CREATE INDEX 또는 ALTER TABLE을 가지고 인덱스를 생성할 때 할당되는 버퍼의 크기.

    * myisam_stats_method

MyISAM 테이블용 인덱스 값 배포에 관련된 통계 값을 수집할 때 서버가 NULL 값을 처리하는 방법. 이 변수는 nulls_equal과 nulls_unequa 중에 하나의 값을 가진다. nulls_equal의 경우에는, 모든 NULL 인덱스 값은 동일한 값으로 간주되며 NULL 값의 숫자와 동일한 크기를 갖는 단일 값 그룹을 형성한다. nulls_unequal의 경우에는, NULL 값은 동일하지 않는 것으로 간주되고, 각각의 NULL은 크기가 1인 서로 구분되는 그룹을 형성한다.

 

테이블 통계 값를 만들기 위해 사용하는 방식은 옵티마이저가 쿼리 실행을 위해 인덱스를 선택하는 방법에 영향을 주며, 이에 대해서는 Section 7.4.7, “MyISAM 인덱스 통계값 수집”에서 상세하게 다루고 있다.

 

이 변수는 MySQL 5.0.14에서 추가 되었다. 이전의 버전에서의 통계 값 수집 방법은 nulls_equal과 동일하였다.

    * multi_read_range

범위를 선택하는 동안에 스토리지 엔진에 보내는 범위의 최대 숫자를 지정한다. 디폴트 값은 256이다. 하나의 엔진에 여러 개의 범위를 동시에 보내면 특히 NDBCLUSTER와 같은 엔진의 선택 연산 성능이 크게 향상된다. 이 엔진은 범위 요청을 모든 모드에 보낼 필요가 있고, 한번에 이러한 많은 요청을 보내는 것은 통신 비용을 매우 효과적으로 절감시킬 수가 있다. 이 변수는 MySQL 5.0.3에서 추가 되었다.

    * named_pipe

(윈도우 시스템만 적용됨.) 서버가 네임드 파이프를 통한 연결을 지원하는지 나타낸다.

    * net_buffer_length

통신 버퍼는 SQL 명령문 사이에서 이 변수의 크기를 리셋 시킨다. 이 변수는 보통 변경되지 않지만, 만약에 여러분이 메모리를 거의 갖고 있지 않다면, 이 변수를 클라이언트가 보내는 명령문의 길이만큼 설정할 수 있다. 만약에 명령문이 이 길이를 초과하면, 버퍼는 자동으로 늘어나게 되고, 크기는 max_allowed_packet 바이트만큼 된다.

    * net_read_timeout

읽기 연산을 중단하기 전에 서버 연결을 통해 보다 많은 데이터를 읽기 위해 대기하는 시간. 이 타임 아웃은 TCP/IP를 통한 연결에만 적용되며, 유닉스 소켓 파일, 네임드 파이프, 또는 공유 메모리를 통한 연결은 적용되지 않는다. 서버가 클라이언트로부터 데이터를 읽을 경우에는 net_read_timeout이 중단 시기를 제어하는 타임 아웃 값이 된다. 서버가 클라이언트에 쓰기 연산을 하는 경우에는 net_write_timeout이 중단 시기를 제어하는 타임 아웃 값이 된다. slave_net_timeout도 함께 참조하기 바람.

    * net_retry_count

통신 포트에서 읽기 연산이 인터럽트 (interrupt)되면, 중단을 하기 전에 이 변수가 지정하는값만큼 다시 시도를 한다. FreeBSD에서는 이 변수를 매우 크게 설정을 해야 하는데, 그 이유는 내부 인터럽트가 모든 쓰레드에 전달 되기 때문이다.

    * net_write_timeout

쓰기 연산을 중단하기 전에 하나의 블록이 기록될 때까지 기다리는 대기 시간. 이 타임 아웃은 TCP/IP 연결에만 적용되며, 유닉스 소켓 파일, 네임드 파이프, 또는 공유 메모리를 통한 연결에는 적용되지 않는다. net_read_timeout도 참조할 것.

    * new

이 변수는 MySQL 4.0에서 사용되었다. 현재는 이전 버전과의 호환성을 위해 남아 있다. 5.0에서는 항상 OFF이다.

    * old_passwords

서버가 MySQL 계정용 패스워드로 4.1 이전 스타일을 사용하는지 검사하는 변수.

    * one_shot

이것은 변수가 아니지만, 몇몇 변수들을 설정할 때 사용된다.

    * open_files_limit

OS가 mysqld에 허용한 오픈 가능 파일 수. 이것은 시스템이 허용하는 실제 값이며, 여러분이 --open-files-limit 옵션을 사용해서 mysqld 또는 mysqld_safe에 준 값과는 다른 것이다. MySQL이 오픈 파일의 숫자를 변경하지 못하는 시스템에서는 이 값이 0 이 된다.

    * optimizer_prune_level

옵티마이저 검색 공간에서 적게 사용될 (less-promising) 부분을 잘라내는 쿼리 최적화를 실행하는 동안 적용되는 휴리스틱스 (heuristics)을 제어함. 그 값이 0 이면 휴리스틱스를 비활성화 시켜서 옵티마이저가 소모적인 검색 (exhaustive search)을 하도록 만든다. 1로 설정하면 옵티마이저는 중간 플랜 (intermediate plan)에 의해 추출된 열의 숫자를 기반으로 검색 플랜을 잘라낸다. 이 변수는 MySQL 5.0.1에 추가 되었다.

    * optimizer_search_depth

쿼리 옵티마이저가 실행하는 검색의 최대 깊이. 쿼리 릴레이션 숫자보다 크게 설정하면 보다 좋은 쿼리 플랜을 만들 수는 있으나, 쿼리의 실행 플랜을 만드는 데에는 보다 많은 시간이 필요하게 된다. 쿼리에 있는 릴레이션 보다 작게 설정을 하면 실행 플랜이 좀더 빨라지기는 하지만, 결과 플랜은 더욱 더 나쁘게 나올 수도 있다. 0으로 설정을 하면, 시스템은 자동으로 적당한 값을 가져오게 된다. 쿼리에서 사용되는 테이블의 최대 크기에 2를 더해서 설정을 하면, 옵티마이저는 5.0.0 (그리고 이전 버전)에서 사용되었던 알고리즘으로 변환된다. 이 변수는 MySQL 5.0.1에 추가 되었다.

    * pid_file

프로세스 ID (PID) 파일의 경로. 이 변수는 --pid-file 옵션으로 설정할 수 있다.

    * port

서버가 TCP/IP 연결용으로 사용하는 포트 번호. 이 변수는 –port 옵션으로 설정할 수 있다.

    * preload_buffer_size

인덱스를 프리 로딩 preloading)할 때 할당되는 버퍼의 크기.

    * protocol_version

MySQL 서버가 사용하는 클라이언트/서버 프로토콜 버전.

    * query_alloc_block_size

명령문을 분석 및 실행하는 동안에 생성되는 오브젝트를 위해 할당되는 메모리 블록 할당 크기. 메모리 분할 (fragmentation)에 문제가 있다면, 이 변수를 약간 늘려 주면 도움이 될 것이다.

    * query_cache_limit

이 변수 값보다 큰 결과는 캐시하지 말도록 지정하는 변수. 디폴트는 1MB이다.

    * query_cache_min_res_unit

쿼리 캐시가 블록에 할당하는 최소 크기 (바이트 단위). 디폴트는 4096 (4KB)이다. 이 변수에 대한 튜닝 정보는 Section 5.14.3, “쿼리 캐시 구성”에 있다.

    * query_cache_size

쿼리 결과를 캐싱하기 위해 할당되는 메모리 크기. 디폴트는 0 이며, 이것은 쿼리 캐시를 비활성화 한다는 것을 의미한다. query_cache_type을 0으로 설정하더라도, query_cache_size의 크기는 할당된다는 것을 알아두기 바란다.

    * query_cache_type

쿼리 캐시 타입을 설정한다. GLOBAL 값을 설정하면 나중에 연결되는 모든 클라이언트가 이 타입을 사용하게 된다. 개별 클라이언트들은 자신만의 쿼리 캐시를 SESSION 값으로 설정할 수 있다. 이 변수가 사용할 수 있는 값은 다음과 같다:

 

Option
   

Description

0 또는 OFF
   

결과를 캐시 하거나 추출하지 말 것. 이것은 쿼리 캐시 버퍼를 할당 해지하지 않는다는 것을 알기 바란다. 할당 해지를 하기 위해서는, query_cache_size를  0으로 한다.

1 or ON
   

SELECT SQL_NO_CACHE로 시작되는 결과만 제외하고 모든 쿼리 결과를 캐시 한다.

2 or DEMAND
   

SELECT SQL_CACHE로 시작되는 쿼리의 결과만을 캐시 한다.

 

이 변수의 디폴트는 ON이다.

    * query_cache_wlock_invalidate

일반적으로, 하나의 클라이언트가 MyISAM 테이블상에서 WRITE 잠금을 획득하면, 쿼리 결과가 쿼리 캐시에 존재할 경우에 다른 클라이언트는 테이블에서 읽은 명령문을 입력하지 못하도록 막을 수가 없게 된다. 이 변수를 1로 설정하면 테이블에 대한 WRITE 잠금 획득이 그 테이블을 참조하는 쿼리 캐시에 있는 모든 쿼리를 유효하지 못한 것으로 만든다. 이로 인해 잠금이 효력을 갖고 있는 동안 테이블 접속을 시도하는 다른 클라이언트는 계속 대기를 하게 된다.

    * query_prealloc_size

명령문 파싱 및 실행을 위해 사용되는 영구 (persistent) 버퍼의 크기. 이 버퍼는 명령문 사이에서는 사용할 수 없다. 여러분이 복잡한 쿼리를 구동 시킨다면, query_prealloc_size 값을 보다 크게 하는 것이 성능 개선을 위해 효과적인 것인데, 그 이유는 서버가 쿼리 실행 연산을 하는 동안 메모리 할당을 할 필요가 없기 때문이다.

    * range_alloc_block_size

범위 최적화를 할 때 할당되는 블록의 크기.

    * read_buffer_size

시퀀셜 스캔을 실행하는 각 쓰레드는 스캔을 하는 각 테이블 별로 이 변수 크기만큼의 버퍼를 할당한다 (바이트 단위). 여러분이 많은 수의 시퀀셜 스캔을 한다면, 이 변수의 값을 늘리고자 할 것이다. 이 변수의 디폴트 값은 131072 이다.

    * read_only

리플리케이션 슬레이브 서버를 위해 이 변수를 ON으로 설정을 하면, 슬레이브가 슬레이브 쓰레드 또는 SUPER 권한을 갖는 사용자로부터 오는 업데이트만을 실행하고 나머지 업데이트는 무시를 하게 된다. 이것은 슬레이브 서버가 자신의 마스터 서버 (클라이언트가 아님)에서 나오는 업데이트만 수용하도록 할 때 유용하게 사용할 수 있다. MySQL 5.0.16 이후에는, 이 변수는 TEMPORARY 테이블에는 적용되지 않는다.

    * relay_log_purge

릴레이 로그 파일이 더 이상 필요하지 않으면 즉시 릴레이 로그 파일을 자동으로 깨끗이 비우는 것 (purging)을 활성화 또는 비활성화 시킴. 디폴트 값은 1 (ON)임.

    * read_rnd_buffer_size

키 정렬 연산을 실행한 후에 정렬된 순서대로 열을 읽을 경우에는 디스크 검색을 피하기 위해 이 버퍼를 사용해서 열을 읽게 된다. 이 변수를 큰 값으로 설정하면 ORDER BY 연산 성능이 현격하게 향상된다. 하지만, 이 변수는 각 클라이언트 별로 할당되는 버퍼이므로, 글로벌 변수에는 큰 값을 할당하지 말아야 한다. 대신에, 대형 쿼리들을 구동해야 하는 클라이언트에서는 세션 변수를 변경하도록 한다.

    * secure_auth

만약에 MySQL 서버가 --secure-auth 옵션을 가지고 구동 되었다면, 구형 포맷 (4.1 이전)패스워드를 갖고 있는 모든 계정의 접속을 막게 된다. 그와 같은 경우, 이 변수의 값은 ON이 되고, 반대의 경우는 OFF가 된다.

 

구형 포맷의 패스워드 사용을 전적으로 막고자 한다면 이 변수의 값을 활성화 시킨다.

 

이 옵션이 활성화 되어 있고 권한 테이블이 4.1 이전 버전으로 되어 있다면 서버는 에러를 발생시키며 구동에 실패를 하게 된다.

    * server_id

서버 ID. 이 값은 --server-id 옵션으로 설정된다. 이 옵션은 마스터와 슬레이브 서버를 활성화 시켜서 자신들을 서로 구분할 수 있도록 하는데 사용된다.

    * shared_memory

(윈도우 시스템에서만 적용됨.) 서버가 공유 메모리 접속을 허용하는지 판단하는 변수.

    * shared_memory_base_name

(윈도우 시스템에서만 적용됨.) 공유 메모리 연결을 위해 사용하는 공유 메모리의 이름. 이 변수는 여러 개의 MySQL 인스턴스를 하나의 머신에서 구동 시킬 때 유용하게 사용된다. 디폴트 이름은 MYSQL이다. 이 이름은 대소 문자를 구분한다.

    * skip_external_locking

mysqld가 외부 잠금 (external locking)을 사용하면 이 변수는 OFF 가 되고, 외부 잠금을 사용하지 않으면, ON이 된다.

    * skip_networking

서버가 로컬 접속 (non-TCP/IP)만을 허용하면, 이 변수는 ON이 된다. 유닉스 시스템의 경우, 로컬 접속은 유닉스 소켓 파일을 사용한다. 윈도우에서는, 네임드 파이프 또는 공유 메모리를 사용한다.

 

NetWare에서는, TCP/IP 접속만을 지원하기 때문에 이 변수를 ON으로 설정하지 못한다. 이 변수는 --skip-networking 옵션을 사용해서 활성화 시킬 수가 있다.

    * skip_show_database

이 변수는 사용자들이 SHOW DATABASES 권한을 가지고 있지 않을 때에는 SHOW DATABASES 명령문을 사용하지 못하도록 만든다. 이것은 사용자들이 다른 사람의 데이터 베이스를 보는 문제에 관련하여 보안성을 증가 시킨다. 이 변수는 SHOW DATABASES 권한에 따라서 다른 영향을 갖게 된다: 변수 값이 ON이면, SHOW DATABASES 명령문은 SHOW DATABASES 권한을 갖고 있는 사용자에게만 허용이 되고, 명령문은 모든 데이터 베이스의 이름을 화면에 출력 한다. 이 값이 OFF이면, SHOW DATABASES는 모든 사용자에게 허용되지만, SHOW DATABASES 또는 다른 권한을 갖고 있는 사용자의 데이터 베이스 이름만 화면에 출력 하게 된다.

    * slave_compressed_protocol

슬레이브와 마스터 모두가 슬레이브/마스터 압축 프로토콜을 지원한다면, 이것을 사용하고 있는지 검사함.

    * slave_load_tmpdir

LOAD DATA INFILE 명령문을 리플리케이션 하기 위한 임시 파일을 슬레이브가 생성하는 디렉토리의 이름

    * slave_net_timeout

데이터 읽기를 중단하기 전에 마스터/슬레이브 접속에서 좀더 많은 데이터를 기다리는 대기 시간. 이 타임 아웃은 TCP/IP 연결에서만 적용되며, 유닉스 소켓 파일, 네임드 파이프, 또는 공유 메모리를 통한 접속은 해당되지 않는다.

    * slave_skip_errors

슬레이브가 무시하는 리플리케이션 에러.

    * slave_transaction_retries

리플리케이션 슬레이브 SQL 쓰레드가 InnoDB 데드락 (deadlock) 또는 InnoDB의 과도한 innodb_lock_wait_timeout 또는 NDBCluster의 TransactionDeadlockDetectionTimeout 또는 TransactionInactiveTimeout 때문에 트랜젝션 실행에 실패를 하게 되면, 에러 때문에 종료를 하기 전에 자동으로 slave_transaction_retries 변수 값이 지정하는 횟수 동안 재 시도를 하게 된다. 4.0.3 이전 버전의 디폴트는 0 이다. 여러분은 반드시 이 변수의 값을 0보다 크게 설정을 해서 “재시도”를 활성화 시키는 것이 좋은 방법이다. 5.0.3 또는 그 후의 버전에서는 디폴트가 10 이다.

    * slow_launch_time

쓰레드를 생성하는 시간이 이 변수의 값보다 길게 걸린다면, 서버는 Slow_launch_threads 상태 변수의 값을 늘리게 된다.

    * socket

유닉스 시스템의 경우, 이 변수는 로컬 클라이언트 연결에 사용되는 소켓 파일의 이름이 된다. 디폴트는 /tmp/mysql.sock이다. (어떤 배포판에서는, 디렉토리가 다를 수도 있는데, RPM의 경우는, /var/lib/mysql과 같다.)

 

윈도우 시스템의 경우에는, 이 변수가 로컬 클라이언트 연결에서 사용되는 네임드 파이프의 이름이 된다. 디폴트 값은 MySQL (대소 문자 구분 없음)가 된다.

    * sort_buffer_size

정렬을 실행하는데 필요한 각 쓰레드는 이 변수 크기의 버퍼를 할당한다. 이 변수 크기를 늘리면, ORDER BY 또는 GROUP BY 연산 속도가 향상 된다.

    * sql_mode

현재의 서버 SQL 모드를 나타내며, 동적으로 설정될 수 있다.  Section 5.2.5, “서버 SQL 모드”를 참조할 것.

    * sql_slave_skip_counter

슬레이브 서버가 무시하는 마스터의 이벤트 숫자. Section 13.6.2.6, “SET GLOBAL SQL_SLAVE_SKIP_COUNTER 신텍스”를 참조.

    * storage_engine

디폴트 스토리지 엔진 (테이블 타입). 스토리지 엔진을 서버 스타트업 때 설정하기 위해서는, --default-storage-engine 옵션을 사용한다.  Section 5.2.1, “mysqld Command Options”를 참조할 것.

    * sync_binlog

이 변수 값이 양수 (positive)이면, MySQL 서버는 sync_binlog 쓰기 연산이 바이너리 로그 기록을 마칠 때마다 자신의 바이너리 로그를 디스크에 동기화 시킨다 (fdatasync()를 사용해서). 자동 실행 (autocommit)이 활성화 되어 있다면 명령문 별로 하나의 바이너리 로그 쓰기 연산이 있고, 그렇지 않으면 트랜젝션 별로 한 개의 쓰기 연산이 있다는 것을 알아 두기 바란다. 디폴트 값은 0 이며, 이것은 디스크에 대한 동기화가 없다는 것을 의미한다. 1로 설정하는 것이 안전한 선택인데, 그 이유는 데이터의 충돌이 있을 때에 여러분은 최대 하나의 명령문 또는 트랜젝션만을 바이너리 로그에서 잃어 버리기 때문이다. 하지만, 이것은 가장 느리게 동작을 하게 된다 (디스크가 배터리-백업 캐시를 가지고 있지 있으면, 동기화는 매우 빨리 진행된다).

 

sync_binlog의 값이 0 (디폴트)이면, 어떠한 플러싱 (flushging)도 일어나지 않는다. 서버는 파일 컨텐츠 플러시를 OS에 의존한다.

    * sync_frm

이 변수를 1로 설정하면, 임시 테이블이 아닌 것이 자신의 .frm 파일을 생성할 때 디스크 동기화가 이루어진다 (fdatasync()를 사용해서). 이런 방식은 비록 속도는 느리지만 충돌이 일어나는 경우에는 보다 안전한 방법이다. 디폴트는 1이다.

    * system_time_zone

서버 시스템 타임 존. 서버가 실행을 시작하면, 서버는 타임 존을 머신의 디폴트에서 내려 받게 되는데, 이것은 서버를 구동하거나 또는 스타트업 스크립트를 위해 사용하는 계정의 환경에 따라서 수정할 수가 있다. 전형적으로 타임 존은 TZ 환경 변수가 지정을 한다. 또한,  mysqld_safe 스크립트의 --timezone 옵션을 가지고도 설정할 수 있다.

 

system_time_zone 변수와 time_zone 변수는 다른 것이다. 비록 두 변수가 동일한 값을 가지고 있다고 하더라도, 나중 변수는 연결되는 각 클라이언트의 타임 존을 초기화하는데 사용하는 것이다.

    * table_cache

모든 쓰레드용으로 오픈하는 테이블의 숫자. 이 값을 증가 시키는 것은 mysqld가 요구하는 파일 디스크립터의 숫자가 늘어난다. Opened_tables 상태 변수를 검사하면 테이블 캐시를 증가 시킬 필요가 있는지를 검사할 수 있다. 만약에 Opened_tables의 값이 크고 FLUSH TABLES을 자주 실행하지 않는다면 (이것은 모든 테이블을 닫은 후에 다시 열게 함), table_cache 변수의 값을 늘려야 한다.

    * table_type

이 변수는 storage_engine과 동의어다. MySQL 5.0에서는, storage_engine 이라는 이름을 주로 사용한다.

    * thread_cache_size

서버가 다시 사용할 목적으로 캐시를 하는 쓰레드의 숫자. 클라이언트의 연결이 끊기게 되면, 캐시 안에 있는 쓰레드의 수가 thread_cache_size 보다 작을 경우에 클라이언트 쓰레드는 캐시 안으로 들어가게 된다. 쓰레드 대한 요청은 캐시에 쓰레드가 있다면 그것을 다시 사용하고, 캐시가 비어 있을 때에만 새로운 쓰레드를 생성한다. 새로운 연결을 많이 할 경우에는 이 변수 값을 늘려 놓는 것이 성능 향상에 좋다. (일반적으로는, 여러분이 제대로 쓰레드 구현을 할 수만 있다면, 이것을 통한 성능 향상은 이루어 지지 않을 것이다.) Connections과 Threads_created 상태 변수 사이의 차이를 조사 함으로써, 여러분은 쓰레드 캐시가 얼마나 효율적으로 사용되고 있는지 알아 볼 수 있다.

    * thread_concurrency

솔라이스 시스템의 경우, mysqld는 이 변수 값을 가지고 thr_setconcurrency()를 호출한다. 이 함수는 어플리케이션을 활성화 시켜서 동시에 구동시켜야 하는 쓰레드의 바람직한 숫자가 몇 개인지를 쓰레드 시스템에 전달한다.

    * thread_stack

각 쓰레드를 위한 스택의 크기. crash-me 테스트를 통해 알 수 있는 대부분의 제약 사항은 이 값과 관련이 된다. 디폴트 값을 사용해도 일반 연산을 실행할 만큼 충분히 크다.

    * time_format

이 변수는 구현되지 않는다.

    * time_zone

현재의 타임 존. 이 변수는 연결되는 각 클라이언트의 타임 존을 초기화 시키는데 사용된다. 디폴트 초기 값는 'SYSTEM' 이다 (이것은, “system_time_zone”의 값을 사용한다는 것을 의미한다). 이 변수 값은 서버 스타트업 시점에 --default-time-zone 옵션을 가지고 확정적으로 지정할 수가 있다.

    * tmp_table_size

메모리 내에 있는 임시 테이블이 이 변수의 크기를 초과하면, MySQL은 자동으로 이 변수의 값을 디스크에 있는 MyISAM 테이블 값으로 변환 시킨다. 만약에 충분한 메모리가 있는 상태에서 많은 수의 GROUP BY 쿼리를 실행한다면, tmp_table_size의 값을 증가 시키도록 한다.

    * tmpdir

임시 파일과 임시 테이블용으로 사용되는 디렉토리. 이 변수는 라운드-로빈 방식에서 사용되는 여러 가지 경로 리스트로 설정할 수 있다. 유닉스에서 경로는 콜론 (‘:’)으로, 그리고 윈도우, NetWare, 그리고 OS/2에서는 세미 콜론(‘;’)을 사용해서 구분한다.

 

다중-디렉토리에는 로드 (load)를 여러 개의 물리적인 디스크 사이에 분산하는데 사용할 수 있는 기능이 있다. 만약에 MySQL 서버가 리플리케이션 슬레이브로 동작한다면, tmpdir가 메모리 기반 파일 시스템에 있는 디렉토리 또는 서버 호스트가 재 구동될 때 없어지는 디렉토리를 가리키도록 설정할 수가 없다. 리플리케이션 슬레이브는 시스템이 재 구동될 때 남아 있는 임시 파일들을 사용해서 임시 테이블 또는 LOAD DATA INFILE 동작을 리플리케이션 한다. 임시 파일 디렉토리에 있는 파일을 서버 재 구동시에 잃게 되면, 리플리케이션은 실패하게 된다. 하지만, 여러분이 4.0.0 또는 그 이후 버전을 사용한다면, slave_load_tmpdir 변수를 사용해서 슬레이브의 임시 디렉토리를 시작할 수가 있다. 이와 같은 경우, 슬레이브는 tmpdir 값을 사용하지 않으며 tmpdir은 임시 장소에 설정된다.

    * transaction_alloc_block_size

메모리를 사용하는 트랜젝션 별 메모리 풀 (pool)의 크기 (바이트 단위). transaction_prealloc_size를 참조할 것.

    * transaction_prealloc_size

다양한 트랜젝션과 관련된 할당은 트랜젝션 별로 메모리 풀에서 메모리를 가져 온다. 풀의 초기 크기는 바이트 단위로 transaction_prealloc_size가 된다. 메모리가 여유가 없기 때문이며 풀에서 메모리를 가져올 수 없는 경우에는, transaction_alloc_block_size를 바이트 단위로 늘리도록 한다. 트랜젝션이 마치게 되면, 풀은 transaction_prealloc_size 바이트만큼 열어든다.

 

transaction_prealloc_size의 크기를 충분히 크게 해서 단일 트랜젝션 안에 있는 모든 명령문을 수용할 수 있게 하면, 많은 수의 malloc() 호출을 피할 수가 있다.

    * tx_isolation

디폴트 트랜젝션 고립 (isolation) 레벨. 디폴트는 REPEATABLE-READ이다.

이 변수는 SET TRANSACTION ISOLATION LEVEL 명령문으로 설정된다. 여러분이 tx_isolation를 스페이스가 있는 고립 레벨 이름으로 직접 설정하는 경우에는, 레벌 이름을 인용 부호 (‘’)로 둘러 쌓야 하며, 스페이스는 대쉬 (-)로 바꾸어야 한다. 예를 들면:

SET tx_isolation = 'READ-COMMITTED';

    * updatable_views_with_limit

update 명령문이 LIMIT 구문을 가지고 있다면, 언더라잉 (underlying) 테이블에서 정의된 프라이머리 키에 대한 모든 컬럼을 뷰 (view)가 가질 수 없을 때 뷰에 대한 업데이트를 생성할 수 있는지를 결정하는 변수. (GUI 툴이 이러한 업데이트를 자주 만듦.) UPDATE 또는 DELETE 명령문이 하나의 업데이트다. 여기에서 의미하는 프라이머리 키는 PRIMARY KEY, 또는 NULL을 가지고 있지 않는 컬럼에 있는 UNIQUE 인덱스를 가리키는 것이다.

 

이 변수는 두 가지의 값을 가질 수 있다:

          o 1 또는 YES: 경고문만을 만들어 낸다 (에러 메시지가 아님). 이것이 디폴트 값이다.
          o 0 또는 NO: 업데이트를 금지 한다.

이 변수는 MySQL 5.0.2에 추가 되었다.

    * version

서버 버전 번호.

    * version_bdb

BDB 스토리지 엔진 버전.

    * version_comment

configure 스크립트는 MySQL을 구축할 때 지정할 수 있도록 하는 --with-comment 옵션을 가지고 있다. 이 변수는 그 코멘트 값을 가지고 있다.

    * version_compile_machine

MySQL이 설치된 머신 또는 아키텍처의 타입.

    * version_compile_os

MySQL이 설치되어 있는 OS 타입.

    * wait_timeout

논-인터렉티브 연결 (non-interactive connection)에서 서버가 종료를 하기 전에 액티비티(activity)를 기다리는 서버 대기 시간 (초 단위). 이 타임 아웃은 TCP/IP 연결에만 적용되며, 유닉스 소켓 파일, 네임드 파이프, 또는 공유 메모리를 통한 연결에는 적용되지 않는다.

 

쓰레드 스타트업의 경우, 세션 wait_timeout 값은 클라이언트 타입에 따라서 글로벌 wait_timeout 값 또는 글로벌 interactive_timeout 값으로부터 초기화가 된다 (mysql_real_connect()에 대한 CLIENT_INTERACTIVE 연결 옵션에서 정의한 것과 같이). interactive_timeout을 함께 참조할 것.

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > MySQL' 카테고리의 다른 글

utf8 my.cnf  (0) 2012.08.10
mysql 캐릭터셋  (0) 2012.08.10
mysql 백업/복구  (0) 2012.08.10
mysql procedure function  (0) 2012.08.10
mysql innodb  (0) 2012.08.10