2013-01-09 5 views
0

PostgreSQL 가입에 관한 질문이 있습니다. PostgreSQL은 JOIN 된 테이블에 대한 임시 테이블을 생성합니까 아니면 모든 테이블을 만들지 않습니다
임시 테이블이 없습니까?PostgreSQL JOIN, 후드 아래

내 질문의 이유는 : 내가 많은 JOINs와 SELECT 요청을 할 때, 쓰기 작업에서 IO 스파이크를 참조하십시오. 이 문제의 원인은 무엇입니까?

고마워요.

+3

다릅니다. '설명 (분석 사실, 자세한 사실, 버퍼 사실)'당신에게 말할 것이다. –

+0

I/O 스파이크는 다른 페이지 (또는 프로세스)를위한 여유 공간을 만들기 위해 더티 페이지를 작성하는 경우 발생할 수 있습니다. – wildplasser

답변

1

크기가 커지면 PostgreSQL은 일시적으로 결과 세트를 디스크에 유출합니다. RAM보다 작은 데이터베이스가 아니라면 선택의 폭이 넓지 않습니다.

그러나 데이터 페이지가 작성된 이후 처음으로 읽는 경우 예기치 않은 기록이 표시 될 수도 있습니다. 가시성 검사를 최적화하기 위해 각 페이지에 "힌트 비트"가 설정되어 있습니다. 진공 청소기 등이나 페이지에 액세스 할 때 설정됩니다. 큰 가져 오기를 수행 한 후에 테이블 스캔을 수행하면 모든 힌트 비트가 설정되고 쓰여지면서 많은 예기치 않은 IO가 발생할 수 있습니다.