문제

나는 정말로 이상한 문제가있다. SpQuery를 사용할 때 객체 캐시를 빠르게 검색 할 때 더 빠르게 검색합니다.

항목을 얻는 코드는 다음과 같습니다.

PortalSiteMapProvider ps = PortalSiteMapProvider.CurrentNavSiteMapProviderNoEncode;
var items = ps.GetCachedListItemsByQuery(((PortalSiteMapNode)ps.CurrentNode).WebNode, "mylistname", myQuery, site.RootWeb);
.

이 코드를 실행하면 쿼리에서 조건을 만족하는 모든 결과를 얻을 수 있습니다 (얼마나 많은 횟수가 횟수가 있더라도 페이지를 새로 고침하십시오). 그러나 목록 (추가 또는 삭제)을 변경하면 개체 캐시가 변경된 항목 세트를 한 번만 반환합니다. 다음 번에 페이지를 새로 고침합니다. 0 결과가 나타납니다.

e.g. 내가 5 개의 항목을 가지고 있고 1 개의 새로운 항목을 추가하면 올바른 결과 인 6 개의 항목을 얻습니다. 그러나 페이지를 다시 새로 고치면 0 결과가 나타납니다. 이 상태는 앱 풀 또는 플러시 오브젝트 캐시를 재활용 할 때까지 지속됩니다.

내 오브젝트 캐시는 300MB로 설정되고 쿼리가 실행될 때 변경 사항을 확인하고 쿼리가 3로 설정됩니다.

아이디어가 내 문제의 원인이 될 수있는 일은 무엇입니까?

모든 조언을 환영합니다! 고마워.

편집 :

ULS를 들여다 보았고 0 항목이 반환되면이 항목을 찾았습니다.

Cache miss for query Web (nor all entries not found) "query .... "
Fetching 4294967295 items.
Fetching super user items.
Fetching SuperReader items.
Merging super user and super reader items.
Cache Hit for query Web "query ... "
Creating result set.
Adding super user IDs.
Adding Super Reader IDs.
Nothing from SuperReaders.
.

도움이 되었습니까?

해결책

"쿼리 웹에 대한 캐시 미스"는 대답 일 수 있습니다.잘못된 부분에 대한 ULS 로그를보고있을 수 있습니다.첫 번째 성공적인 실행을 위해 ULS 로그를 살펴보고 쿼리하려는 목록에 대한 캐시 덤프가 생성되는 목록에 대한 캐시 미스가 없는지 확인합니다.

서버 측에서 클라이언트 측으로 쿼리를 변경하여 해결할 수 있습니다.올바르게 클라이언트 측 쿼리를 회상하면 쿼리를 실행하기 전에 전체 목록을 가져 오는 경향이 있으므로 매번 캐시 히트를 가져올 수 있습니다.

다른 팁

캐시 미스는 모두 RAM에 저장 될 때 메모리가 충분하지 않아 발생할 수 있습니다.그렇지 않은 경우 대부분의 원인은 캐시 구성으로 수행해야합니다.아래 문서의 Web.config 등에서 MaxSize를 직접 변경하는 것과 같은 개체 캐시에 대해 지정된 다른 설정을 시도해 보겠습니다.

http://technet.microsoft.com./en-us/library/cc770229(v=office.14).aspx

또한 객체 캐시 사용자 계정이 아래 문서에서 언급 된 것과 같이 올바르게 구성되었는지 확인합니다

http://technet.microsoft.com./en-us/library/ff758656(v=office.14).aspx

나는 이것이 캐시 프로파일에이를 부시고 있는지 생각하고 확신하지 못한다. 항목 수정 항목 수정 캐시가 더러워지고 다음 요청이 당신에게 아무것도 제공하지 않는지. 객체가 더 이상 유효하지 않기 때문에 캐시 프로파일 설정으로 살펴보고 재생하십시오. 인트라넷 및 익스트라 넷 또는 익명 에 몇 가지가 있습니다.

SunChero

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top