2014-07-11 4 views
0

Oracle 10g에서 나는 합리적인 속도로 (약 30-40 분 약) 현재 실행 중입니다. 같은 SQL이 2 일 전에 실행될 때, SQL이 완료되는 데 약 2.5 시간이 걸렸습니다. 쿼리의 실행 계획이 변경되었을 수도 있습니다. 그러나 그것은 사실이 아닙니다. 두 실행 계획이 일치했습니다. 그래서 DBA의 도움으로이 기간 동안 데이터베이스 활동을 찾기 위해 AWR 보고서를 생성했습니다. 물론,이 장기 실행 쿼리는 몇 가지 다른 쿼리와 함께 등장했습니다. AWR에서이 쿼리는 많은 수의 버퍼 가져 오기, 디스크 읽기 목록에 등장했지만 4 개 이상의 다른 쿼리가 더 많았습니다 (함께 98 %를 구성했습니다). 실제로 두 목록의 최상위 쿼리는 버퍼 가져 오기의 약 50 %와 디스크 읽기의 80 % 였지만 광산은 각각 약 2 %와 0.9 % 밖에 차지하지 않았습니다. 내 쿼리는 CPU 시간 및 구문 분석 된 호출을 포함하여 다른 목록에 포함되지 않았습니다.다른 쿼리의 성능을 기반으로 SQL의 성능이 동시에 실행 됨 - AWR

내 질문 - 많은 양의 버퍼를 가져오고 다른 쿼리에서 디스크를 읽으면 쿼리 성능에 영향을 줄 수 있습니까?

답변

3

물론입니다. 데이터베이스 설계의 깊이에 빠지지 않고 데이터베이스 시스템은 많은 자료를 공유합니다.

가장 큰 것은 일반적으로 데이터 페이지입니다. 이는 서버에서 유지 관리되며 쿼리에 대한 데이터를 제공합니다. 예를 들어, 여러 번 테이블을 읽는 경우, 페이지가 이미 메모리에있을 때 두 번째 읽기가 훨씬 더 효율적입니다. 다른 쿼리가 페이지 캐시를 사용하는 경우 캐시에 더 적은 페이지를 넣을 수 있으며 쿼리가 디스크에서 읽어야 할 가능성이 더 큽니다.

물론 직접적인 경쟁이있을 수도 있습니다. 여러 쿼리가 동시에 디스크에서 데이터를 가져 오는 중일 수 있습니다. 그리고 I/O 호출이 큐 지연으로 종료 될 수 있습니다.

더 복잡한 상호 작용이있을 수도 있습니다. 데이터베이스 엔진에 대한 하나의 중요한 최적화는 "미리 읽기"입니다. 즉, 하나의 데이터 페이지를 읽으면 다음 페이지도 원할 것입니다. 엔진이 메모리에서 데이터를 처리하는 동안 I/O 시스템은 꺼내서 다음 데이터를 가져올 수 있습니다.

글쎄, 동시에 많은 쿼리를 실행하고 있다면, 엔진이 당신의 페이지를 미리 읽을 대역폭이 없을 수도 있습니다.

다음은 버퍼링과 다른 쿼리가 성능에 미치는 영향의 몇 가지 예입니다. 그러나 대답은 울리는 "예"입니다. 다른 쿼리는 쿼리 성능에 영향을 줄 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그것은 많은 의미가 있습니다. – toddlermenot

관련 문제