본문프로젝트 도중에 굉장히 무거운 엔진을 API를 통해서 돌려야 하는 미션이 있었다.해당 과정에서 목표 성능 지표는 TPS 40~50이었고, 첫 테스트 결과 20 TPS 미만이 나왔었다. 당연히 성능 테스트는 통과를 하지 못했고 응답속도 또한 9~10초 사이대가 나왔다.원인해결하기 위해 다양한 방법을 동원하여 재시도를 해보았는데 접속 유저를 1, 10, 50명으로 해도 응답속도가 똑같이 5초를 유지하는 이상한 현상을 발견했다. 유저가 줄어들면 당연히 응답속도가 줄어야 한다고 생각을 했는데 몇 명이 들어오든 같은 응답속도를 유지하는 것을 보고 어디선가 병목이 일어난다는 것을 발견할 수 있었다.병목 위치를 찾던 도중 DBA가 이상한 테이블이 조회된다는 것을 알려주었고 확인 결과 조회가 많이 일어나는 테이블에..
데이터베이스
ora-04036: 인스턴스에 사용된 pga 메모리가 pga_aggregate_limit를 초과합니다. 발생 원인 Mybatis foreach로 약 3600개의 데이터를 한번에 insert하는 트랜젝션이 있다. 한 구문 당 간단한 데이터가 아닌 최소 1000byte 이상의 데이터 들이다 보니 아마 PGA 메모리가 계속해서 증가하면서 터진게 아닌가 싶다. PGA? PGA(Program Global Area)로 오라클 데이터베이스 메모리 영역의 중요한 요소이다. 유저로부터 요청받은 작업을 처리하는데 사용되는 메모리 영역이다. 해결 데이터베이스 사양을 마음대로 바꿀 수 없기에 소스에서 데이터를 한번에 3600개를 넣는게 아닌 1000개 단위로 나눠서 insert 하도록 바꿔서 해결했다. 최대한 극한의 개수까지..