본문 바로가기
프로젝트/FitTrip

[트러블슈팅] MySQL RDBMS의 Batch Insert

by 진꿈청 2024. 6. 25.

🐞 버그 설명

MySQL은 기본적으로 Sequence를 지원하지 않는다.

 

따라서, INSERT를 배치 처리하여 성능 최적화를 하려 했었지만, 작동되지 않았다.
(SELECT를 통해 한 번에 Batch로 읽어오는 것은 가능하다.)

관련 출력

2024-04-08T13:17:21.977+09:00 DEBUG 16587 --- [nio-8080-exec-2] org.hibernate.SQL                        : 
    insert 
    into
        dm_user
        (created_at, deleted, dm_id, updated_at, user_id, dm_user_id) 
    values
        (?, ?, ?, ?, ?, default)
2024-04-08T13:17:21.983+09:00 DEBUG 16587 --- [nio-8080-exec-2] org.hibernate.SQL                        : 
    insert 
    into
        dm_user
        (created_at, deleted, dm_id, updated_at, user_id, dm_user_id) 
    values
        (?, ?, ?, ?, ?, default)

만약, MySQL에서 Sequence ID 생성 전략을 사용하고 싶다면 따로 Sequence 테이블을 만들어야 한다.

 

Batch Insert가 필요하다면 MySQL 사용시 해당 내용을 숙지해야 한다.

 

아래 블로그는 MySQL에서 Sequence 사용시 설정하는데 참고할 수 있다.

https://gngsn.tistory.com/196

 

✅ 예상 결과

INSERT 문 Batch 처리

❗ 실제 결과

MySQL은 ID 생성 전략 중 SEQUENCE를 기본적으로 지원하지 않음

💻 버그 시뮬레이션

.

📄 로그

2024-04-08T13:17:21.977+09:00 DEBUG 16587 --- [nio-8080-exec-2] org.hibernate.SQL                        : 
    insert 
    into
        dm_user
        (created_at, deleted, dm_id, updated_at, user_id, dm_user_id) 
    values
        (?, ?, ?, ?, ?, default)
2024-04-08T13:17:21.983+09:00 DEBUG 16587 --- [nio-8080-exec-2] org.hibernate.SQL                        : 
    insert 
    into
        dm_user
        (created_at, deleted, dm_id, updated_at, user_id, dm_user_id) 
    values
        (?, ?, ?, ?, ?, default)

🌏 환경

No response

🙋🏻 More

No response