[MySQL][InnoDB] 버퍼풀 설정

■ Innodb Buffer Pool 크기 설정

서버가 실행되는 동안 InnoDB 버퍼 풀 크기를 오프라인(시작시) 또는 온라인으로 구성 할 수 있습니다. 이 곳에 설명 된 동작은 두 방법 모두에 적용됩니다.

 

innodb_buffer_pool_size를 늘리거나 줄이면 작업이 청크로 수행됩니다. 청크 크기는 innodb_buffer_pool_chunk_size 구성 옵션에 의해 정의되며 기본값은 128M입니다.

 

버퍼 풀 크기는 항상 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances의 배수와 같아야합니다. innodb_buffer_pool_size를 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances와 같지 않은 값으로 구성하면 버퍼 풀 크기는 자동으로 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances의 배수와 같거나 여러 값으로 조정됩니다.

 

다음 예에서 innodb_buffer_pool_size는 8G로 설정되고 innodb_buffer_pool_instances는 16으로 설정됩니다. innodb_buffer_pool_chunk_size는 128M (기본값)입니다.

8G는 innodb_buffer_pool_instances = 16 * innodb_buffer_pool_chunk_size = 128M (2G)의 배수이므로 8G는 유효한 innodb_buffer_pool_size 값입니다.

shell> mysqld --innodb-buffer-pool-size=8G --innodb-buffer-pool-instances=16
mysql> SELECT @@innodb_buffer_pool_size/1024/1024/1024;
+------------------------------------------+
| @@innodb_buffer_pool_size/1024/1024/1024 |
+------------------------------------------+
|                           8.000000000000 |
+------------------------------------------+

 

이 예에서 innodb_buffer_pool_size는 9G로 설정되고 innodb_buffer_pool_instances는 16으로 설정됩니다. innodb_buffer_pool_chunk_size는 128M (기본값)입니다. 이 경우 9G는 innodb_buffer_pool_instances = 16 * innodb_buffer_pool_chunk_size = 128M의 배수가 아니므로 innodb_buffer_pool_size는 10G로 조정되며 이는 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances의 배수입니다.

shell> mysqld --innodb-buffer-pool-size=9G --innodb-buffer-pool-instances=16
mysql> SELECT @@innodb_buffer_pool_size/1024/1024/1024;
+------------------------------------------+
| @@innodb_buffer_pool_size/1024/1024/1024 |
+------------------------------------------+
|                          10.000000000000 |
+------------------------------------------+

 

 

 

▶ InnoDB 버퍼풀 청크 크기 조절

innodb_buffer_pool_chunk_size는 1MB (1048576 바이트) 단위로 증가 또는 감소 할 수 있지만 시작시, 명령 행 문자열 또는 MySQL 구성 파일에서만 수정할 수 있습니다.

Command line:
shell> mysqld --innodb-buffer-pool-chunk-size=134217728

Configuration file:
[mysqld]
innodb_buffer_pool_chunk_size=134217728

 

innodb_buffer_pool_chunk_size를 변경할 때 다음 조건이 적용됩니다.

+ 버퍼 풀이 초기화 될 때 새 innodb_buffer_pool_chunk_size 값 * innodb_buffer_pool_instances가 현재 버퍼 풀 크기보다 큰 경우 innodb_buffer_pool_chunk_size는 innodb_buffer_pool_size / innodb_buffer_pool_instances로 강제 적용됩니다.

예를 들어, 버퍼 풀 크기가 2GB (2147483648 바이트), 4 개의 버퍼 풀 인스턴스 및 1GB (1073741824 바이트)의 청크 크기로 초기화 된 경우 청크 크기는 아래와 같이 innodb_buffer_pool_size / innodb_buffer_pool_instances와 같은 값으로 잘립니다.

shell> mysqld --innodb-buffer-pool-size=2147483648 --innodb-buffer-pool-instances=4 --innodb-buffer-pool-chunk-size=1073741824;
mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                2147483648 |
+---------------------------+

mysql> SELECT @@innodb_buffer_pool_instances;
+--------------------------------+
| @@innodb_buffer_pool_instances |
+--------------------------------+
|                              4 |
+--------------------------------+

 

# 시작시 청크 크기가 1GB (1073741824 바이트)로 설정되었지만 innodb_buffer_pool_size / innodb_buffer_pool_instances로 강제적용되었습니다.

mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
|                       536870912 |
+---------------------------------+

 

+ 버퍼 풀 크기는 항상 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances의 배수와 같아야합니다. innodb_buffer_pool_chunk_size를 변경하면 innodb_buffer_pool_size는 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances와 같거나 여러 값으로 자동 조정됩니다. 버퍼 풀이 초기화 될 때 조정이 발생합니다. 이 동작의 예는 아래와 같습니다.

 

# 버퍼풀 기본 사이즈는 128메가바이트 입니다. (134217728 bytes)

mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                 134217728 |
+---------------------------+

 

# 청크 사이즈 또한 128메가바이트 입니다. (134217728 bytes)

mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
|                       134217728 |
+---------------------------------+

 

# 여기에 싱글 버퍼풀 인스턴스가 있습니다.

mysql> SELECT @@innodb_buffer_pool_instances;
+--------------------------------+
| @@innodb_buffer_pool_instances |
+--------------------------------+
|                              1 |
+--------------------------------+

 

# 시작시 청크 사이즈는 기존 크기에서 1메가바이트(1048576 bytes)가 감소됩니다.

# (134217728 - 1048576 = 133169152):

shell> mysqld --innodb-buffer-pool-chunk-size=133169152
mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
|                       133169152 |
+---------------------------------+

 

# 버퍼 풀 크기가 134217728에서 266338304로 증가됩 니다.

# 버퍼 풀 크기는 innodb_buffer_pool_chunk_size * 또는 innodb_buffer_pool_instances의 배수와 같은 값으로 자동 조정됩니다.

mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                 266338304 |
+---------------------------+

 

이 예제는 동일한 동작을 나타내지만 여러 버퍼 풀 인스턴스가있는 경우를 보여줍니다.

# 2기가 크기의 기본 버퍼풀이 있습니다.(2147483648 bytes)

mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                2147483648 |
+---------------------------+

 

# 청크 크기는 500메가바이트(536870912 bytes)입니다.

mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
|                       536870912 |
+---------------------------------+

 

# 여기에는 4개의 버퍼풀 인스턴스가 있습니다.

mysql> SELECT @@innodb_buffer_pool_instances;
+--------------------------------+
| @@innodb_buffer_pool_instances |
+--------------------------------+
|                              4 |
+--------------------------------+

 

# 시작될 때 청크 크기가 1메가바이트(1048576 bytes)로 감소되었습니다.

# (536870912 - 1048576 = 535822336):

shell> mysqld --innodb-buffer-pool-chunk-size=535822336
mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
|                       535822336 |
+---------------------------------+

 

# 버퍼풀 크기는 2147483648 에서 4286578688로 증가되었습니다.

# 버퍼 풀 크기는 innodb_buffer_pool_chunk_size * 또는 innodb_buffer_pool_instances의 배수와 같은 값으로 자동 조정됩니다.

mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                4286578688 |
+---------------------------+

 

innodb_buffer_pool_chunk_size를 변경할 때는 위의 예와 같이 이 값을 변경하면 버퍼 풀의 크기가 증가 할 수 있으므로 주의해야 합니다. innodb_buffer_pool_chunk_size를 변경하기 전에 변경된 버퍼 풀 크기가 허용 가능한지 반드시 계산해서 영향을 최소화해야 합니다.

 

참고사항

잠재적 인 성능 문제를 피하려면 청크 수 (innodb_buffer_pool_size / innodb_buffer_pool_chunk_size)는 1000을 초과하지 않아야합니다.

 

▶ InnoDB 버퍼풀 크기 온라인 설정

SET 문을 사용하여 innodb_buffer_pool_size 구성 옵션을 동적으로 설정하여 서버를 다시 시작하지 않고도 버퍼 풀의 크기를 조정할 수 있습니다. 예를 들면 다음과 같습니다.

mysql> SET GLOBAL innodb_buffer_pool_size=402653184;

 

버퍼 풀 크기를 조정하기 전에 InnoDB API를 통해 수행되는 활성 트랜잭션 및 작업을 완료해야합니다. 크기 조정 작업을 시작할 때 모든 활성 트랜잭션이 완료 될 때까지 작업이 시작되지 않습니다. 크기 조정 작업이 진행 중이면 버퍼 풀에 액세스해야하는 새 트랜잭션 및 작업은 크기 조정 작업이 완료 될 때까지 기다려야합니다. 규칙에 대한 예외는 버퍼 풀이 조각 모음되고 버퍼 풀 크기가 줄어들면 페이지가 철회되는 동안 버퍼 풀에 대한 동시 액세스가 허용된다는 것입니다. 동시 액세스를 허용하는 단점은 페이지를 철회하는 동안 사용 가능한 페이지가 일시적으로 부족할 수 있다는 것입니다.

 

참고

버퍼 풀 크기 조정 조작이 시작된 후 시작되면 중첩된 트랜잭션이 실패 할 수 있습니다.

 

## 온라인 버퍼풀 크기변경 진행 모니터링

Innodb_buffer_pool_resize_status는 버퍼 풀 크기 조정 진행 상황을보고합니다. 예를 들면 다음과 같습니다.

mysql> SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';
+----------------------------------+----------------------------------+
| Variable_name                    | Value                            |
+----------------------------------+----------------------------------+
| Innodb_buffer_pool_resize_status | Resizing also other hash tables. |
+----------------------------------+----------------------------------+

 

버퍼 풀 크기 조정 진행률도 서버 오류 로그에 기록됩니다. 이 예는 버퍼 풀의 크기를 늘릴 때 기록되는 메모를 보여줍니다.

[Note] InnoDB: Resizing buffer pool from 134217728 to 4294967296. (unit=134217728)
[Note] InnoDB: disabled adaptive hash index.
[Note] InnoDB: buffer pool 0 : 31 chunks (253952 blocks) was added.
[Note] InnoDB: buffer pool 0 : hash tables were resized.
[Note] InnoDB: Resized hash tables at lock_sys, adaptive hash index, dictionary.
[Note] InnoDB: completed to resize buffer pool from 134217728 to 4294967296.
[Note] InnoDB: re-enabled adaptive hash index.

 

이 예는 버퍼 풀의 크기를 줄일 때 기록되는 메모를 보여줍니다.

[Note] InnoDB: Resizing buffer pool from 4294967296 to 134217728. (unit=134217728)
[Note] InnoDB: disabled adaptive hash index.
[Note] InnoDB: buffer pool 0 : start to withdraw the last 253952 blocks.
[Note] InnoDB: buffer pool 0 : withdrew 253952 blocks from free list. tried to relocate 0 pages.
(253952/253952)
[Note] InnoDB: buffer pool 0 : withdrawn target 253952 blocks.
[Note] InnoDB: buffer pool 0 : 31 chunks (253952 blocks) was freed.
[Note] InnoDB: buffer pool 0 : hash tables were resized.
[Note] InnoDB: Resized hash tables at lock_sys, adaptive hash index, dictionary.
[Note] InnoDB: completed to resize buffer pool from 4294967296 to 134217728.
[Note] InnoDB: re-enabled adaptive hash index.

 

온라인 버퍼풀 크기조정-내부 동작

크기 조정 작업은 백그라운드 스레드에 의해 수행됩니다. 버퍼 풀의 크기를 늘릴때 생기는 일련의 내부 운영과정을 설명하면 다음과 같습니다.

+ 청크로 페이지를 추가합니다 (청크 크기는 innodb_buffer_pool_chunk_size에 의해 정의 됨).

+ 메모리에서 새 주소를 사용하기위한 해시 테이블, 목록 및 포인터

+ 프리 리스트(free list)에 새 페이지를 추가합니다

 

이러한 작업이 진행되는 동안 다른 스레드가 버퍼 풀에 액세스하지 못하도록 차단됩니다.

버퍼 풀의 크기를 줄이면 크기 조정 조작은 다음과 같습니다.

+ 버퍼 풀 조각 모음 및 페이지 해제 (사용 가능)

+ 청크로 페이지를 제거합니다 (청크 크기는 innodb_buffer_pool_chunk_size에 의해 정의 됨).

+ 메모리에서 새 주소를 사용하도록 해시 테이블, 목록 및 포인터를 변환합니다.

 

이러한 작업 중 버퍼 풀 조각 모음 및 페이지 철회만으로 다른 스레드가 버퍼 풀에 동시에 액세스 할 수 있습니다.

 

멀티 버퍼풀 인스턴스 설정

멀티 기가 바이트 범위의 버퍼 풀이있는 시스템의 경우 버퍼 풀을 개별 인스턴스로 나누면 다른 스레드가 캐시 된 페이지를 읽고 쓸 때 경합을 줄임으로써 동시성을 향상시킬 수 있습니다. 이 기능은 일반적으로 멀티 기가 바이트 범위의 버퍼 풀 크기를 가진 시스템에 사용됩니다. 여러 버퍼 풀 인스턴스는 innodb_buffer_pool_instances 구성 옵션을 사용하여 구성되며 innodb_buffer_pool_size 값을 조정할 수도 있습니다.

 

InnoDB 버퍼 풀이 크면 메모리에서 검색하여 많은 데이터 요청을 충족시킬 수 있습니다. 보통 버퍼 풀에 한 번에 액세스하려는 여러 스레드에서 병목 현상이 발생할 수 있습니다. 이 경합을 최소화하기 위해 다중 버퍼 풀을 사용할 수 있습니다. 버퍼 풀에 저장되거나 버퍼 풀에서 읽은 각 페이지는 해싱 함수를 사용하여 버퍼 풀중 하나에 임의로 할당됩니다. 각 버퍼 풀은 자체 여유 목록, 플러시 목록, LRU 및 버퍼 풀에 연결된 기타 모든 데이터 구조를 관리하며 자체 버퍼 풀 뮤텍스에 의해 보호됩니다.

 

다중 버퍼 풀 인스턴스를 사용 가능하게하려면 innodb_buffer_pool_instances 구성 옵션을 1보다 큰 값 (기본값)에서 최대 64 (최대)로 설정합니다. 이 옵션은 innodb_buffer_pool_size를 1GB 이상의 크기로 설정 한 경우에만 적용됩니다. 지정한 총 크기는 모든 버퍼 풀로 나뉩니다. 최상의 효율성을 위해 각 버퍼 풀 인스턴스가 1GB 이상이되도록 innodb_buffer_pool_instances 및 innodb_buffer_pool_size의 조합을 지정하세요. 그렇다고 무조건 버퍼풀 인스턴스를 높이는 것은 위험합니다. 시스템이 인스턴스 크기만큼 받쳐주지 못하면 오히려 성능이 저하됩니다. 꼭 계산을 해보고 알맞은 값을 설정해야 합니다.

 

버퍼 풀 스캔 방지

InnoDB는 엄격한 LRU 알고리즘을 사용하여 많이 액세스되고 사용되는 페이지를 버퍼 풀로 가져 오고, 버퍼풀에 가져온 데이터라도 액세스하지 않는 데이터는 버퍼풀에서 제거하는 방식의  기술을 사용합니다. 미리 읽기 및 전체 테이블 스캔으로 인해 나중에 액세스하거나 액세스하지 않을 수있는 새 블록을 가져 오더라도 자주 액세스하는 ( "핫") 페이지가 버퍼 풀에 남아있게하는 것이 목표입니다.

 

새로 읽은 블록이 LRU 목록의 중간에 삽입됩니다. 새로 읽은 모든 페이지는 기본적으로 LRU 목록의 꼬리에서 3/8 위치에 삽입됩니다. 버퍼 풀에서 처음 액세스 할 때 페이지가 목록의 맨 앞 (가장 최근에 사용 된 페이지의 끝)으로 이동합니다. 따라서 액세스 할 수없는 페이지는 LRU 목록의 앞 부분으로 절대 페이지를 만들지 않으며 엄격한 LRU 접근 방식보다 빨리 "에이징 아웃"합니다. 이러한 배열은 LRU리스트를 2 개의 세그먼트로 분할하는데, 여기서 삽입 점의 다운 스트림 페이지는 "오래된"것으로 간주되고 LRU 제거의 알고리즘에 의해 희생자(victim)으로 지정되어 버퍼풀에서 제거됩니다.

 

LRU 목록에서 삽입 점을 제어하고 InnoDB가 테이블 또는 인덱스 스캔을 통해 버퍼 풀로 가져온 블록에 동일한 최적화를 적용할지 여부를 선택할 수 있습니다. innodb_old_blocks_pct 구성 매개 변수는 LRU 목록에서 "이전"블록의 백분율을 제어합니다. innodb_old_blocks_pct의 기본값은 37이며 원래 고정 비율 3/8에 해당합니다. 값 범위는 5(버퍼 풀의 새 페이지가 매우 빨리 만료 됨)에서 95까지입니다 (버퍼 풀의 5 % 만 핫 페이지 용으로 예약되어 알고리즘을 익숙한 LRU 전략에 가깝게 만듭니다).

 

버퍼 풀이 미리 읽기에 의해 이탈되지 않도록하는 최적화는 테이블 또는 인덱스 스캔으로 인한 유사한 문제점을 피할 수 있습니다. 이러한 스캔에서 데이터 페이지는 일반적으로 몇 번 빠르게 연속해서 액세스되며 다시는 손대지 않습니다. 구성 매개 변수 innodb_old_blocks_time은 LRU 목록의 맨 앞 (가장 최근에 사용 된 끝)으로 이동하지 않고 액세스 할 수있는 페이지에 처음 액세스 한 후 타임윈도우(밀리 초)를 지정합니다. innodb_old_blocks_time의 기본값은 1000입니다.이 값을 늘리면 점점 더 많은 블록이 버퍼 풀에서 더 빨리 만료 될 수 있습니다.

 

innodb_old_blocks_pct 및 innodb_old_blocks_time은 모두 MySQL 옵션 파일 (my.cnf 또는 my.ini)에서 지정하거나 런타임시 SET GLOBAL 문으로 변경할 수 있습니다. 런타임시 값을 변경하면 글로벌 시스템 변수를 설정하기에 충분한 권한이 필요합니다.

 

SHOW ENGINE INNODB STATUS 명령은 이러한 매개 변수 설정의 영향을 측정하기 위해 버퍼 풀 통계를보고합니다. 자세한 내용은 InnoDB 표준 모니터를 사용하여 버퍼 풀 모니터링을 참조하십시오.

 

이러한 매개 변수의 영향은 하드웨어 구성, 데이터 및 워크로드 세부 사항에 따라 크게 다를 수 있으므로 성능이 중요한 환경 또는 프로덕션 환경에서 이러한 설정을 변경하기 전에 항상 유효성을 검증하기 위해 벤치 마크해야 합니다.

 

대부분의 활동이 정기적 인 일괄보고 쿼리를 사용하여 OLTP 유형 인 혼합 워크로드에서 대량 스캔이 발생하는 경우, 배치 실행 중 innodb_old_blocks_time 값을 설정하면 버퍼 풀에서 정상 워크로드의 작업 세트를 유지할 수 있습니다.

 

버퍼 풀에 완전히 들어갈 수 없는 대형 테이블을 스캔 할 때 innodb_old_blocks_pct를 작은 값으로 설정하면 한 번만 읽은 데이터가 버퍼 풀의 상당 부분을 사용하지 않습니다. 예를 들어, innodb_old_blocks_pct=5를 설정하면 한 번만 읽은이 데이터가 버퍼 풀의 5 %로 제한됩니다.

 

메모리에 맞는 작은 테이블을 스캔할 때 버퍼 풀 내에서 페이지를 이동하는 오버 헤드가 적으므로 innodb_old_blocks_pct를 기본값으로 유지하거나 innodb_old_blocks_pct = 50과 같이 더 높게 유지할 수 있습니다.

 

innodb_old_blocks_time 매개 변수의 효과는 innodb_old_blocks_pct 매개 변수보다 예측하기 어렵고 상대적으로 작으며 워크로드에 따라 더 다양합니다. 최적의 값에 도달하려면 innodb_old_blocks_pct 조정으로 인한 성능 향상이 충분하지 않은 경우 자체 벤치 마크를 수행해야 합니다.

 

 

 

■ InnoDB 버퍼 풀 프리 페치 구성 (미리 읽기)

미리 읽기 요청은 이러한 페이지가 곧 필요할 것으로 예상하여 버퍼 풀에서 여러 페이지를 비동기식으로 프리 페치하기위한 I/O 요청입니다. 페이지 요청은 하나의 익스텐트(extent)에서 모든 페이지(64page)를 가져옵니다. InnoDB는 두 가지 미리 읽기 알고리즘을 사용하여 I/O 성능을 향상시킵니다.

익스텐트(extent) : InnoDB page는 기본적으로 16KB 사이즈를 가진다. 그리고, 64 page씩으로 해서 1Mbyte가 그룹으로 묶이는데 이것을 extent라고 합니다. 이 64Page(1 익스텐트)는 데이터베이스의 입출력 단위가 됩니다. 그리고 이 익스텐트가 모여 세그먼트라고 합니다. 파일 저장의 단위가 됩니다.

 

Linear Read-Ahead는 순차적으로 액세스되는 버퍼 풀의 페이지를 기반으로 곧 필요한 페이지를 예측하는 기술입니다. 구성 매개 변수 innodb_read_ahead_threshold를 사용하여 비동기 읽기 요청을 트리거하는 데 필요한 순차적 페이지 액세스수를 조정하여 InnoDB가 미리 읽기 작업을 수행하는시기를 제어합니다. 이 매개 변수가 추가되기 전에 InnoDB는 현재 범위의 마지막 페이지를 읽을 때 전체 다음 범위에 대해 비동기 프리 페치 요청을 발행할지 여부만 계산합니다.

 

innodb_read_ahead_threshold 구성 매개 변수는 InnoDB가 순차 페이지 액세스 패턴을 감지하는 데 얼마나 민감한 지 제어합니다. 익스텐트에서 순차적으로 읽은 페이지 수가 innodb_read_ahead_threshold보다 크거나 같은 경우 InnoDB는 전체 다음 익스텐트의 비동기식 미리 읽기 작업을 시작합니다. innodb_read_ahead_threshold는 0-64 사이의 값으로 설정할 수 있습니다. 기본값은 56입니다. 값이 클수록 액세스 패턴 검사가 더 엄격 해집니다. 예를 들어 값을 48로 설정하면 현재 범위의 48 페이지가 순차적으로 액세스 된 경우에만 InnoDB가 선형 미리 읽기 요청을 트리거합니다. 값이 8 인 경우 InnoDB는 범위 내에서 8 페이지 정도만 순차적으로 액세스하더라도 비동기 미리 읽기를 트리거합니다. MySQL 구성 파일에서 이 매개 변수의 값을 설정하거나 글로벌 시스템 변수를 설정하기에 충분한 특권이 필요한 SET GLOBAL 문으로 동적으로 변경할 수 있습니다.

 

임의 미리 읽기는 페이지를 읽은 순서에 관계없이 버퍼 풀에 이미있는 페이지를 기반으로 페이지가 곧 필요할 수있는 시점을 예측하는 기술입니다. 동일한 범위에서 13 개의 연속 페이지가 버퍼 풀에서 발견되면 InnoDB는 나머지 범위의 페이지를 프리 페치하기 위해 비동기 적으로 요청을 발행합니다. 이 기능을 사용하려면 구성 변수 innodb_random_read_ahead를 ON으로 설정합니다.

 

SHOW ENGINE INNODB STATUS 명령은 미리 읽기 알고리즘의 효과를 평가하는 데 도움이되는 통계를 표시합니다. 통계에는 다음과 같은 전역 상태 변수에 대한 카운터 정보가 포함됩니다.

+ Innodb_buffer_pool_read_ahead
+ Innodb_buffer_pool_read_ahead_evicted
+ Innodb_buffer_pool_read_ahead_rnd

이 정보는 innodb_random_read_ahead 설정을 미세 조정할 때 유용 할 수 있습니다.

 

 

도움이 되셨다면 광고클릭 한번 부탁드립니다.※

Designed by JB FACTORY