2011-02-09 12 views
2

データベースへのトランザクションのバッチを書き込むために、Ehcache書き込みビハインドキャッシュを使用しようとしています。私が必要とするのは、write-behindキャッシュがトランザクションを5秒間隔で(またはより頻繁に)ダンプすることです。Ehcache書き込みビハインドキャッシングスレッド優先度

私は可能性として試してみるので、私は何かが欠けているに違いありません、それは動作しません。私はwrite-behindキャッシングを設定し、サーバーに負荷をかけます。数千回のトランザクション、その後数十万回のトランザクションが発生し、数分待ってもデータベースには何も残っていません。キャッシュがデータベースへの書き込みを開始するサーバー上の負荷をシャットダウンするまではありません。

これはスレッド優先度に問題がありますか?サーバーに負荷がかかっていてもDB書き込みを実行するようにEhcacheを変更する方法はありますか?

<cache name="server.db.model.Request" 
maxElementsInMemory="10000" 
eternal="false" 
timeToIdleSeconds="5" 
timeToLiveSeconds="5" 
overflowToDisk="false" 
memoryStoreEvictionPolicy="FIFO"> 
    <cacheWriter writeMode="write_behind" maxWriteDelay="5" rateLimitPerSecond="5" 
    writeCoalescing="true" writeBatching="true" writeBatchSize="5000" 
    retryAttempts="2" retryAttemptDelaySeconds="10"> 
     <cacheWriterFactory class="server.db.util.RequestCacheWriterFactory"/> 
    </cacheWriter> 
</cache> 

ありがとう:

はここに私の構成です。

答えて

0

最後に、私の設定をこれに変更すると効果がありますが、どのパラメータの変更によって違いが生じたのかまだ分かりません。

<cache name="server.db.model.Request" 
    maxElementsInMemory="10000" 
    maxElementsOnDisk="0" 
    eternal="false" 
    timeToIdleSeconds="5" 
    timeToLiveSeconds="5"> 
     <cacheWriter writeMode="write_behind" maxWriteDelay="5" 
     writeCoalescing="false" writeBatching="true" writeBatchSize="5000" 
     retryAttempts="2" retryAttemptDelaySeconds="10" 
     notifyListenersOnException="false" writeBehindMaxQueueSize="10000" 
     writeBehindConcurrency="10" > 
     <cacheWriterFactory class="server.db.util.RequestCacheWriterFactory" /> 
     </cacheWriter> 
</cache> 
0

うん...それは本当に奇妙です。私たちは広範なテストを行ってきましたが、決してCPU時間を得られないライタースレッドを経験したことはありません。どのOSを実行していますか? CacheManagerを作成しているスレッドの優先度を下げていますか?

また、明白なことを聞​​いて申し訳ありませんが、負荷を「シャットダウン」すると、その意味は何ですか?アプリケーション(とCacheManager)をシャットダウンしないでください。基本的には、「トランザクションの境界設定はwriteAll/deleteAllメソッド内で行われますか」...

これは、休止状態でタグ付けされているため、休止状態では書込みを構成しませんでした第2レベルのキャッシュの権利ですか?それはちょうど間違ったタグですね。

+0

これはLinux/Tomcat環境にあります。明示的にスレッド優先順位をどこに設定していません。負荷をシャットダウンすると、サーバーにヒットするために使用しているjMeterスレッドをシャットダウンすることになります。最後に、ehcacheのドキュメント、http://ehcache.org/documentation/hibernate.htmlに従って、私たちはhibernateを使用しています。奇妙なことに、サーバー上の負荷をシャットダウンしても、データベースへの書き込みが開始されるまでに5分ほど待たなければなりません。ご協力いただきありがとうございます。 – Tinclon

+0

私は混乱しているので、server.db.model.Requestは休止状態のデータを保持していますか?私はあなたが休止状態のキャッシュでehcache write-behindを使用すべきではないことを知っているのですか?また、どのバージョンを使用していますか?また、それはehcacheスタンドアロンの権利ですか?テラコッタが集まっていない... –