Loading...
MySQL 9.5 Reference Manual 9.5의 26.3.5 Obtaining Information About Partitions의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
이 섹션에서는 여러 가지 방법으로 기존 파티션에 대한 정보를 얻는 방법을 설명합니다. 이러한 정보를 얻는 방법에는 다음이 포함됩니다:
SHOW CREATE TABLE
문을 사용하여 파티션 테이블을 생성할 때 사용된 파티션 절을 확인합니다.
SHOW TABLE STATUS
문을 사용하여 테이블이 파티션되어 있는지 여부를 확인합니다.
Information Schema의
PARTITIONS 테이블을 조회합니다.
문
EXPLAIN SELECT을 사용하여 특정
SELECT에서 어떤 파티션이 사용되는지 확인합니다.
파티션 테이블에 대해 insert, delete, update가 수행되면, 바이너리 로그는 로 이벤트가 발생한 파티션 및 (있는 경우) 서브파티션에 대한 정보를 기록합니다. 동일한 테이블이라 하더라도, 다른 파티션이나 서브파티션에서 변경이 발생하면 새로운 로 이벤트가 생성됩니다. 따라서 하나의 트랜잭션이 세 개의 파티션 또는 서브파티션에 관여하면, 세 개의 로 이벤트가 생성됩니다. update 이벤트의 경우, 파티션 정보는 “before” 이미지와 “after” 이미지 모두에 대해 기록됩니다.
바이너리 로그를
mysqlbinlog을 사용하여 볼 때 -v 또는 --verbose 옵션을 지정하면 파티션 정보가 표시됩니다. 파티션 정보는 로 기반 로깅이 사용 중일 때만 기록됩니다
(binlog_format=ROW).
이 장의 다른 곳에서 설명한 대로,
SHOW CREATE TABLE은 파티션 테이블을 생성하는 데 사용된
PARTITION BY 절을 출력에 포함합니다. 예를 들면 다음과 같습니다:
1mysql> SHOW CREATE TABLE trb3\G 2*************************** 1. row *************************** 3 Table: trb3 4Create Table: CREATE TABLE `trb3` ( 5 `id` int(11) DEFAULT NULL, 6 `name` varchar(50) DEFAULT NULL, 7 `purchased` date DEFAULT NULL 8) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 9/*!50100 PARTITION BY RANGE (YEAR(purchased)) 10(PARTITION p0 VALUES LESS THAN (1990) ENGINE = InnoDB, 11 PARTITION p1 VALUES LESS THAN (1995) ENGINE = InnoDB, 12 PARTITION p2 VALUES LESS THAN (2000) ENGINE = InnoDB, 13 PARTITION p3 VALUES LESS THAN (2005) ENGINE = InnoDB) */ 140 row in set (0.00 sec)
파티션 테이블에 대해 SHOW TABLE STATUS
를 실행했을 때의 출력은 비파티션 테이블의 것과 동일하지만,
Create_options 열에 문자열 partitioned가 포함된다는 점이 다릅니다.
Engine 열에는 해당 테이블의 모든 파티션에 사용되는 스토리지 엔진의 이름이 포함됩니다. (이 문에 대한 자세한 내용은
Section 15.7.7.39, “SHOW TABLE STATUS Statement”를 참조하십시오.)
INFORMATION_SCHEMA에서도 파티션에 대한 정보를 얻을 수 있으며, 여기에
PARTITIONS 테이블이 포함되어 있습니다.
Section 28.3.26, “The INFORMATION_SCHEMA PARTITIONS Table”를 참조하십시오.
파티션 테이블의 어떤 파티션이 특정
SELECT 쿼리에 관여하는지
EXPLAIN을 사용하여 확인할 수 있습니다.
EXPLAIN 출력의
partitions 열에는 해당 쿼리에 의해 레코드가 매칭될 파티션이 나열됩니다.
다음과 같이 테이블 trb1을 생성하고 데이터를 채운다고 가정해 보겠습니다:
1CREATE TABLE trb1 (id INT, name VARCHAR(50), purchased DATE) 2 PARTITION BY RANGE(id) 3 ( 4 PARTITION p0 VALUES LESS THAN (3), 5 PARTITION p1 VALUES LESS THAN (7), 6 PARTITION p2 VALUES LESS THAN (9), 7 PARTITION p3 VALUES LESS THAN (11) 8 ); 9 10INSERT INTO trb1 VALUES 11 (1, 'desk organiser', '2003-10-15'), 12 (2, 'CD player', '1993-11-05'), 13 (3, 'TV set', '1996-03-10'), 14 (4, 'bookcase', '1982-01-10'), 15 (5, 'exercise bike', '2004-05-09'), 16 (6, 'sofa', '1987-06-05'), 17 (7, 'popcorn maker', '2001-11-22'), 18 (8, 'aquarium', '1992-08-04'), 19 (9, 'study desk', '1984-09-16'), 20 (10, 'lava lamp', '1998-12-25');
다음과 같이 SELECT * FROM trb1;과 같은 쿼리에서 어떤 파티션이 사용되는지 확인할 수 있습니다:
1mysql> EXPLAIN SELECT * FROM trb1\G 2*************************** 1. row *************************** 3 id: 1 4 select_type: SIMPLE 5 table: trb1 6 partitions: p0,p1,p2,p3 7 type: ALL 8possible_keys: NULL 9 key: NULL 10 key_len: NULL 11 ref: NULL 12 rows: 10 13 Extra: Using filesort
이 경우, 네 개의 파티션이 모두 검색됩니다. 그러나 쿼리에 파티셔닝 키를 사용하는 제한 조건을 추가하면, 다음과 같이 매칭되는 값을 포함하는 파티션만 스캔되는 것을 확인할 수 있습니다:
1mysql> EXPLAIN SELECT * FROM trb1 WHERE id < 5\G 2*************************** 1. row *************************** 3 id: 1 4 select_type: SIMPLE 5 table: trb1 6 partitions: p0,p1 7 type: ALL 8possible_keys: NULL 9 key: NULL 10 key_len: NULL 11 ref: NULL 12 rows: 10 13 Extra: Using where
EXPLAIN은 사용된 키 및 가능한 키에 대한 정보도 제공합니다:
1mysql> ALTER TABLE trb1 ADD PRIMARY KEY (id); 2Query OK, 10 rows affected (0.03 sec) 3Records: 10 Duplicates: 0 Warnings: 0 4 5mysql> EXPLAIN SELECT * FROM trb1 WHERE id < 5\G 6*************************** 1. row *************************** 7 id: 1 8 select_type: SIMPLE 9 table: trb1 10 partitions: p0,p1 11 type: range 12possible_keys: PRIMARY 13 key: PRIMARY 14 key_len: 4 15 ref: NULL 16 rows: 7 17 Extra: Using where
EXPLAIN을 사용하여 비파티션 테이블에 대한 쿼리를 확인하는 경우, 에러는 발생하지 않지만
partitions 열의 값은 항상 NULL입니다.
EXPLAIN 출력의 rows 열에는 테이블의 전체 로 수가 표시됩니다.
Section 15.8.2, “EXPLAIN Statement”도 참조하십시오.
26.3.4 Maintenance of Partitions
26.4 Partition Pruning