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
'programing' 카테고리의 다른 글
이 해커는 무엇을 하려고 합니까? (0) | 2023.06.30 |
---|---|
판다 데이터 프레임 열 헤더를 모두 소문자로 만들려면 어떻게 해야 합니까? (0) | 2023.06.30 |
두 Oracle 타임스탬프 간의 간격(초) (0) | 2023.06.30 |
Url.action()을 사용하여 동적 Javascript 값 전달 (0) | 2023.06.30 |
다중 처리:클래스에 정의된 함수에서 Pool.map을 사용하는 방법은 무엇입니까? (0) | 2023.06.30 |