데이터 분석(Assessment and Analysis) 단계
🔍 1. 데이터베이스 구조 분석
1-1. 테이블 구조 확인
- 테이블 개수, 컬럼 타입, 제약 조건(FK, PK), 인덱스를 파악해야 합니다.
- MSSQL 쿼리 예제:
-- 테이블 리스트 조회
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';
-- 테이블 컬럼 상세 조회
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo';
주요 분석 포인트:
- 테이블 개수: 데이터 볼륨 파악.
- 컬럼 타입: MySQL과 호환성 확인.
- NULL 값 처리: MySQL은 NOT NULL이 기본 옵션.
1-2. 제약 조건(Constraints) 및 인덱스 분석
- 외래 키(FK), 기본 키(PK), 고유 키(Unique), 인덱스를 파악해야 합니다.
MSSQL 쿼리 예제:
-- 제약 조건 조회
SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
-- 인덱스 조회
SELECT t.name AS TableName, i.name AS IndexName, i.type_desc AS IndexType, c.name AS ColumnName
FROM sys.indexes i
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
INNER JOIN sys.tables t ON i.object_id = t.object_id
WHERE i.is_primary_key = 0 AND i.is_unique = 0;
분석 포인트:
- MySQL은 FULLTEXT와 SPATIAL 인덱스를 지원하지만, MSSQL과 인덱스 동작이 다를 수 있음.
- 클러스터형 인덱스(MSSQL) → 프라이머리 키 인덱스(MySQL).
📊 2. 데이터 양 및 성능 분석
2-1. 데이터 크기 파악
- 데이터 크기에 따라 마이그레이션 전략을 다르게 가져가야 합니다.
MSSQL 쿼리 예제:
-- 전체 데이터베이스 크기 확인
EXEC sp_spaceused;
-- 테이블별 데이터 크기 확인
SELECT t.name AS TableName, p.rows AS RowCounts, SUM(a.total_pages) * 8 / 1024 AS TotalSizeMB
FROM sys.tables t
INNER JOIN sys.indexes i ON t.object_id = i.object_id
INNER JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY t.name, p.rows
ORDER BY TotalSizeMB DESC;
분석 포인트:
- 테이블별 데이터 볼륨 파악.
- 대용량 테이블은 배치 마이그레이션 고려.
2-2. 성능 병목 분석
- 성능 저하를 방지하기 위해 인덱스 최적화 필요.
MSSQL 성능 분석 쿼리:
-- 느린 쿼리 분석
SELECT TOP 10 qs.sql_handle, qs.execution_count, qs.total_worker_time, qs.total_logical_reads,
qs.total_physical_reads, qs.total_elapsed_time, t.text AS query_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle)
ORDER BY qs.total_elapsed_time DESC;
분석 포인트:
- MySQL은 쿼리 옵티마이저가 다르므로 JOIN 최적화 필요.
⚖️ 3. 데이터 타입 호환성 분석
AWS SCT를 사용하면 기본 매핑이 가능하지만, 일부는 수동으로 수정해야 합니다.
MSSQL 타입 MySQL 타입 비고
INT | INT | 동일 |
BIGINT | BIGINT | 동일 |
SMALLINT | SMALLINT | 동일 |
TINYINT | TINYINT | 동일 |
DECIMAL(p,s) | DECIMAL(p,s) | 동일 |
FLOAT/REAL | FLOAT | 동일 |
DATETIME/DATETIME2 | DATETIME | 동일 |
SMALLDATETIME | DATETIME | 시간 오차 확인 필요 |
DATE | DATE | 동일 |
TIME | TIME | 동일 |
CHAR(n) | CHAR(n) | 동일 |
NCHAR(n) | CHAR(n) | 유니코드 여부 확인 필요 |
VARCHAR(n) | VARCHAR(n) | 동일 |
NVARCHAR(n) | VARCHAR(n) | 유니코드 데이터 마이그레이션 확인 |
TEXT | TEXT | 동일 |
UNIQUEIDENTIFIER | CHAR(36) | UUID 형태로 변환 필요 |
BIT | TINYINT(1) | 0/1 변환 필요 |
주요 주의사항:
- MSSQL의 NVARCHAR → MySQL의 VARCHAR로 변환 시 유니코드가 손실되지 않도록 utf8mb4 인코딩 설정 필요.
- DATETIME2: MySQL DATETIME으로 변환되나, 정밀도 차이 주의.
🚨 4. SQL 객체 분석(Stored Procedures, Triggers, Functions)
MSSQL의 T-SQL 구문은 MySQL에서 작동하지 않으므로 반드시 수정해야 합니다.
4-1. 저장 프로시저(Stored Procedure)
-- MSSQL 프로시저 조회
SELECT name, type_desc, create_date
FROM sys.procedures;
변환 예시:
- MSSQL의 GETDATE() → MySQL의 NOW().
- MSSQL의 TOP n → MySQL의 LIMIT n.
4-2. 트리거(Trigger)
-- MSSQL 트리거 조회
SELECT name, parent_class_desc, create_date
FROM sys.triggers;
변환 예시:
- MSSQL은 AFTER INSERT 대신 MySQL은 AFTER INSERT ON table_name 사용.
- MySQL은 INSTEAD OF 트리거 미지원.
4-3. 함수(Functions)
-- 사용자 정의 함수 조회
SELECT name, type_desc
FROM sys.objects
WHERE type IN ('FN', 'IF', 'TF');
변환 예시:
- MSSQL LEN() → MySQL CHAR_LENGTH()로 변경.
- MSSQL ISNULL() → MySQL IFNULL()로 변경.
🛑 5. 데이터 품질 분석(Data Quality Assessment)
5-1. 중복 데이터 확인
-- 특정 컬럼 중복 체크
SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 1;
5-2. NULL 데이터 확인
-- NULL 값 카운트
SELECT column_name, COUNT(*)
FROM table_name
WHERE column_name IS NULL;
🔧 6. AWS SCT를 활용한 분석 및 변환 시뮬레이션
6-1. AWS SCT 설치 및 연결
- AWS SCT 다운로드: AWS SCT
- 프로젝트 생성: 소스(MSSQL)과 타겟(MySQL) 연결.
- 스키마 분석: 자동 변환 후 Incompatible Objects Report 확인.
- SQL 코드 변경: 수동 수정 가이드 제공.
🎯 마지막 체크포인트
- 데이터 타입 불일치 여부 확인.
- 테이블 관계도 및 제약 조건 파악.
- SQL 객체(T-SQL → MySQL SQL) 수동 변환 리스트 확보.
- AWS SCT를 통한 시뮬레이션 실행 및 오류 분석.
이제 데이터 분석이 완료되면, 데이터 매핑 및 변환 단계로 넘어갈 준비가 끝났습니다! 🚀
'개발공부 > Database' 카테고리의 다른 글
MSSQL -> MySQL 데이터 마이그레이션- 5.모니터링 및 성능 최적화 단계 (0) | 2025.02.17 |
---|---|
MSSQL -> MySQL 데이터 마이그레이션- 4.데이터 분석 (0) | 2025.02.17 |
MSSQL -> MySQL 데이터 마이그레이션- 1.계획 (0) | 2025.02.14 |
Data 마이그레이션 이란? (0) | 2025.02.14 |
데이터 웨어하우스(DW) vs 데이터 레이크(Data Lake) 의 장단점과 차이점 (1) | 2025.02.13 |