3

私はeコマース会社で働いています。私たちのDBAは最近、ロギングにSQLを使用することは悪い習慣であると私に言い、代わりにフラットファイルとgreppingを推奨しました。SQLへのログインが悪い習慣だとは聞いたことがなく、これを確認するものはオンラインで見つかりません。

ロギングとは、サインイン、アカウント情報の変更などのユーザーアクションと、ユーザーエージェント、IPアドレス、アカウントID、イベント情報などのデータをログに記録することを意味します。

時間の経過とともに多くの行が表示されますが、顧客に問題があるかどうかを非常に簡単に検索できます。

SQLへのログインは悪い習慣ですか?ファイルにログインすることをお勧めしますか?

ありがとう。

4

5 に答える 5

3

トランザクションの問題があります。ロギングはトランザクションの一部になるため、ロールバックするとログも失われます。

SQL にログインするには、別の DBMS セッションを設定する必要がありますが、これは事態をさらに複雑にします。フラットファイルにはトランザクションがありません。また、ディスクがいっぱいの状態では (合理的に) 正常に失敗します。また、トランザクションに干渉することなく、それらを管理 (パージ) できます。

そして、ロギングは基本的にインストルメンテーションであるため、監視対象のプロセスに必要以上に干渉しないようにするとよいでしょう。

最後に、SQL の使いやすさが本当に必要な場合は、いつでもフラットファイルを DBMS テーブルに再インポートすることを選択できます。別のトランザクションで。

ところで:上記の答えは履歴を維持することではありません。これは、DBMS+ アプリケーションの一部と見なすべきまったく別の球技です。

于 2012-06-14T17:59:01.450 に答える
3

DBA は、すべてのログ (SQL またはアプリケーション) をフラット ファイルに移動して、grep を使用したいと考えているようです。私は完全に同意しません。個人的には、SQL は grep を使用するよりもはるかに簡単に検索できると思います。条項

  WHERE event_time BETWEEN '1/1/2012 1:00AM' AND '1/1/2012 1:10AM'

grep から取得するものよりも、はるかに簡単に記述でき、取得も高速です (インデックス作成を想定)。

Microsoft は、ロギングが DB にとって悪いとは考えていません。Enterprise Library はそれをサポートしています: http://msdn.microsoft.com/en-us/library/ff664543(v=pandp.50).aspx

また、IIS も同様にサポートしており、ほとんどの主要なログ ライブラリにはデータベース サポートが含まれています。

ストレージの問題は必ずしもそれ自体の問題ではありません。アプリ内のファイルにログを記録するか、DB 内の DB ファイルにログを記録します。私が目にする主な問題は、トランザクションを実行している間に法外にコストがかかるかどうかと、前述のように、ロールバックされたトランザクションによってログがロールバックされるという問題です。

于 2012-06-14T19:47:59.213 に答える
3

おそらく彼は、ロギングにトリガーを使用することを悪い習慣として言及していたのでしょう。トリガーは多くの予期しない影響を引き起こす可能性があり、悪い習慣と見なすことができます。

それ以外は、SQL はログのストレージとして一般的に使用されるため、(十分なストレージがある場合) これに問題はありません。

于 2012-06-14T17:44:47.803 に答える
3

これを行うことによる唯一の問題は、データベースの負荷が増加し、ディスク容量が増加することです。それを除けば、あなたがそれをするのを妨げるものは何もありません。実際、ログにクエリを実行し、一貫性があり、簡単にバックアップできることは非常に便利です。

フラット ファイルと比較して、SQL を使用すると、ログにもう少し構造を追加できます。たとえば、次の列を持つことができます。

  • ID
  • 日付時刻
  • イベントコード
  • メッセージ
  • マシン名
  • HttpRequestID
  • ユーザー名
  • ユーザーID
  • AdditionalDataXML: イベントに関する構造化データを含むクエリ可能な XML 列

とても便利。私はそれをお勧めします。

DBA が抵抗するのはなぜですか? まあ、彼にはあなたにそれについて話すという欠点はありません。彼は、優れたログ テーブルを持つことの利点を得ていません。しかし、彼はそれを維持する必要があります。インセンティブは非対称です。

TRUNCATE TABLE緩和策として、ログ項目を毎晩クリアすることができます。それを行う前にそれらをエクスポートするかもしれません(bcp.exe)。

于 2012-06-14T17:44:31.237 に答える
0

これが「悪しき習慣」であるとは聞いたことがありません。特定の期間を過ぎたレコードを消去するジョブをいつでも設定できます (たとえば、先月分のログのみを保持します)。すべてのアプリケーション サポート スタッフが SQL を知っているわけではなく、テキスト ファイルを簡単に読むことができるわけではないため、誰がログを表示するかにもよると思います。

于 2012-06-14T17:53:35.020 に答える