2011-11-14 4 views

답변

-1

:

액티브 :: QueryCache 모든 요청에 ​​생성 된 SELECT 쿼리를 캐시합니다. INSERT 또는 UPDATE가 발생하면 캐시가 정리됩니다.

+0

'ActiveRecord :: QueryCache'는 prepared statement가 캐시되는 곳이 아니기 때문에 나는 하향 투표했다. 준비된 문은 해당 쿼리에 대해 특별히 컴파일 된 문이므로 Rails는 모든 요청을 다시 컴파일하는 고비용의 작업을 수행 할 필요가 없습니다. QueryCache는 쿼리 결과를 저장하기위한 것입니다. – Hengjie

1

나는 이것을 찾고 있었고 준비된 명령문 캐시가 데이터베이스 커넥터에 구현되어 있으므로 데이터베이스 커넥터를 지워야하는 위치에있는 것으로 보입니다.

activerecord-oracle_enhanced-adapter를 보면 버전 1.4.1에 추가 된 'statement_limit'구성이 기본값 인 250입니다. 어댑터가 준비된 명령문 캐시에 명령문을 추가 할 때마다 먼저 준비된 명령문을 끝에서 제거합니다 그 한계까지 캐시 (단지 배열)의.

모든 준비된 문을 삭제하려면, 당신은 connection.clear_cache!

를 호출하여이 그냥 oracle_enhanced 드라이버라고 할 수 있습니다. postgresql 또는 다른 것을 사용하고 있다면 그 드라이버에 대한 문서를 확인하십시오. 희망이 도움이됩니다.

+0

고마워. 솔직히이 질문을하는 이유를 기억할 수는 없지만 Rails의 멀티 테넌시와 관련이 있습니다. 쿼리 캐시가 더 이상 문제가되지 않도록 패치를 적용했다고 생각합니다. :) –

관련 문제