'n'日間のWebサーバーログをSQL Serverに保存する方法は?


18

より高速なレポートとパフォーマンス分析のために、WebサーバーのログをSql Serverに挿入します。これにより、ほぼリアルタイムでトラフィックパターン、問題、速度低下を確認できます。

ロードバランサーからの要求/応答イベントとデータベースへの一括挿入をリッスンするデーモンがあります。

ただし、1日あたり約1 GBのログを取得するため、約1週間程度(少なくともこの生の形式で)保持するだけで済みます。

このデータを保存する最良の方法と古いエントリを削除する最良の方法は何ですか?

毎日のデータを独自のテーブルに保存することについて説明しました。たとえば、その日のLog_2011_04_07すべてのエントリを取得し、最も古いテーブルを削除します。クエリを簡単にするために、すべての日テーブルにまたがるビューを作成できます。実行可能ですか?


これは非常によく似た質問ですが、Oracleの場合です。構文は異なりますが、これは日付によるパーティション化の古典的なアプリケーションです。車輪を再発明する必要はありません:
ガイウス

回答:


17

パーティション分割を確認する必要があります。

http://technet.microsoft.com/en-us/library/dd578580%28SQL.100%29.aspx

パーティション化の優れた点は、テーブル名が1つだけであるため(複数テーブルのアプローチとは異なります)、挿入ステートメントは静的なままです。すべてのアプリケーションで動作します-クエリに対して完全に透過的です。また、各テーブルで異なるインデックスまたは統計が発生した場合に何が起こるかを心配する必要はありません。

テーブルをバックグラウンドで複数のテーブルに分割する方法を決定するパーティション関数を作成します。この関数は、1つの入力パラメーター/フィールドのみを使用できます。この場合、日付フィールドになります。この関数は、日付、週、月、または年でテーブルを分割できます-あなたの場合、日付、24時間の期間が必要です。

次に、T-SQLを使用して毎日最後のパーティションをスワップアウトするSQL Serverエージェントジョブを構築します。削除はメタデータ操作になり、非常に高速です。パーティションを交換してから、古いパーティションを削除します。


私はそれを調べます-それは個々のパーティションのドロップを許可するので、削除はすぐに行くことができますか?
ジャロッドディクソン

3
はい、「自動スライドウィンドウパーティション」の概念を具体的に検討する必要があります。SQLServerCentralには、part1part2part3という素晴らしい記事があります。
マリアン

7

6年前に、ユーザーがクリックしたすべてのクリックを追跡できるウェブ統計ロギング製品を開発しました。

私たちがしたことは、あなたが書いたように訪問ごとに記録をブルディングし、スケジュールされたデーモンにログを解析させ、後で検索するためにデータを正規化することでした。データ/レコードが解析されるとすぐに、データ構造を低く保つために削除されました。

製品の次のバージョンでは、Webサイトでバルクコレクターを個別に配布し、デーモンを使用してデータを収集し、その後バルクサービスにコマンドを発行してクリーンアップします。

このようにして、データを失うことなく「スケジュールされた保守」を処理できます。

センターサーバーのクリーンアップの問題に関して、現在の計画では、「タイムスタンプ」を追加して、たとえば 3ヶ月。

これは、3Dゲーム/レンダリングのMIP-MAPテクスチャと同じように考えられています。近づくほど、より詳細なデータ、より遠くに、より「グループ化された」詳細度の低いものになります。

そのため、日々、訪問者のパターンを観察することができますが、3か月後、これらのデータは本当に関連性がなくなり、データをより詳細に圧縮します。

「詳細レベル」の分離されたprを維持するために、データベースをチャンクに分割するかどうかは決めていません。データベース。ただし、同じデータベースに異なるレベルを保存すると、名前付けの問題が発生するため、そうなる可能性があります。

これを何かに使えることを願っていますか?当社の製品の一部としてサンプルコードを提供することはできません。


1

Table_nameとDate_table_createdの2つの列を持つ別のテーブルDaily_tablesを作成します。(Webログをロードする)新しい日次テーブルを作成するコードで、作成したテーブルの名前とタイムスタンプ(現在の日時)をDaily_tablesテーブルに入力する別のエントリを追加します。毎週TSQLスクリプトを実行するSQLエージェントジョブを作成します。TSQLは、7日より古いDate_table_createdタイムスタンプを持つDaily_tablesからすべてのテーブル名(Table_name)を削除する必要があります。

これがあなたが探していたものであることを願っています:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.