2014-03-12 4 views
0

우리 프로덕션 환경에서 최근에 문제가 발생했습니다. 우리는 프로덕션 환경에서 우리의 응용 프로그램 버전을 업데이트했으며 더 많은 쿼리가 DB에 전달되어 왔습니다. 추가 쿼리와 관련하여 애플리케이션에서 변경 자체가 발생하지 않았습니다. 이러한 추가 쿼리가 전송되지 않은 날과 추가 쿼리가 DB로 전송 된 날이 있습니다.

우리는 eclipselink jpa 로깅을 사용하여 언젠가 entitymanager.find가 데이터베이스를 추가로 호출하게되고, 며칠간 데이터가 Db 호출의 캐시 istead에서 반환 된 것으로 보입니다.
이 데이터를 보유하고있는 eclipselink L2 캐시이고 캐시 미스가 발생할 때 db 쿼리가 실행된다고 가정합니다. 위의 진술에서 맞습니까?

내 위의 진술이 정확하다면 언젠가 응용 프로그램에서 찾고있는 데이터가 캐시에없는 이유는 무엇입니까? 우리가 알고있는 캐시를 지우기 위해 추가 코드를 작성하지 않았습니다.

또한이 L2 캐시 된 데이터가 정확히 어디에 있습니까? 힙 메모리에 있을까요? 가비지 수집은이 L2 캐시에 어떤 영향을 미칩니 까?EclisepLink L2 캐시 언제 내용이 제거 되나요?

답변

0

EclipseLink 사이트에는 캐싱 및 작동 방식에 대해 자세히 설명하는 여러 가지 문서가 있습니다. 먼저 https://www.eclipse.org/eclipselink/documentation/2.4/concepts/cache001.htmhttps://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Configuring을 확인한 다음 구체적인 질문을하는 것이 좋습니다. 그러면 설정에 따라 다음 날에는 캐시에없는 것이 많은 이유가 있습니다. 기본적으로 공유 L2 캐시는 소프트 캐시 및 약한 ID 맵 참조로 사용되므로 더 이상 응용 프로그램에서 참조하지 않는 개체를 가비지 수집 할 수 있습니다.

+0

내 주요 쿼리는 실제로 L2 캐시 개체가 힙에 머물러 있는지 또는 파일에서 직렬화되고 역 직렬화되었는지 여부입니다. 이 링크에서 읽은 http://www.developerfusion.com/article/84945/flush-and-clear-or-mapping-antipatterns/ L2 캐시 된 개체는 직렬화 및 역 직렬화됩니다. GC가 영향을 미치는지 확실하지 않습니다. 위의 기사를 읽고 나는 L1 캐시 개체가 힙에 있고 L2 캐시 된 콘텐츠가 File을 통해 처리된다는 인상을 받았습니다. – thiyaga

관련 문제