登录SQL是一种不好的做法吗?

时间:2012-06-14 17:41:14

标签: sql tsql logging

我在一家电子商务公司工作。我们的DBA最近告诉我,使用SQL进行日志记录是一种不好的做法,并建议使用平面文件和grepping。我以前从来没有听说过登录SQL是一种不好的做法,我在网上找不到任何证实这一点的内容。

当我说日志记录时,我的意思是记录用户操作,如登录,更改帐户信息等,以及用户代理,IP地址,帐户ID和事件信息等数据。

虽然随着时间的推移会导致很多行,但如果客户出现问题,它会非常容易搜索。

登录SQL是一种不好的做法,是否更适合登录文件?

感谢。

5 个答案:

答案 0 :(得分:3)

这样做的唯一问题是数据库负载增加和磁盘空间增加。除此之外,没有什么能阻止你这样做。实际上,能够查询日志并使其一致且易于备份非常方便。

与平面文件相比,您可以使用SQL在日志中添加更多结构。例如,您可以拥有以下列:

  • ID
  • 日期时间
  • EVENTCODE
  • 消息
  • 计算机名
  • HttpRequestID
  • 用户名
  • 用户ID
  • AdditionalDataXML:包含有关事件的结构化数据的可查询XML列

非常方便。我推荐它。

为什么你的DBA会抗拒?嗯,他没有任何缺点说你。他没有得到一个好的记录表的好处。但他必须坚持下去。激励措施是不对称的。

作为缓解措施,您可以每晚TRUNCATE TABLE清除日志项。也许在这之前导出它们(bcp.exe)。

答案 1 :(得分:3)

也许他指的是使用触发器来记录as bad practice。触发器可能会导致很多意想不到的效果,并且可能被认为是不好的做法。

除此之外,SQL通常用作日志的存储,因此(如果你有足够的存储空间),这没有任何问题。

答案 2 :(得分:3)

存在交易问题。日志记录将成为事务的一部分,因此如果它被回滚,日志也会消失。

要使用SQL登录,您需要设置一个单独的DBMS会话,这会使事情变得更复杂。 Flatfiles没有交易。它们也(合理地)在磁盘满载条件下优雅地失败。您可以管理(清除)它们而不会干扰交易。

而且,由于日志记录基本上是 instrumentation ,因此最好不要过多地干扰被监控的进程。

最后:如果你真的想要SQL的易用性,你总是可以选择将flatfiles重新导入到DBMS表中。在单独的交易中。

BTW:上述答案与维护历史无关。这是一个完全不同的球赛,应该被视为DBMS +应用程序的一部分。

答案 3 :(得分:3)

看起来您的DBA宁愿将所有日志记录(SQL或应用程序)转到平面文件以使用grep。我完全不同意。我个人认为SQL比使用grep更容易搜索。条款

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

比从grep获得的任何内容更容易编写和更快地检索(假设索引)。

Microsoft认为日志记录对数据库不利,他们的企业库支持它: http://msdn.microsoft.com/en-us/library/ff664543(v=pandp.50).aspx

IIS也支持它,大多数主要的日志库都包括数据库支持。

存储问题本身不一定是个问题,您要么在应用程序中登录到文件,要么登录到数据库中的DB文件。我看到的主要问题是,当您进行交易时,它是否变得非常昂贵,并且如上所述,回滚事务导致回滚日志记录的问题。

答案 4 :(得分:0)

我之前没有听说它被描述为“不良做法”,你总是可以设置一份工作来清除某个年龄段的记录(例如,我们只保留上个月的日志值)。我想这也取决于谁将查看日志,因为并非所有应用程序支持人员都知道SQL,而他们可以轻松读取文本文件。