Jar*_*xon 18 sql-server-2008 sql-server logs web-server
为了更快的报告和性能分析,我们希望将我们的 Web 服务器日志插入到 Sql Server 中。这将使我们能够近乎实时地查看流量模式、问题和减速情况。
我们有一个守护进程,它监听来自负载均衡器的请求/响应事件并批量插入数据库。
但是,我们每天会获得大约 1 GB 的日志,而且我们只需要保留大约一周的时间(至少以这种原始形式)。
存储这些数据的最佳方法是什么,删除旧条目的最佳方法是什么?
我们已经讨论过将每天的数据存储在它自己的表中,例如,Log_2011_04_07将拥有当天的所有条目,然后删除最旧的表。可以创建一个视图来跨越所有日表,以便于查询。可行吗?
SQL*_*tar 17
你应该看看分区。
http://technet.microsoft.com/en-us/library/dd578580%28SQL.100%29.aspx
分区很酷的一点是您只有一个表名(与多表方法相反),因此您的插入语句保持静态。它适用于每个应用程序 - 它对查询完全透明。如果您最终在每个表上使用不同的索引或统计信息,您也不必担心会发生什么。
您创建了一个分区函数,该函数决定如何在幕后将表分解为多个表。该函数只能采用一个输入参数/字段,在您的情况下,它将是一个日期字段。该函数可以按日期、周、月或年拆分表格 - 在您的情况下,您需要日期、24 小时制。
然后构建一个 SQL Server 代理作业,每天使用 T-SQL 换出最后一个分区。删除成为元数据操作,而且速度非常快。交换分区,然后删除旧分区。
小智 7
我们在 6 年前开发了一个网络统计日志产品,它允许我们跟踪用户访问的每次点击。
我们所做的是在您编写时记录每次访问,并让预定的守护程序解析日志并规范化数据以供以后进一步查找。一旦数据/记录被解析,它就会被删除以保持数据结构低。
对于我们下一个版本的产品,我们将在网站上单独分发批量收集器,然后使用守护程序收集数据,然后通过向批量服务发出命令进行清理。
这样我们就可以在不丢失数据的情况下处理“计划维护”。
关于中心服务器上的清理问题,我们目前的计划是添加“时间戳”以便能够在例如之后存档数据。3个月。
我们认为这就像 3D 游戏/渲染中的 MIP-MAP 纹理。离得越近,数据越详细,离得越远,越“分组”,越不详细。
因此,每天,我们可以观察访问者模式,但 3 个月后这些数据不再相关,我们将数据压缩为较少的细节。
我们还没有决定是否将数据库分成多个块,以保持“详细级别”分离的 pr。数据库。但是我们可能会,因为如果我们在同一个数据库中存储不同的级别,就会存在一些命名问题。
希望你能用它来做点什么?我无法为您提供示例代码作为我们公司产品的一部分。