1

私はSQLですべてのものを記録しようとしているので、名前付きのテーブルを追加し、そのlog中にすべてのものを追加すると考えてlogください。テーブルは次のとおりです。

  • ID一意識別子 -- PK
  • LogDate日時 PK
  • IPNVARCHAR
  • ActionNVARCHAR
  • InfoXML
  • UniqueIDBIGINT

ログイン、権限の確認、ページの表示、オブジェクトへのアクセス、..などのすべてをこのテーブルに記録します

次に、いくつかのログ復元の 実装も必要であると考えました. いくつかのログレコードは復元可能で, いくつかはそうではありません.Logテーブルには約 800 万個のレコードがありますが, 復元可能なレコードは約 20 万です. したがって, 復元する必要があるたびに, する必要があります. 800 万を選択してから、新しいテーブルを追加し、この新しいテーブルに復元可能なログを追加することにしました: log_restore:

  • ID一意識別子
  • LogDate日付時刻
  • IPNVARCHAR
  • ActionNVARCHAR
  • InfoXML
  • UniqueIDBIGINT -- PK

必要なときにOK すべてをログに記録するのは問題ありません。

しかし、ログを表示する必要がある場合: この手順では、テーブルからすべてのレコードを取得し、logそれらをテーブルとマージ (結合) しlog_restoreます。

したがって、挿入に影響を与えずにこの手順を加速する必要があります(遅くしないことを意味します)、これが私の考えです:

  1. レコードをlog_restore追加してlogテーブルに追加する場合も (したがって、select ではユニオンする必要はありません)

  2. この選択コマンドでビューを作成

  3. XML の代わりに単純な DataType 列を追加する

  4. 単純な DataType 列にクラスター化された PK を追加BIGINT

あなたのアイデアは何ですか?なにか提案を?

4

4 に答える 4

1

最初に心配する必要があるのは、マシンのメモリです。サーバーにはどのくらいありますか? 次に、データベースのサイズ、または作業中のテーブルのサイズと比較する必要があります。テーブルのサイズに比べてメモリが少なすぎる場合は、サーバーにメモリを追加する必要があります。それがあなたがしなければならない最初のことです。

システム管理者向け Microsoft SQL Server メモリ ガイド

于 2013-06-26T13:48:53.400 に答える
1

何かが「復元可能」であるかどうかを識別するプロパティがAction列であるというワイルドな推測を行います。その場合は、その列でテーブルを分割し、テーブルのことは忘れてlog_restoreください。

MSDN -パーティション テーブルとインデックスの概念

于 2013-06-25T21:34:55.763 に答える