Oracle

본문프로젝트 도중에 굉장히 무거운 엔진을 API를 통해서 돌려야 하는 미션이 있었다.해당 과정에서 목표 성능 지표는 TPS 40~50이었고, 첫 테스트 결과 20 TPS 미만이 나왔었다. 당연히 성능 테스트는 통과를 하지 못했고 응답속도 또한 9~10초 사이대가 나왔다.원인해결하기 위해 다양한 방법을 동원하여 재시도를 해보았는데 접속 유저를 1, 10, 50명으로 해도 응답속도가 똑같이 5초를 유지하는 이상한 현상을 발견했다. 유저가 줄어들면 당연히 응답속도가 줄어야 한다고 생각을 했는데 몇 명이 들어오든 같은 응답속도를 유지하는 것을 보고 어디선가 병목이 일어난다는 것을 발견할 수 있었다.병목 위치를 찾던 도중 DBA가 이상한 테이블이 조회된다는 것을 알려주었고 확인 결과 조회가 많이 일어나는 테이블에..
회사에서 일을 하다 팀장님이 with 절을 사용하는 것을 봤다. WITH? Oracle 9.0부터 사용할 수 있으며 이름이 부여된 서브쿼리의 일종이다. VIEW와 쓰임새가 같지만 차이점이 존재한다. 차이점 VIEW : 한번 생성해 두면 DROP이 이뤄지기 전까지는 계속 접근하여 사용할 수 있다는 것 WITH : 실행할 쿼리문에 정의되어 있는 경우 한번 실행에 실행되고 사라진다는 것 사용하는 이유 WITH절은 복잡한 SQL에서 동일 블록에 대해 반복적으로 SQL문을 사용하는 경우 그 블록에 이름을 부여하여 재사용 할 수 있게 함으로서 쿼리 성능을 높일 수 있는데 WITH절을 이용하여 미리 이름을 부여해서 Query Block을 만들 수 있다. 자주 실행되는 경우 한번만 Parsing되고 Plan 계획이 수..
ora-04036: 인스턴스에 사용된 pga 메모리가 pga_aggregate_limit를 초과합니다. 발생 원인 Mybatis foreach로 약 3600개의 데이터를 한번에 insert하는 트랜젝션이 있다. 한 구문 당 간단한 데이터가 아닌 최소 1000byte 이상의 데이터 들이다 보니 아마 PGA 메모리가 계속해서 증가하면서 터진게 아닌가 싶다. PGA? PGA(Program Global Area)로 오라클 데이터베이스 메모리 영역의 중요한 요소이다. 유저로부터 요청받은 작업을 처리하는데 사용되는 메모리 영역이다. 해결 데이터베이스 사양을 마음대로 바꿀 수 없기에 소스에서 데이터를 한번에 3600개를 넣는게 아닌 1000개 단위로 나눠서 insert 하도록 바꿔서 해결했다. 최대한 극한의 개수까지..
약 100만건의 데이터를 삽입해야 하는 상황 회사에서 현재 하는 프로젝트에서 학습 데이터를 다뤄야 하는 일이 생겼고 데이터의 양은 약 100만건, 이 데이터를 데이터베이스에 넣는 과정이 있었다. 처음에는 100만건의 데이터를 삽입하는데 있어서 단일 Insert 문으로 데이터를 삽입했으나 10만건의 데이터가 들어가는 시점에서 약 한시간이 소요되는 상황이 발생했다. 단순 계산으로 100만건의 데이터를 더 삽입하기 위해서는 9시간이 추가적으로 걸릴 것으로 보여졌고 다른 방법을 모색 했어야만 했다. INSERT INTO TABLE_NAME ([컬럼1], [컬럼2], [컬럼3]) VALUES ('데이터1', '데이터2', '데이터3'); 100만건의 대량의 데이터를 삽입하는 것은 처음 있었던 일이었고 접해볼 경험..
송파도령
'Oracle' 태그의 글 목록