아무거나

[mysql] Multi Values Insert시에 Packet 에러 본문

Data Store/DB

[mysql] Multi Values Insert시에 Packet 에러

전봉근 2018. 12. 27. 23:39
반응형

Mysql에서 DB에 Multi Values를 통하여 여러 row를 한 번에 insert 하는 방식을 사용하였다. (Mysql에서는 Bulk Insert라고도 불린다)


* Bulk Insert : 3개의 row가 기본적으로 하나의 transaction에서 처리가 된다. 즉, 3개 중 하나라도 필수값을 지키지 않는다거나 하는 경우 모두 rollback이 됨을 의미한다.


그러나 애플리케이션에서 다량의 Values를 생성하여 DB로 질의를 전달할때 DB측에서 받아들일 수 있는 Packet 제한이 있어

에러가 발생한다.


[error example]

### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (30321018 > 16777216). You can change this value on the server by setting the max_allowed_packet' variable.

; Packet for query is too large (30321018 > 16777216). You can change this value on the server by setting the max_allowed_packet' variable.; nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (30321018 > 16777216). You can change this value on the server by setting the max_allowed_packet' variable. 


그럴때는 SHOW VARIABLES LIKE 'max_allowed_packet';  을 확인하면 아래와 같이 표시된다.


만약 제한을 늘리고 싶다면 SET GLOBAL max_allowed_packet=16777216; (=16MB) 설정을 바꾼다. 그리고 마이에스큐엘 서버 리스타트하면 된다.

(영구적으로 적용하려면 my.cnf와 같은 설정파일에서 수정하자)


* 만약 제한을 엄청나게 늘린다면 DB성능에 영향을 야기시킬 수 있으므로 주의해서 사용하자.

반응형
Comments