게시글 테스트 데이터 삽입 에서 SQL 최대 2만건 삽입 되는문제
게시글 데이터 삽입 부분에서요, 영상 강의에서는 데이터 1200만건 삽입 하는데 대략 13분 정도 걸리는걸 확인 햇는데, 저는 2초만에 끝나더니 삽입된 갯수 확인해보니까 2만건만 추가 되고 더 추가 안된거같은데 어떤 문제가 있을가요??
아래는 코드랑 영상에서 설명한 sql 설정값 첨부 했습니다.
@SpringBootTest
public class DataInitializer {
@PersistenceContext
EntityManager entityManager;
@Autowired
TransactionTemplate transactionTemplate;
Snowflake snowflake = new Snowflake();
CountDownLatch latch = new CountDownLatch(EXECUTE_COUNT);
static final int BULK_INSERT_SIZE = 2000;
static final int EXECUTE_COUNT = 6000;
@Test
void initialize() throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(10);
for(int i = 0; i < EXECUTE_COUNT; i++) {
executorService.submit(() -> {
insert();
latch.countDown();
System.out.println("latch.getCount() = " + latch.getCount());
});
}
latch.await();
executorService.shutdown();
}
void insert() {
transactionTemplate.executeWithoutResult(status -> {
for(int i = 0; i < BULK_INSERT_SIZE; i++) {
Article article = Article.create(
snowflake.nextId(),
"title" + i,
"content" + i,
1L,
1L
);
entityManager.persist(article);
}
});
}
}
답변 2
0
MinKyu Song님, 안녕하세요!
코드로 봤을 때에는 이상 없어보이는데 이상하네요..
2만건이면, 10개의 스레드풀에서 각 스레드가 1번씩만 실행되고 종료된 것 같은데, 따로 로그 남은건 없을까요?
스프링부트 버전도 강의와 일치하는지 궁금합니다!
0
다시 똑같은 코드로 테스트 돌리니까 1200만건이 삽입 됫어요, 처음에 왜그랫는지 모르겟지만, 스프링 버전은 아래내용으로 강의와 맞게 설정 햇어요
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.2'
id 'io.spring.dependency-management' version '1.1.7'
}
0
안녕하세요, 인프런 AI 인턴입니다. MinKyu Song님.
질문 주신 내용은 대량의 데이터를 삽입할 때 일부 데이터만 삽입되고 전체 데이터 삽입이 완료되지 못한 문제에 관한 것입니다. 아래에서는 이와 관련된 몇 가지 주요 원인과 해결 방법을 안내드립니다.
주요 원인 및 해결 방법
트랜잭션과 커밋 문제:
- 제공해주신 코드에서는
transactionTemplate.executeWithoutResult안에서EntityManager.persist를 호출하여 데이터를 삽입하고 있습니다.
- 대량의 데이터를 삽입할 때 트랜잭션이 너무 커지면 문제가 발생할 수 있으므로, 데이터의 양을 조절하거나 적용 가능한 경우,
flush()및clear()메소드를 통해 중간에 커밋하는 방법을 고려해 볼 수 있습니다.
- 제공해주신 코드에서는
메모리 이슈:
- 대량의 데이터를 한 번에 삽입하기 때문에 JVM의 메모리 제한에 걸릴 수 있습니다. 이 경우 JVM 옵션을 통해 힙 메모리를 늘리는 방법도 있습니다.
-Xmx및-Xms옵션을 사용하여 JVM의 메모리 크기를 설정할 수 있으며, 이 값이 충분히 큰지 확인해 보세요.
- 대량의 데이터를 한 번에 삽입하기 때문에 JVM의 메모리 제한에 걸릴 수 있습니다. 이 경우 JVM 옵션을 통해 힙 메모리를 늘리는 방법도 있습니다.
데이터베이스 설정:
- MySQL의 설정 중
max_allowed_packet값이 너무 작거나, 다른 쿼리 제한 설정이 있는지 확인합니다. 이 설정을 통해 데이터베이스에서 수용할 수 있는 데이터의 최대 크기를 조절할 수 있습니다.
- MySQL의 설정 중
쓰레드 수 조정:
- 현재 코드에서 스레드 풀을 10개로 설정하여 실행하고 있습니다. 이 수치 또한 메모리 사용에 영향을 미칠 수 있으므로 필요에 따라 조정해야 할 수 있습니다.
- 현재 코드에서 스레드 풀을 10개로 설정하여 실행하고 있습니다. 이 수치 또한 메모리 사용에 영향을 미칠 수 있으므로 필요에 따라 조정해야 할 수 있습니다.
위의 문제들과 관련된 추가 자료나 유사한 해결 사례
위의 해결 방법을 기반으로 구체적인 설정을 테스트한 후, 더 많은 정보를 얻으시려면 아래 유사한 문제 해결을 다룬 자료들을 참고하세요:
저는 질문자님의 이해를 돕고자 기존의 지식공유자님의 답변을 참고하여 유사한 해결 링크와 추가 설명을 제공합니다. 현재 베타 기능으로 답변이 충분치 않을 수 있는 점 양해 부탁드리며, 추가적으로 궁금한 점이 있으시면 자유롭게 질문해 주세요. 곧 지식공유자께서 추가적인 답변을 제공해 주실 것입니다.
@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.
0
31
1
consumer에서 에러가 발생할 경우 데이터 유실 문의
0
48
2
게시글 테스트 데이터 삽입
0
51
2
정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?
0
104
2
좋아요 기능 정합성 보장 방법
0
98
2
좋아요 동시성처리 최적의 선택?
1
136
2
프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해
0
92
2
안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.
0
60
1
조회수 조회 로직 질문
1
67
2
비로그인 유저도 어뷰징 방지 정책
1
73
2
CommentServiceTest의 테스트 로직 질문
0
54
2
무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문
1
74
2
path 쿼리 관련 질문드립니다!
0
60
2
antigravity 에디터를 쓰신다면 종료해주세요
1
123
0
프로젝트 구조
0
88
2
article_like_count api test
0
79
2
이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.
0
104
2
[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제
0
92
2
findByPath에서 articleId로도 검색을 해야 할 것 같아요.
0
93
3
jpa ddl-auto none을 하는 이유와 join 방법
0
97
2
팩터리 메소드와 response 객체 사용 이유가 궁금합니다!
0
90
2
커서 기반 페이지네이션 과 무한 스크롤링
0
111
2
게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기
0
97
2
멀티 모듈이 아닌 MSA 환경에서 common
0
157
2





