2012-01-04 13 views
2

これは愚かな質問かもしれませんが、データベースからすべての期限切れの「セッション」を15分ごとに削除することをお勧めしますか?期限切れの後にデータベースからセッションを削除しますか?

それとも、そこにそれを残しますか?セッションはX分後に終了し、もはや役に立たなくなり、スペースを占有しているように見えますか?

答えて

2

のように、我々は単に毎晩期限切れのセッションをクリーンアップするためにSQL Serverエージェントとジョブを作成(またはいくつかの適切な間隔で)。

あなたがトラフィックを大量に持っていない限り、それは未使用のセッションを削除瞬時に気にすることなく、都合の良いときあなたがこれを行うことができますが、間違いなくクリーンアップすることをお勧めします。

+0

ありがとうございます!ええはピーク時に掃除するのが最善かもしれません。 Btwはレコードが削除されるとデータベース自体を縮小しますか? – 001

+1

DBのパフォーマンスが重要な場合は、本番データベースでDBCC SHRINKFILEを実行しないでください。データベースファイルを縮小すると、ファイルが大きくなったときにファイルが連続していないため、ディスクシークが増えます。また、ファイルを増やすプロセスはかなり高価です。 – RickNZ

0

あなたのテーブルには、その

SessionId datatype, 
SessionLastTouch datetime 

のように見える場合は、新しいセッションを登録するときに、このように、テーブルに(セッションの問題やタッチ)を書いた後、いくつかのクリーンアップを実行します。

delete from YourSessionsRegister WHERE SessionLastTouch < DATEADD(min, -15, GETDATE()) 

BUTピーク時間でDBの負荷を軽減する - - シム

は、方法は、クリーンアップにいくつかのスケジュールに基づいてセッション・レジスタである方が良いかもしれプライを作成してジョブを作成します。ジョブは、毎晩、または毎晩レジスタをクリーンアップします。私のチームは、.NETアプリケーションでSQL Serverセッション状態を配備し、この

1

あなたは、標準のSQL Serverのセッション状態を使用している場合は、古いセッションは自動的に削除されます。古いエントリが削除されるまで、プロバイダはセッションテーブルのExpiresカラムをアクティブに監視しないため、セッションは期限切れになりません。

インストール/設定ユーティリティは、60秒ごとにDeleteExpiredSessionsストアドプロシージャを呼び出すSQLエージェントジョブを作成します。つまり、セッションの有効期限が切れ、テーブルがクリーンアップされるためには、SQL Agentを実行する必要があります。

+0

こんにちは@RickNZ。これは恐ろしい動作で、私たちはシステムに気付き、痛いです!データベースから物理的に削除されたセッション・エントリに頼るのではなく、より予期された方法で機能する修正プログラムや代替SQLプロバイダがあることを認識していますか? –

+0

オープンソースの代替SQLプロバイダは認識していません。これは標準的なプロバイダの唯一の問題ではないので、私はしばしば大きなプロジェクトではあなた自身の置換プロバイダを書くことを提案しています。私はこれを自分でやった。関係する努力のレベルはあなたが考えるかもしれないほど大きくはなく、パフォーマンスの向上は重要なものになります。 – RickNZ

関連する問題