반응형
1) 테이블 용량 파악
mysql> USE DATABASE_NAME;
mysql>
SELECT TABLE_SCHEMA, TABLE_NAME,
PARTITION_NAME,
PARTITION_ORDINAL_POSITION AS PART_POS,
TABLE_ROWS,
ROUND(data_length/1024/1024/1024,2) AS 'data_gb',
ROUND(index_length/1024/1024/1024,2) AS 'index_gb'
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'TABLE_NAME'
ORDER BY PART_POS;
2) exchange할 테이블 구조 생성
-- 테이블 구조 생성
mysql> CREATE TABLE TEMP_241220_1 LIKE TABLE_NAME;
mysql> CREATE TABLE TEMP_241220_2 LIKE TABLE_NAME;
mysql> CREATE TABLE TEMP_241220_3 LIKE TABLE_NAME;
mysql> CREATE TABLE TEMP_241220_4 LIKE TABLE_NAME;
mysql> CREATE TABLE TEMP_241220_5 LIKE TABLE_NAME;
mysql> CREATE TABLE TEMP_241220_6 LIKE TABLE_NAME;
mysql> CREATE TABLE TEMP_241220_7 LIKE TABLE_NAME;
mysql> CREATE TABLE TEMP_241220_8 LIKE TABLE_NAME;
-- 테이블 파티셔닝 제거
※ EXCHANGE 작업시 일반테이블로 작업 해야하기 때문에 PARTITIONING 제거를 해준다.
mysql> ALTER TABLE TEMP_241220_1 remove partitioning;
mysql> ALTER TABLE TEMP_241220_2 remove partitioning;
mysql> ALTER TABLE TEMP_241220_3 remove partitioning;
mysql> ALTER TABLE TEMP_241220_4 remove partitioning;
mysql> ALTER TABLE TEMP_241220_5 remove partitioning;
mysql> ALTER TABLE TEMP_241220_6 remove partitioning;
mysql> ALTER TABLE TEMP_241220_7 remove partitioning;
mysql> ALTER TABLE TEMP_241220_8 remove partitioning;
-- 테이블 정상 생성 확인
mysql> SHOW CREATE TABLE TEMP_241220_1;
mysql> SHOW CREATE TABLE TEMP_241220_2;
mysql> SHOW CREATE TABLE TEMP_241220_3;
mysql> SHOW CREATE TABLE TEMP_241220_4;
mysql> SHOW CREATE TABLE TEMP_241220_5;
mysql> SHOW CREATE TABLE TEMP_241220_6;
mysql> SHOW CREATE TABLE TEMP_241220_7;
mysql> SHOW CREATE TABLE TEMP_241220_8;
3) exchange partition
ALTER TABLE TABLE_NAME algorithm=inplace, lock=none, EXCHANGE PARTITION partition_name WITH TABLE TEMP_241220_1;
※ mysql 8.0version에서 lock=none 옵션을 걸고 테스트를 했지만.. 옵션을 거나 옵션을 걸지 않나 0.1초내로 작업이 끝나기 때문에 lock을 확인할 겨를이 없었다... 따라서 해당옵션이 제대로 먹힌건지는... 모르겠다..
mysql> ALTER TABLE TABLE_NAME algorithm=inplace, lock=none, EXCHANGE PARTITION partition_name WITH TABLE TEMP_241220_1;
mysql> ALTER TABLE TABLE_NAME algorithm=inplace, lock=none, EXCHANGE PARTITION partition_name WITH TABLE TEMP_241220_2;
mysql> ALTER TABLE TABLE_NAME algorithm=inplace, lock=none, EXCHANGE PARTITION partition_name WITH TABLE TEMP_241220_3;
mysql> ALTER TABLE TABLE_NAME algorithm=inplace, lock=none, EXCHANGE PARTITION partition_name WITH TABLE TEMP_241220_4;
mysql> ALTER TABLE TABLE_NAME algorithm=inplace, lock=none, EXCHANGE PARTITION partition_name WITH TABLE TEMP_241220_5;
mysql> ALTER TABLE TABLE_NAME algorithm=inplace, lock=none, EXCHANGE PARTITION partition_name WITH TABLE TEMP_241220_6;
mysql> ALTER TABLE TABLE_NAME algorithm=inplace, lock=none, EXCHANGE PARTITION partition_name WITH TABLE TEMP_241220_7;
mysql> ALTER TABLE TABLE_NAME algorithm=inplace, lock=none, EXCHANGE PARTITION partition_name WITH TABLE TEMP_241220_8;
-- 소요시간 : exchange 테이블 하나당 0.1내로 완료 (테이블 하나당 용량 약 200GB)
-- TEST시 1초 내외로 완료
/*
ALTER TABLE TABLE_NAME ALGORITHM=inplace, LOCK=NONE, EXCHANGE PARTITION partition_name WITH TABLE TEMP_241220_1;
-- 0.041초
SELECT *
FROM TABLE_NAME PARTITION(partition_name);
-- 확인
*/
-- 대기세션 확인
mysql>
SELECT * FROM PERFORMANCE_SCHEMA.DATA_LOCKS;
mysql>
SELECT straight_join dl.THREAD_ID
, est.SQL_TEXT
, dl.OBJECT_SCHEMA
, dl.OBJECT_NAME
, dl.INDEX_NAME
, dl.LOCK_TYPE
, dl.LOCK_MODE
, dl.LOCK_STATUS
, dl.LOCK_DATA
FROM
performance_schema.data_locks dl inner join performance_schema.events_statements_current est on dl.THREAD_ID = est.THREAD_ID
ORDER BY est.TIMER_START,dl.OBJECT_INSTANCE_BEGIN;
-- 실행중인 세션 확인
mysql> select * from information_schema.processlist where command !='Sleep';
-- 테이블 용량 파악
mysql>
SELECT TABLE_SCHEMA, TABLE_NAME,
PARTITION_NAME,
PARTITION_ORDINAL_POSITION AS PART_POS,
TABLE_ROWS,
ROUND(data_length/1024/1024/1024,2) AS 'data_gb',
ROUND(index_length/1024/1024/1024,2) AS 'index_gb'
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'TABLE_NAME';
4) exchange한 임시 테이블 DROP
-- EXCHANGE 테이블 DROP
mysql> DROP TABLE TEMP_241220_1;
mysql> DROP TABLE TEMP_241220_2;
mysql> DROP TABLE TEMP_241220_3;
mysql> DROP TABLE TEMP_241220_4;
mysql> DROP TABLE TEMP_241220_5;
mysql> DROP TABLE TEMP_241220_6;
mysql> DROP TABLE TEMP_241220_7;
mysql> DROP TABLE TEMP_241220_8;
-- 소요시간 : 1테이블당 1초 미만
5) BINLOG 용량 및 ERROR LOG 점검
-- binary log 용량 점검 및 error log 확인
$ show binary logs;
-- 동기화 확인
mysql> show slave status\
반응형
'MySQL' 카테고리의 다른 글
MySQL version 8.0 | 8.4 주요 차이점 비교 (파라미터 튜닝) (0) | 2025.01.13 |
---|---|
Checking MySQL Logs (1) | 2024.12.26 |
MySQL 점검시 확인 해야 할 리스트(Error Summary, Purge Lag) (0) | 2024.11.30 |
MySQL 동적 쿼리와 로직 처리 (Prepared Statement, Stored Routine) (1) | 2024.11.29 |
MySQL I/O 동작방식 (2) | 2023.12.23 |