2017-11-22 18 views
0

多くのSPのログステップで、エラーログテーブルに何百行も書き込まれ、サーバー上のリソースを使い果たしてしまうSQL DBがあります。 1つの解決策は、ログをメモリに書き込むことでした。ログの数が1000行を超えたら、個々の行を常に書き込むのではなく、ログ表に一括して挿入します。私はCLRの言及を使用していた - 誰もこれを使用する方法について正しい方向に私を指すことができますか?上記の音は実現可能ですか? SPの大規模な数のログ手順は は常にエラー・ログ表に数百行を書き込み、サーバー上のリソースを を使用しているところテーブルにではなくメモリにSQLデータを書き込む

+0

ので、thew実際の質問は何ですか?オンメモリ構造の使い方 – apomene

+1

ログが異なるストアドプロシージャからのものである場合、一括挿入を使用する方法 –

+0

提案はメモリ内のすべてのログをバッファリングし、そこにcritcal量があると一括してテーブルに挿入されます - アイデアは常にすべてを書き込むのではなく彼らが今私たちはそれらをロードし、バッチで送信する時間。 – andyc209

答えて

0

は私がSQL DBを持っています。一つの解決策は、メモリへとログカウントはその後、あなたは既にメモリに書き込むログテーブル

にこれを挿入 を一括1000行を超えていた後 ログを書き込むようにことを示唆しました。あなたがテーブルに何かを書くとき、あなたは決してディスクに疲れません。すべての操作はメモリ内で行われます。そして、たまには、SQL Serverによって汚れた(変更された)ページがディスクにフラッシュされます。これらの瞬間はcheckpontsです:パフォーマンス上の理由から

、データベースエンジンは、メモリ内のバッファ・キャッシュで データベースページに修正を行い - そして、すべての変更後、ディスクにこれらの ページを書き込みません。むしろ、データベースエンジン は、定期的に各データベースにチェックポイントを発行します。チェックポイントは、メモリからディスクへのトランザクションログ情報 と、トランザクションログに関する情報 を記録します(ダーティページと呼ばれる)現在のメモリ内の変更されたページ(ダーティページ)と トランザクションログ情報を書き込みます。

リンク:Database Checkpoints (SQL Server)

+0

返信ありがとうございます - これは可能だと思いますか?私はそれをよりうまく説明しようとしています - 各SP内のアクティビティテーブルのキーステップに書き込むSPのロードがあります。 '新しいクライアントを処理し、日付と時刻を追加すると、何千もの行が書き込まれ、サーバー上でパフォーマンスの問題が発生する - チェックポイントを使用してこのデータにフラグを立て、サーバーまたはトリガーとSPを構成して、データの重大な量に達するので、常にテーブルに書き込むのではなく、メモリ上にデータを格納する - ありがとう – andyc209

+0

あなたは間違った方向を見ている。あなたの問題は、サーバーがディスクに書き込むのではなく、繰り返します。すべての挿入物がメモリ上で実行されています。実際のボトルネックは何かを確認する必要があります。たとえば、sys.dm_os_waiting_tasksを使用して待機時間を確認します – sepupic

関連する問題