programing

Oracle에서 'Buffer Gets'는 실제로 무엇을 의미합니까?

batch 2023. 6. 30. 22:13
반응형

Oracle에서 'Buffer Gets'는 실제로 무엇을 의미합니까?

저는 현재 Oracle DBA와 거래하고 있습니다. Oracle DBA는 그가 작성한 프로파일링을 보내왔습니다.그의 보고서에 있는 용어 중 하나는 'Buffer Gets'인데, 이것이 실제로 무엇을 의미하는지 아십니까?제 추측으로는 버퍼에서 검색된 바이트 수이지만, 실제로는 전혀 모르겠습니다.다음은 몇 가지 샘플 출력입니다.

  Buffer Gets    Executions  Gets per Exec  %Total Time (s)  Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
    137,948,100       31,495        4,380.0   98.4  6980.57   6873.46 4212400674
Module: JDBC Thin Client
SELECT fieldOne, fieldTwo, fieldThree, fieldFour, fieldFive FROM TableExample
WHERE fieldOne = 'example'

관련이 있는 것 같은데 'Gets per Exec'이 무엇을 의미하는지 아는 것도 유용할 것 같습니다.저는 프로그래머이지만 DBA는 아닙니다.

Oracle 스토리지는 주어진 크기(예: 8k)의 블록으로 배열됩니다.테이블과 인덱스는 디스크의 일련의 블록으로 구성됩니다.이러한 블록이 메모리에 있을 때 버퍼를 차지합니다.

Oracle은 블록이 필요할 때 버퍼를 가져옵니다.먼저 메모리에 필요한 블록이 이미 있는지 확인합니다.이 경우 메모리 내 버전이 사용됩니다.메모리에 블록이 없으면 디스크에서 메모리로 블록을 읽습니다.

따라서 버퍼 get은 Oracle이 블록에 액세스해야 하는 횟수를 나타냅니다.읽기가 메모리(버퍼)에서 충족되었거나 물리적 IO가 생성되었을 수 있습니다.

물리적 IO는 (메모리 또는 CPU에 비해) 매우 비싸기 때문에 조정 방법 중 하나는 물리적 IO를 줄이기 위해 사용될 것으로 가정되는 버퍼 get 감소에 집중하는 것입니다.

WW가 하지 않은 질문의 한 부분에 대답하자면:

"Gets per Exec"은 단순히 gets 명령문의 실행 횟수로 나뉩니다.매우 효율적이지만 여러 번 실행되는 문이 있을 수 있습니다. 이렇게 하면 총 버퍼 가져오기 수는 높지만 실행당 가져오기 비율은 낮습니다.

저는 단지 약간의 고려를 하고 싶습니다.

우선 Dave Costa가 옳습니다. Buffer gets for exec이 정말 중요합니다.

그 데이터로는 너무 많은 양인지 아닌지 말할 수 없습니다. 왜냐하면 당신은 당신의 쿼리 추출한 레코드 수를 말하지 않기 때문입니다.

4,000개의 레코드를 추출하면 4,380개는 괜찮을 수 있습니다. 1개의 레코드만 추출하면 아마도 너무 많을 것입니다.

그래서, 얼마나 많은 기록들이?

또한 SQL 계획이 있습니까?1번 필드에 대한 색인이 있습니까?

올바른 인덱스는 쿼리를 조정하기 위한 첫 번째 "비밀"입니다.

딱 내 2센트야

언급URL : https://stackoverflow.com/questions/295009/in-oracle-what-does-buffer-gets-actually-refer-to

반응형