問題タブ [sqlcachedependency]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - キャッシュ無効化通知 SqlCacheDependency
ASP.NET アプリケーション (ASP.NET 3.5、SQL 2008) で参照データの SQL キャッシュ依存関係を作成しようとしています。aspnet_regiis ユーティリティを使用して、データベースといくつかのテーブルの SQL キャッシュを有効にしました。必要な sqlcachedependency エントリを web.config に作成しました。application_start イベントに次のコードを追加しました
DateTime dt = DateTime.Now;
コールバック関数 RefreshProducts でデータベースからデータをリロードします。
何らかの理由で、テーブルのデータを変更するときにコールバック関数を呼び出すことができません。実行時エラーは発生しません。AspNet_SqlCacheQueryRegisteredTablesStoredProcedure から、テーブルのキャッシュが有効になっていることがわかります。sqldependency をファイルの依存関係に置き換えて、残りのコードをテストしました。ファイルを変更すると、コールバック関数がすぐに呼び出されたので、私の間違いはおそらく sqlcachedependency の設定にあります。
ありがとう
asp.net-mvc - SQLServerOutputCacheオブジェクトが削除されたか作成されなかった
このプロジェクトでは、MVC-3を使用しており、出力キャッシュ属性と適切な参照がweb.configにあり、できればglobal.asax(下記)にあります。共有ホスティングから本番環境を実行していて、管理者としてaspnet_regsqlを実行して適切なオブジェクトを作成できないため、AspNet_SqlCacheTablesForChangeNotificationテーブル、SP、およびトリガーを開発ボックスからコピーしてデータベースをセットアップしました。
一般的に、すべてがうまく機能しますが、約2〜3日に1回、すべてのキャッシュデータベースオブジェクトが削除され、アプリの起動時に再作成されないことがわかりました。(ホスティング共同スクリプトはそれらを削除していません)。
サイトを再び機能させるために、データベースオブジェクトを手動でコピーしてバックアップすることになります。
オブジェクトを削除したり、オブジェクトを自動的に作成したりできないようにするにはどうすればよいですか?
global.asaxでの私のアプリの起動は次のようになります。
そして私のアプリの終わりは次のようになります:
web.configエントリは次のようになります。
asp.net-mvc-3 - 他のアプリケーションからHttpRuntime.Cacheアイテムを削除します
db内のオブジェクトを操作する管理アプリケーションと、主にこれらのオブジェクトを表示するためのパブリックasp.netmvcアプリケーションがあります。
HttpRuntime.Cacheを使用する、いくつかのオブジェクトの単純なキャッシュを実装しました。
管理アプリケーションからパブリックアプリケーションのキャッシュの一部を無効にしたい。
最も簡単な解決策は、呼び出されたときにキャッシュ内のすべてのレコードをクリアするClearCache()アクションを作成することでした。
しかし、キャッシュの依存関係を使用するキャッシュを利用する方が良いのではないでしょうか。どちらをどのように使用するのが最適かわかりません。SQLの依存関係について考えていましたが、SQLクエリをスキップするためにキャッシュを実行しているため、これが高速かどうかはわかりません。
SQLキャッシュの依存関係のチェックは遅いですか?多くの場合、キャッシュされたオブジェクトを使用したいのですが、毎回SQLの依存関係をチェックするのはよくありません。
.net - SqlDependency/SqlCacheDependencyに関するいくつかの質問
クリアしたい質問がいくつかあります
SqlDependencyまたはSqlCacheDependencyを使用して、データベース内で変更された特定のデータ項目を見つけることができますか?
現在、キャッシュの値を定期的にチェックするバックグラウンドスレッドを使用して、SqlCacheDependencyを使用しています。キャッシュがnullの場合、データベースからデータを読み取り、キャッシュに挿入します。キャッシュを定期的にポーリングするためにバックグラウンドスレッドを使用するよりも、それを行うためのより良い方法はありますか?
私が正しく理解していれば、SqlDependencyはコマンドの依存関係を持つことで機能します。通知が発生すると、onchangeeventが発生します。イベントハンドラーで、依存関係の登録を解除し、新しい依存関係を作成します。このOnchangeeventハンドラーの他の目的はありますか?たとえば、どのアイテムが変更されたかを確認したり、ここから新しいデータをクライアントにプッシュしたりできますか?
SqlCacheDependencyを使用すると、キャッシュを定期的にポーリングする必要があると思います。sqlDependencyを使用すると、ポーリングする必要はまったくありません。これは本当ですか ?
前もって感謝します
sql-server-2008 - NHibernate + SysCache2+SqlCacheDependency-アプリケーションでキャッシュが無効にならない
OR / MおよびデータアクセスにNHibernateを使用し、NHibernateの第2レベルキャッシュにSysCache2を使用し、基盤となるキャッシュ無効化ロジックにSqlCacheDependencyを使用する基本的なMVCアプリケーションがあります。すべてが正しくセットアップされており(要求された場合は詳細を追加できます)、アプリケーション側でアイテムがキャッシュされていることがわかります。
ただし、データベーステーブルのアイテムを直接更新すると、更新がSqlCacheDependencyを介してアプリケーションに返送されたり、NHibernateのSysCache2に返送されたりすることはありません。そのため、データはデータベースで更新されており、アプリケーションのキャッシュにあるものとは異なります(NHibernate with SysCache2)。
[AspNet_SqlCacheTablesForChangeNotification]テーブルで増分する正しいドメインテーブルに相関する[changeId]列の値を確認できるので、SQLServiceBrokerが正しくセットアップおよび構成されていることをかなり確信しています。SQL Profilerを使用してデータベースをプロファイリングすると、キュー、サービス、およびsprocのセットアップ呼び出しと、監視のためのBEGINCONVERSATION呼び出しを確認できます。
次に何をチェックすればよいかよくわかりません。誰かが以前にこの問題を抱えたことはありますか?解決策は何でしたか?
.net - SqlCacheDependencyは、テーブル内のデータが変更されたときにリスナーに通信するタイミングをどのように認識しますか?
私はいくつかの調査を行っており、このシステムの配管のほとんどを見ることができますが、たとえば、テーブル内のデータが変更されたときに、SQLサーバーがリスナー(アプリケーション)にメッセージを返すタイミングをどのように認識しているかわかりません。まず、迷子になるまでの理解内容を説明します。
1)データベースでService Brokerを有効にし、いくつかの権限を設定する必要があります。
2)データベーススキーマをデプロイする必要があります。
3)aspnet_regsql.exeを使用して、データベースとデータをキャッシュする必要のあるテーブルのSQLキャッシュ依存関係を有効にします(この手順では、変更を追跡するテーブルと、変更をキャプチャしてそのテーブルの値をインクリメントするテーブルのトリガーを作成します)。
4).netアプリケーションでSQLキャッシュの依存関係を設定します。たとえば、Webアプリでは、ポーリング時間、接続文字列などの構成値を追加する必要があります。global.asax.csで依存関係を開始/停止し、キャッシュにアイテムを追加するときにSQLキャッシュの依存関係を追加します。
4a)依存関係を開始するときに発生することの一部は、インフラストラクチャがキュー、サービス、およびその後の通信とクリーンアップのためのsproc用にセットアップされることです。SQL Query Profilerを使用すると、アプリケーションがSQLサーバーからメッセージを受信するために、接続が確立され、通信チャネルがサービスに設定されていることを確認できます。
5)ここで私は混乱します。この時点で、基になるテーブルへのSQLキャッシュの依存関係を参照して、アプリケーションキャッシュにアイテムをキャッシュしました。これにより、行が変更された場合にアプリが変更を受け取ることができます。その行で手動で更新を実行すると、トリガーがヒットし、追跡テーブルの値が1ずつ増加していることがわかります。ただし、アプリケーションに戻る通信は表示されず、SQLクエリプロファイラーにも何も表示されません。キャッシュから削除されたアイテムです。また、データベースのキューには何も表示されません(動的アプリケーションキューも標準エラー/送信キューも表示されません)
私の質問は、データベース内のその追跡テーブルを監視して、このデータの変更を懸念するSQL依存関係にメッセージを送り返すことができるようにすることです。
どんな助けでも大歓迎です...私は多くのオンラインリファレンスを精査してきましたが、これについての具体的な説明を見つけることができません。
c# - SqlCacheDependency & カスタム テーブルの変更
API とデータベースを介したリクエストの作成を測定すると、キャッシングの独自の実装のパフォーマンス率が非常に低いサードパーティを使用しています。彼らのデータベース (Sql Sever 2005 - 互換モードで実行されているため、実際には 2000 db であると考えられます) は、2 つの列を持つテーブルがあるという意味で SqlCacheDependency と同じプリンシパルを使用します。
- テーブル名
- 変更回数
変更カウントをログに記録するこのカスタム テーブルを更新するテーブルのトリガー。
サードパーティのキャッシュを捨てて、独自のソリューションを実装することを考えています。Asp.NET 3.5 で SqlCacheDependency を使用する
自動化された AspNet_SqlCacheTablesForChangeNotification を作成するテーブルなどを有効にして、関連するすべての sp、トリガーなどを使用するのではなく、既存のデータ構造を使用します。
私の質問は、SqlCacheDependency を装備して、AspNet_SqlCacheTablesForChangeNotification と関連するストアド プロシージャを調べるのではなく、データベースで既に定義されているカスタム テーブルを調べることは可能ですか?
asp.net - 変更通知のキャッシュ テーブルの ChangeId をリセットできますか
テーブルの changeId 値をリセットするとどうなりますか
行の 1 つは現在 2.x 億に達しており、更新は失敗しています。タイプを BigInt に変更しようとしましたが、それを読み取るアプリケーションが失敗しています。これらを 0 にリセットする必要があります。よろしいですか? 問題はありますか?
asp.net - SqlCacheDependency が原因で SQL Server の CPU 使用率が高くなる
サイトがダウンして再起動されるまで、CPU 使用率が 100% に跳ね上がり、100% のままになるという問題が発生しています。コードを調べて、可能な限りすべてを最適化しましたが、これはまだ起こっています。
キャッシュで行うことは、SQL サーバーから構造全体 (最大 6000 行) をロードするクエリを実行し、それをキャッシュに格納し、そのキャッシュをクエリして、アプリケーションの残りの部分全体で実行する必要があるさまざまな操作を実行することです (データに対して実行する必要がある多くの再帰操作が必要であり、それ以外の場合は SQL サーバーに大きな打撃を与える可能性があります)。
上記の説明は、SQL キャッシュの依存関係を使用すると、SQL サーバーで CPU スパイクが発生するように思われるためです。無効にすると、同じ量のデータをキャッシュしていても、(SQL サーバーまたは Web サーバーで) スパイクは発生しなくなります。
SQLキャッシュの依存関係がこのような動作を引き起こす可能性があることを知っている人はいますか? 使用する SQL サーバーは SQL Server 2008 R2 です。Web サーバーは IIS 7.5 で、ASP.NET 3.5 を使用しました。この Web サーバーはクラスター (x2) として設定されており、両方とも同じ SQL サーバーを指しています。
これは、キャッシュをロード/セットアップするコードです。
c# - SqlDependency.Start ファイルの自動命名データベースをアタッチしようとして失敗しました
App_DataフォルダーにNORTHWND.LOGとともにNORTHWND.mdfのコピーを取得しました
私の接続文字列:
接続を開いたり閉じたりしようとすると、すべてうまくいきます。
このコードの横に、コードを配置するときにページに SqlCacheDependency を追加したい: msdn に表示
次のエラーが表示されます:
ファイル C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\NORTHWND.mdf の自動名前付きデータベースをアタッチしようとして失敗しました。同じ名前のデータベースが存在するか、指定されたファイルを開くことができないか、ファイルが UNC 共有にあります。
なぜこれが起こるのか、SqlCacheDependency が機能するために何を設定する必要がありますか。
前もってエランに感謝します。
さらに、接続文字列を特定の文字列に変更する場合は、それを追加したいと思います
すべてが正常に機能しますが、ユーザーが接続文字列を自分のパスに変更することを期待していないため、それは間違っているようです.作業:
この問題に光を当ててください。これを可能にする構成が必要です。前もって感謝します。エラン。