tencent cloud

피드백

플래시백 쿼리

마지막 업데이트 시간:2023-02-22 16:13:27

    기능 소개

    데이터베이스 운영 과정에서 오작동이 발생할 수 있으며 비즈니스에 심각한 영향을 미칠 수 있습니다. 롤백 및 클론은 오작동에 대한 일반적인 복구 방법이지만 사소한 데이터 변경 및 긴급한 문제 해결 시 오류가 발생하기 쉽고 시간이 많이 소요되며 주요 데이터 변경 사항을 처리할 때 복구 시간을 제어할 수 없습니다.
    TXSQL 팀은 Innodb 엔진을 위한 플래시백 쿼리 기능을 개발하고 구현했습니다. 간단한 SQL 문으로 오작동 이전의 과거 데이터를 쿼리하고 특정 SQL 구문을 통해 특정 시점의 데이터를 쿼리할 수 있습니다. 이를 통해 데이터 쿼리 및 복구 시간을 크게 절약하고 신속한 데이터 복구를 통해 비즈니스 연속성을 개선할 수 있습니다.

    지원 버전

    • 커널 버전: MySQL 5.7 20220715 이상.
    • 커널 버전: MySQL 8.0 20220331 이상.

    커널 마이너 버전 확인 및 업그레이드 방법에 대한 자세한 내용은 커널 마이너 버전 업그레이드를 참고하십시오.

    적용 시나리오

    플래시백 쿼리 기능은 데이터베이스 운영 중 오작동이 발생한 후 과거 데이터를 빠르게 쿼리하는 데 사용됩니다.
    이 기능을 사용할 때 다음 사항에 주의해야 합니다.

    • 플래시백 쿼리는 Innodb 물리적 테이블에 대해서만 지원되며 last_insert_id()와 같은 실제 열이 없는 view, 기타 엔진 또는 함수는 지원되지 않습니다.
    • 초(s) 레벨의 플래시백 쿼리만 지원하며 정확도를 완벽하게 보장할 수 없습니다. 1초 내에 여러 변경 사항이 있는 경우 그 중 하나를 반환할 수 있습니다.
    • 플래시백 쿼리는 기본 키(또는 GEN_CLUST_INDEX)에 대해서만 지원됩니다.
    • 플래시백 쿼리는 prepared statement 또는 stored procedure에서 사용할 수 없습니다.
    • 플래시백 쿼리는 DDL을 지원하지 않습니다. 휴지통을 통해 복구해야 하는 truncate table과 같은 테이블에서 DDL을 수행하는 경우 플래시백 쿼리에서 얻은 결과가 예상과 다를 수 있습니다.
    • 동일한 구문에서 동일한 테이블에 대해 여러 개의 플래시백 쿼리 시간이 지정된 경우 가장 빠른 시간이 선택됩니다.
    • 원본 인스턴스와 복제본 인스턴스의 시간 차이로 인해 Flashback 쿼리에 동일한 시간을 지정하면 인스턴스에 대해 얻은 결과가 다를 수 있습니다.
    • 플래시백 쿼리 기능을 활성화하면 실행 취소 로그 정리가 지연되고 메모리 사용량이 증가합니다. 특히 비즈니스 액세스 요청이 빈번한 인스턴스의 경우 Innodb_backquery_window를 큰 값(900에서 1800 사이 권장)으로 설정하지 않는 것이 좋습니다.
    • 데이터베이스 인스턴스가 재시작되거나 충돌하는 경우 재시작 또는 충돌 이전의 과거 정보를 쿼리할 수 없습니다. 지정된 시간은 지원 범위(show status like '%backquery%'를 실행하여 상태 변수 Innodb_backquery_up_time 및 Innodb_backquery_low_time을 통해 볼 수 있음)내에 있어야 합니다.

    사용 설명

    플래시백 쿼리는 새 AS OF 구문을 제공합니다. Innodb_backquery_enable 매개변수를 ON으로 설정하여 플래시백 쿼리 기능을 활성화한 다음 다음 구문을 통해 지정된 시간에 데이터를 쿼리할 수 있습니다.

    SELECT ... FROM <테이블 이름>
    AS OF TIMESTAMP <시간>;
    

    지정된 시간의 데이터 쿼리 예시

    MySQL [test]> create table t1(id int,c1 int) engine=innodb;
    Query OK, 0 rows affected (0.06 sec)
    
    MySQL [test]> insert into t1 values(1,1),(2,2),(3,3),(4,4);
    Query OK, 4 rows affected (0.01 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    MySQL [test]> select now();
    +---------------------+
    | now()               |
    +---------------------+
    | 2022-02-17 16:01:01 |
    +---------------------+
    1 row in set (0.00 sec)
    
    MySQL [test]> delete from t1 where id=4;
    Query OK, 1 row affected (0.00 sec)
    
    MySQL [test]> select * from t1;
    +------+------+
    | id   | c1   |
    +------+------+
    |    1 |    1 |
    |    2 |    2 |
    |    3 |    3 |
    +------+------+
    3 rows in set (0.00 sec)
    
    MySQL [test]> select * from t1 as of timestamp '2022-02-17 16:01:01';
    +------+------+
    | id   | c1   |
    +------+------+
    |    1 |    1 |
    |    2 |    2 |
    |    3 |    3 |
    |    4 |    4 |
    +------+------+
    4 rows in set (0.00 sec)
    

    과거 데이터에서 테이블 생성 예시

    create table t3 select * from t1 as of timestamp '2022-02-17 16:01:01';
    

    과거 데이터를 테이블에 삽입하는 예시

    insert into t4 select * from t1 as of timestamp '2022-02-17 16:01:01';
    

    매개변수 설명

    다음 표에는 플래시백 쿼리 기능의 구성 가능한 매개변수가 나열되어 있습니다.

    매개변수 범위 유형 기본값 값 범위/유효한 값 다시 시작 필요 설명
    Innodb_backquery_enable 글로벌 Boolean OFF ON\OFF No 플래시백 쿼리 기능의 스위치입니다.
    Innodb_backquery_window 글로벌 Integer 900 1 - 86400 No 플래시백 쿼리의 시간 범위(초)입니다. 이 매개변수의 값이 클수록 플래시백 쿼리에 지원되는 과거 데이터 쿼리 시간이 길어지고 실행 취소 테이블스페이스에서 사용하는 저장 공간이 늘어납니다.
    Innodb_backquery_history_limit 글로벌 Integer 8000000 1 - 9223372036854476000 No 플래시백 쿼리에 대한 undo 연결 목록의 길이입니다. 이 값을 초과하면 Innodb_backquery_window가 무시되고 이전 연결 목록 길이가 이 값보다 작을 때까지 purge가 트리거됩니다.
    문의하기

    고객의 업무에 전용 서비스를 제공해드립니다.

    기술 지원

    더 많은 도움이 필요하시면, 티켓을 통해 연락 바랍니다. 티켓 서비스는 연중무휴 24시간 제공됩니다.

    연중무휴 24시간 전화 지원