복붙노트

[SQL] 방법 / 플러시 MySQL의 InnoDB의 버퍼 풀을 지우려면?

SQL

방법 / 플러시 MySQL의 InnoDB의 버퍼 풀을 지우려면?

나는 반환 한 튜닝 큰 쿼리 해요, 그리고 비교를 위해, 전후에 같은 기준에서 실행하고자합니다.

2 개 쿼리가 어쨌든 캐시되지 않을 것이기 때문에 나는 MySQL의 쿼리 캐시에 대해 알고 있지만, 나에게 그와 관련이없는.

캐시되는 내용, 버퍼 풀에서 InnoDB의 페이지입니다. 나도 같은 출발점에서 두 개의 쿼리를 비교할 수 있도록 전체 버퍼 풀을 취소 할 수있는 방법이 있습니까?

가능하면 각 쿼리를 실행 한 후 MySQL 서버를 다시 시작하면 의심의 여지 작품은 이드이 피해야 할 것 같은 동안

해결법

  1. ==============================

    1.경고 : 다음은 MySQL을 5.5와 MySQL 작동 5.1.41+ (이노 플러그인)

    경고 : 다음은 MySQL을 5.5와 MySQL 작동 5.1.41+ (이노 플러그인)

    이러한 설정으로 InnoDB의 버퍼 풀의 항목 기간을 형식에 설정을 몇 :

    SET GLOBAL innodb_old_blocks_time=250; // This is 0.25 seconds
    SET GLOBAL innodb_old_blocks_pct=5;
    SET GLOBAL innodb_max_dirty_pages_pct=0;
    

    때 기본값으로 다시 설정, 테스트를 수행하고 있습니다 :

    SET GLOBAL innodb_old_blocks_time=0;
    SET GLOBAL innodb_old_blocks_pct=37;
    SET GLOBAL innodb_max_dirty_pages_pct=90; // 75 for MySQL 5.5/MySQL 5.1 InnoDB Plugin
    

    이러한 설정의 정의를 확인하세요

  2. ==============================

    2.훨씬 더 간단 ...이 두 번 실행

    훨씬 더 간단 ...이 두 번 실행

    SELECT SQL_NO_CACHE ...;
    

    그리고 두 번째 타이밍 봐.

    BUFFER_POOL까지 첫 번째 따뜻하게; 두 번째는 SQL_NO_CACHE를 구비하여 QC를 피한다. (MySQL은 8.0에서 SQL_NO_CACHE 오프 휴가, 그것은 사라 졌어요.)

    그래서 두 번째시기는 따뜻한 캐시와 생산 시스템에 걸리는 시간의 좋은 표시입니다.

    핸들러 카운트에서 또한, 봐

    FLUSH STATUS;
    SELECT ...;
    SHOW SESSION STATUS LIKE 'Handlers%';
    

    감동되는 행의 비교적 명확한 그림을 제공합니다. 즉, 차례로, 당신에게 쿼리가 걸리는 많은 노력에 대한 좋은 느낌을 준다. 이 작은 데이터 세트에 매우 성공적으로 (빠르게)를 실행 할 수 있습니다. 그럼 당신은 (자주) 큰 데이터 세트를 추정 할 수 있습니다.

    A "Handler_read은"인덱스 행 또는 데이터 행을 읽을 수 있습니다. 그것은 '다음'행 (따라서 아마 이전 행에 대해 읽은 블록에 캐시)을 수 있습니다, 또는 임의 (다른 디스크 히트에 따라서 가능하게 될) 수 있습니다. 즉,이 기술은 "얼마나 많은 블록하는 것이 필요하다"에별로 도움이되지 않습니다.

    이 처리기 기술에 가고 다른 어떤 불 투과성; 그것은 일관된 결과를 제공합니다.

    "Handler_write"는 TMP 테이블이 필요되었음을 나타냅니다.

    테이블 (또는 다수의)의 행수 근사 숫자들은 아마도 테이블 검색 (들)를 나타낸다. LIMIT와 동일한 숫자는 그 자체로 한계를 소비하도록 좋은 인덱스를 만들 것을 의미 할 수 있습니다.

    당신이 BUFFER_POOL을 세척 할 경우, 당신은 (?) 정확한을주는 Innodb_buffer_pool_reads의 변화를 감시 감기 시스템에서 읽은 페이지 수의 계산 할 수있다. 이것은 거의 항상 캐시되고있는 잎 이외의 인덱스 페이지를 포함 할 것이다. 다른 어떤 시스템에서 진행되는 경우는 '글로벌'이 아닌 '세션'이기 때문에,이 상태 값을 신뢰할 수 없습니다.

  3. from https://stackoverflow.com/questions/10542853/how-to-clear-flush-mysql-innodb-buffer-pool by cc-by-sa and MIT license