3

나는 다음과 같이 내가 캐시 영역으로 Syscache2를 사용하는 내 닷넷 응용 프로그램을 구성한 SQLDepndencyNHibernate에 SysCache2 및 SQLDependency 문제

를 이용할 수 있도록 SQL Server 2008에서 ENABLE_BROKER 설정 한 :

<syscache2> 
     <cacheRegion name="BlogEntriesCacheRegion" priority="High"> 
     <dependencies> 
      <commands> 
      <add name="BlogEntries" 
       command="Select EntryId from dbo.Blog_Entries where ENABLED=1" 
      /> 
      </commands> 
     </dependencies> 
     </cacheRegion> 
    </syscache2> 

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 

    <class name="BlogEntry" table="Blog_Entries"> 

    <cache usage="nonstrict-read-write" region="BlogEntriesCacheRegion"/> 
    .... 
    </class> 
</hibernate-mapping> 

나는 또한 쿼리 캐싱

블로그 항목에 대한 쿼리를 사용할 수있다 : 내 HBM 파일은 다음과 같다

처음 쿼리 할 때 예상대로 결과가 2 차 캐시에 캐시됩니다.

2010-03-03 12:56:50,583 [7] DEBUG NHibernate.Caches.SysCache2.SysCacheRegion - Cache items for region 'BlogEntriesCacheRegion' have been removed from the cache for the following reason : DependencyChanged 

내가 그 기대 : 지금 가서 blog_entries의 행을 변경하는 경우 예상대로

, 모든 캐시는 그것의이 메시지가 만료되어 작동합니다. 다음 페이지 요청에서 쿼리와 그 결과는 다시 캐시에 저장됩니다. 그러나 아무 것도 변경되지 않았더라도 즉시 캐시가 다시 무효화됩니다.

DEBUG NHibernate.Caches.SysCache2.SysCacheRegion - Cache items for region 'BlogEntriesCacheRegion' have been removed from the cache for the following reason : DependencyChanged 

내 캐시는 기본 데이터를 변경하지 않고 계속해서 무효화됩니다. 응용 프로그램을 다시 시작하면 캐시가 다시 작동 할 수 있지만 데이터가 처음 캐시 될 때만 (다시 캐시가 다시 작동하지 않으므로 다시 작동하지 않습니다.)

이 문제를 본 사람이 있습니까? 어떤 아이디어가 될 수 있을까요? syscache2가 SQLDependency onChange 이벤트를 처리해야한다고 생각 했었습니다. SQL Server가 SQLDependency depedencyChanged를 계속 보내는 이유를 이해할 수 없습니다.

감사

+0

SQL 프로파일 러에서 어떤 일이 일어나는지 확인할 수 있습니까? SQLDependency에는 이상한 권한이 필요합니다. 아마도 그 일과 관련이 있습니까? –

답변

0

우리는하지만 다른 한편으로, 하나 개의 데이터베이스 인스턴스에서 동일한 문제를 얻고있다. 정확히 같은 NHibernate 구성이 두 가지 경우 모두에서 사용되기 때문에 데이터베이스 끝 부분에 어떤 종류의 허가 문제가있는 것 같습니다.

캐시가 정상적으로 작동하면 다른 캐시 (훨씬 엄격한 권한을 가진 데이터베이스 엔진)에서 언급 한 것과 똑같은 동작을합니다.