오라클 DB에 대한 신뢰성을 꽤나 흔들리게 해주었던 쿼리
Insert select
여러개의 조건따윈 없고
이력성 테이블에 넣은 데이터들을 이용해서
스케줄러 돌아가는 시간에 맞춰서
매번 시간값 하나 넣어주면
다 해결되도록 쿼리를 짜놨었는데
이것 때문에 당황한일이 있었다.
(당황 => 하루이내에 수시간내로 원인파악 및 대처하여 처리 가능했던일)
예를 들어 A라는 마트에서는
여러가지의 상품들을 취급하는데
각각의 팔린 상품들이 팔린상품들을 관리하는 A.selled 라는 테이블이 있다고 치자.
여기서 B.record , C.record , ... 라는 테이블에 각각의 상품들이 얼마나 팔렸는지
매 시간과 일별 통계를 내는 데
각각의 모든 상품들을 아이디를 넣기보다 DB에서 처리하는게 더 빠르지 않을까 라는 생각으로
매 스케줄러에 돌아가는 시간일때마다 그 시간만 넣어주면 모든게 처리되도록 쿼리를 작성했었는데
그게 아니었다.
각각의 상품아이디와 시간으로 좀더 세분화 해주니 문제가 해결됐다..
이 문제가 해결되면서 그동안 다른곳에서 발생했던 DB문제도 해결이 된 듯하다..
분명 처음 서버가 돌아갈때는 아무 문제가 없었기 때문에 잘 돌아가는구나 확인하고 넘어갔었는데
이번에 가서 확인해보니 DB테이블스페이스나 인덱스 테이블 스페이스가
95%, 97% 가량 가용중이었기 때문이라고도 생각되지만
일단 눈에 띄도록 해결되서 다행.
이번문제 덕분에 당일치기로 끝났어야 했던 일이 하루 더 걸렸다.
그래도 주말전에 완벽히 해결되서 다행.
------------------------------------------------
문제 및 원인 파악방법 과 해결 방법 요약.
1. 문제
통계가 생성되어야하는데
매번 생성되는 주기가 이상하다
=> 5분마다 생성되어야하는 통계가 불특정한 주기로 누락된다.
정상 : 0분(정각) 5분 10분 15분 20분 25분 , ....
현재 : 5분 10분 25분 45분 55분 등...
2. 원인 파악
현재까지의 데이터가 쌓인 테이블 A.selled에서 사용하고 있던 쿼리를 계속 입력한다.
Insert Select 를 구문을 전체적으로 이용한다.
정상적으로 작동함 -> ??
계속 입력한다 -> 어느순간 안됨.
(DB 테이블이 락이 걸렸는지 확인하기 위해 안되는동안 다른 클라이언트를 통해서
해당 테이블을 select 쿼리를 이용하여 확인 -> 정상작동 -> ???)
이번엔 select의 부분만 계속 쿼리한다.
정상적으로 작동함 -> ??
계속 입력한다 -> 어느순간 안됨 -> ?!
(DB 테이블이 락이 걸렸는지 확인하기 위해 안되는동안 다른 클라이언트를 통해서
해당 테이블을 select 쿼리를 이용하여 확인 -> 정상작동 -> ???)
이번엔 조건을 조금 상세하게 취급하여 쿼리를 한다.
정상적으로 작동함 -> ㅇㅇ 당연
계속 입력한다 -> 계속 작동함.
아 SQL이 무거운가보다 -> 바꾼 sql이 보다 최적화된 구문이라고 파악하고 변경 후 적용
3. 기존에 돌리던 로직과 비교하기위해 일정시간동안 구동하여
이전에 발생했던 오류가 동일하게 발생하는지 확인
-> 없음 => 원인해결.
'SQL > Oracle' 카테고리의 다른 글
[Database/Oracle]오라클 테이블 스페이스 추가하기 (0) | 2022.03.04 |
---|---|
통계 데이터 생성 오류 잦은 이유 (0) | 2021.12.29 |
[Oracle] 오라클 시간더하기, 테스트용 데이터 만들기 (1) | 2021.11.12 |
[Oracle/Tibero] merge insert 누락된 우괄호 (0) | 2021.06.02 |
오라클 상위 몇개 가져오기 (0) | 2021.05.18 |
댓글