본문 바로가기
Database/MySQL

[MySQL] InnoDB Adaptive 시스템 변수

by db.sry.22 2025. 3. 27.

목차


    1. innodb_adaptive_flushing

    Command-Line Format --innodb-adaptive-flushing[={OFF|ON}]
    System Variable innodb_adaptive_flushing
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies  No
    Type Boolean
    Default Value ON

     

    innodb_adaptive_flushing 시스템 변수는 InnoDB 버퍼 풀에서 더티 페이지를 플러시하는 속도를 동적으로 조정할지 여부를 설정합니다. 플러시 속도를 동적으로 조정하여 I/O 부하에 맞춰 플러시 속도를 변경하여 스파이크를 방지합니다.

    이 설정은 기본적으로 활성화되어 있습니다.

    OFF로 설정할 경우 더티페이지가 고정된 속도로 플러시되어 작업이 급증할 때 I/O 부하에 대응하지 못할 수 있습니다.

     

     


    2. innodb_adaptive_flushing_lwm

    Command-Line Format --innodb-adaptive-flushing-lwm=#
    System Variable innodb_adaptive_flushing_lwm
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies  No
    Type Integer
    Default Value 10
    Minimum Value 0
    Maximum Value 70

     

    innodb_adaptive_flushing_lwm은 적응형 플러싱(adaptive flushing) 이 활성화되는 Redo 로그 사용량의 하한선(%) 을 설정하는 변수입니다.

    일반적으로 기본값은 10(%)이며, 이는 Redo 로그가 10% 이상 차오르면 적응형 플러싱이 시작되는것을 의미합니다.

    innodb_adaptive_flushing_lwm 설정값을 초과하면 InnoDB는 적응형 플러싱을 활성화하여 더티 페이지를 디스크로 플러시하는 속도를 조절합니다.

    이 값이 낮다면 InnoDB는 Redo로그가 가득 차기 전에 미리 플러싱을 시작하므로 갑작스러운 I/O부하를 방지할 수 있습니다.

    그러나 그만큼 적응형 플러싱이 자주 발생하므로, 디스크 I/O 작업 횟수가 늘어나 시스템 성능 저하를 발생시킬 수 있습니다.

    따라서 워크로드의 특성에 따라 적절한 값을 설정해야 합니다.

     

     


    3. innodb_adaptive_hash_index

    Command-Line Format --innodb-adaptive-hash-index[={OFF|ON}]
    System Variable innodb_adaptive_hash_index
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies  No
    Type Boolean
    Default Value ON (8.0) | OFF(8.4)

     

    innodb_adaptive_hash_index 시스템 변수는 InnoDB 적응형 해시 인덱스가 활성화되었는지 비활성화되었는지를 나타내는 변수입니다.

    워크로드에 따라 쿼리 성능을 개선하기 위해 적응형 해시 인덱스를 동적으로 활성화하거나 비활성화하는 것이 바람직할 수 있습니다.

    적응형 해시 인덱스는 모든 워크로드에서 유용하지 않을 수 있으므로, 실제 워크로드를 사용하여 활성화와 비활성화 상태에서 벤치마크를 수행하는 것이 좋습니다. 

    이 변수는 기본적으로 8.0 버전에서는 활성화 되어있으며, 8.4 버전에는 비활성화되어 있습니다.

    서버를 재시작하지 않고도 SET GLOBAL 명령어를 사용하여 이 매개변수를 수정할 수 있습니다.

    적응형 해시 인덱스를 비활성화하면 해시 테이블이 즉시 비워집니다.

    해시 테이블이 비워지는 동안에도 정상적인 작업은 계속될 수 있으며, 해시 테이블을 사용하던 쿼리는 인덱스 B-트리를 직접 접근합니다.

    적응형 해시 인덱스를 다시 활성화하면 정상적인 작업 중에 해시 테이블이 다시 채워집니다.

     

    적응형 해시 인덱스 Adaptive Hash Index

    적응형 해시 인덱스는 InnoDB 내부에서 자동으로 생성되며, 사용자가 테이블에 DDL로 생성하는 해시 인덱스와는 다른 개념입니다.
    적응형 해시 인덱스는 InnoDB가 자주 사용하는 인덱스 페이지를 메모리에 자동으로 캐시하여 쿼리 성능을 향상시킵니다.
    이 인덱스는 InnoDB의 자체적인 내부 최적화 기능입니다.
    8.0버전에서는 innodb_adaptive_hash_index의 기본값이 ON이라 할성화되어있었으나 8.4에서는 기본값이 OFF로 변경되었습니다.

     

     

     


    4. innodb_adaptive_hash_index_parts

    Command-Line Format --innodb-adaptive-hash-index-parts=#
    System Variable innodb_adaptive_hash_index_parts
    Scope Global
    Dynamic No
    SET_VAR Hint Applies  No
    Type Numeric
    Default Value 8
    Minimum Value 1
    Maximum Value 512

     

    innodb_adaptive_hash_index_parts 시스템 변수는 InnoDB의 적응형 해시 인덱스 검색 시스템을 파티션화하는 개수를 제어하는 변수입니다. 

    이 변수는 적응형 해시 인덱스 검색을 8개의(기본값) 파티션으로 나누거나, 최대 512개의 파티션으로 나눠서 처리할 수 있도록 설정할 수 있습니다.

    각각의 적응형 해시 인덱스는 특정 파티션에 연결되며, 각 파티션은 별도의 래치를 사용하여 보호됩니다.

     

     

     


    5. innodb_adaptive_max_sleep_delay

    Command-Line Format --innodb-adaptive-max-sleep-delay=#
    System Variable innodb_adaptive_max_sleep_delay
    Scope Global
    Dynamic Yes
    SET_VAR Hint Applies  No
    Type Integer
    Default Value 150000
    Minimum Value 0
    Maximum Value 1000000
    Unit microseconds

     

    innodb_adaptive_max_sleep_delay 시스템 변수는 InnoDB가 현재 워크로드에 따라 innodb_thread_sleep_delay 값을 자동으로 조정할 수 있도록 허용합니다. 
    0이 아닌 값으로 설정하면 innodb_thread_sleep_delay 값이 자동으로 조정되며, 최대값은 innodb_adaptive_max_sleep_delay 옵션에 의해 결정됩니다. 단위는 마이크로 세컨드(μs)입니다 .
    설정값은 InnoDB가 백그라운드 스레드의 지연 시간을 자동으로 조정할 때 허용되는 최대 대기 시간(마이크로초 단위)이 됩니다.
    이 옵션은 16개 이상의 InnoDB 스레드가 실행되는 바쁜 시스템에서 유용할 수 있으며, 특히 수백 또는 수천 개의 동시 연결을 처리하는 MySQL 시스템에서 가장 큰 효과를 발휘합니다.