지난 포스팅에 성능최적화를 하며 파티셔닝을 적용했었다.
이를 적용하며 발생했던 오류와 시도했던 방법, 그리고 해결방법까지 정리해보려 한다.
문제정의
알람 데이터의 증가로 인해 alarm_data 테이블에 파티셔닝을 적용하려 했으나, 다음과 같은 오류가 발생했다.
ERROR 1506: Foreign keys are not yet supported in conjunction with partitioning
이는 MySQL에서 파티셔닝된 테이블과 외래 키 제약을 동시에 사용할 수 없음을 나타낸다.
시도했던 방법
1. 외래 키 제약 유지한 채 파티셔닝 시도 : 기존의 외래 키 제약을 유지하면서 파티셔닝을 적용하려 했으나 동일한 오류가 반복되었다.
2. 파티셔닝 함수 변경: UNIX_TIMESTAMP(), TO_DAYS(), YEAR() 등 다양한 파티셔닝 함수를 적용해 보았지만, 문제는 해결되지 않았다.
해결 방법
외래 키 제약을 제거한 후 파티셔닝을 적용했다.
이로 인해 데이터 무결성 유지가 우려되었으나, 애플리케이션 레벨에서 로직을 추가하여 무결성을 검증하도록 설계했다.
-- 1. FOREIGN KEY 제약 제거
ALTER TABLE alarm_data DROP FOREIGN KEY alarm_data_ibfk_1;
ALTER TABLE alarm_data DROP FOREIGN KEY alarm_data_ibfk_2;
마무리
파티션은 내부적으로 테이블을 여러 개로 나누는데,
각 파티션이 독립적으로 관리되기 때문에 MySQL은 파티션된 테이블에 대해 외래키 무결성을 검사할 수 있는 메커니즘을 제공하지 않는다. 따라서 FK 제약을 제거하고 애플리케이션 단에서 정합성 체크해야 한다.
예를 들어, Insert 전에 해당 외래키 존재 여부를 검사하면 된다.
'프로젝트 > 악취 포집기 앱' 카테고리의 다른 글
DB 마이그레이션 적용 (0) | 2025.04.01 |
---|---|
PRIMARY KEY 미포함 컬럼 파티셔닝 오류 (0) | 2025.04.01 |
MySQL 성능 최적화 (0) | 2025.04.01 |