3

SQLServer2008でenable_brokerをSQLDepndencyを使用するように設定しました

次のように、キャッシュ領域でSyscache2を使用するように.Netアプリを構成しました。

  <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>

私のHbmファイルは次のようになります。

<?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>

BlogEntryに対するクエリに対してクエリキャッシュも有効にしています

最初にクエリを実行すると、予想どおり、結果は2次キャッシュにキャッシュされます。

ここでblog_entriesの行を変更すると、すべてが期待どおりに機能し、キャッシュの有効期限が切れます。次のメッセージが表示されます。

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

私はそれを期待しています。次のページのリクエストで、クエリとその結果がキャッシュに保存されます。ただし、それ以上何も変更されていなくても、キャッシュはすぐに再び無効になります。

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

基になるデータに変更を加えることなく、キャッシュはその後毎回常に無効になります。アプリケーションを再起動するだけで、キャッシュを再び動作させることができますが、データが最初にキャッシュされたときだけです(ここでも、キャッシュが最初にダーティになると、キャッシュが再び機能しなくなります)

誰かがこの問題を見たり、これが何であるかについて何か考えを持っていますか?syscache2はSQLDependencyonChangeイベントを処理する必要があると考えていましたが、これはおそらく実行されています。そのため、SQLServerがSQLDependencydepedencyChangedを送信し続ける理由がわかりません。

ありがとう

4

1 に答える 1

0

1 つのデータベース インスタンスで同じ問題が発生していますが、他のインスタンスでは発生していません。どちらの場合もまったく同じ NHibernate 構成が使用されているため、データベース側である種の権限の問題であることは間違いないようです。

動作中のケースでは、キャッシュは期待どおりに動作しますが、他のケース (より厳密な権限を持つデータベース エンジン) では、あなたが言及したのとまったく同じ動作が得られます。

于 2010-03-29T15:13:59.563 に答える