일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Gradle
- IntelliJ
- Oracle
- redis
- Web Server
- it
- jenkins
- elasticsearch
- devops
- linux
- ubuntu
- springboot
- Spring
- db
- MySQL
- Git
- php
- ReactJS
- jsp
- java
- JVM
- laravel
- 맛집
- tool
- Design Patterns
- 요리
- javascript
- AWS
- Spring Boot
- Spring Batch
Archives
- Today
- Total
아무거나
[mysql] Multi Values Insert시에 Packet 에러 본문
반응형
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성능에 영향을 야기시킬 수 있으므로 주의해서 사용하자.
반응형
'Data Store > DB' 카테고리의 다른 글
[mysql] GROUPING을 하면서 다른 필드의 종류별 개수와 또 다른 필드의 숫자값을 모두 더한 값의 리스트를 도출하는 쿼리 (0) | 2019.02.15 |
---|---|
[mysql] hierarchy 구조에서 recursive 쿼리의 사용 (0) | 2019.01.16 |
[mysql] UPSERT(INSERT ON DUPLICATE KEY UPDATE) (0) | 2019.01.16 |
[mysql] json형태값 필드 분리 및 조건별 조회 (0) | 2019.01.16 |
[mysql] 컬럼의 collation이 latin1 일 때 한글조회 문제 해결 (0) | 2018.12.27 |
Comments