으로, 느린 때때로 :이유는 PostgreSQL의 업데이트 쿼리는 (BOOLEAN은 false (기본값) foo는 열 유형입니다) 내가 간단한 업데이트 쿼리가 있더라도 인덱스
update tablename set foo = true where id = 234;
"ID가"로 설정되어있는 (주)
Index Cond: (id = 234)
Total runtime: 0.358 ms
을하지만 여전히, 내가 200S보다 더 많은했다 느린 로그 (pgfouine)에서 설명 할 수없는 쿼리의 많음이있다 : 키와 내가 실행하면 내가 가진 "설명 분석"(?!) :
Times executed: 99, Av. duration (s): 70
누구나 설명해주십시오, 그 이유는 무엇입니까? (테이블에 1.5 mio 행, postgresql 8.4)
'id'가 PK 인 경우 (업데이트 된 행이 최대 1 개이기 때문에) 이는 사실상 순간적이어야합니다. 어느 쪽이든 (진공 분석을 상세하게 실행) 문제가 있거나 다른 쿼리가 전체 테이블을 잠그고 있습니다 ... postgresql 로그에서 200s 쿼리를 ideintify 할 수 있습니까? 구성에 "log_duration"매개 변수를 설정 했습니까? – leonbloy
예, "log_min_duration_statement"를 1000으로 설정 했으므로 slowlog 파일에서 이러한 쿼리를 얻었습니다. 해당 로그 파일에서 200 개의 쿼리를 식별하고 이러한 간단한 업데이트 만 수행합니다. 이 경우 postgresql 전체 테이블 잠금, 행 수준 잠금에 의해 관리되지 않습니까? "누가"이것을 잠그는 지 확인할 수있는 방법이 있습니까? 이 느린 쿼리가 새로 생성 된 행의 원인 일 수 있습니까? 그냥 추측, 난 아무 생각이 전혀 – matija
postgresql에서 업데이 트가 전혀 독자를 잠그지 않으므로 잠금 전혀 문제가되지 않을 수도 있습니다. shared_buffers와 같은 매개 변수를 조정 했습니까? 특정 시간에 예기치 않게 천천히 실행되는 쿼리가 발생합니까? 그들은 함께 여러 가지 일을하는지 아니면 가끔씩 혼자서 일어나는 일입니까? – araqnid