为了更快的报告和性能分析,我们希望将我们的Web服务器日志插入SQL Server。这将使我们能够在接近实时看到流量模式,问题,放缓。

我们有一个守护程序,可以从加载平衡器中聆听请求/响应事件,并在数据库中插入大量。

但是,我们每天获得约1 GB的日志,我们只需要保留大约一周的时间(至少以这种原始形式)。

存储此数据的最佳方法和删除旧条目的最佳方法是什么?

我们已经谈论过将每天的数据存储在自己的表中,例如 Log_2011_04_07 那天将有所有条目,然后放下最古老的桌子。可以创建一个视图以跨越全天的表,以便于查询。可行吗?

有帮助吗?

解决方案

您应该寻找分区。

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

分区的很酷的事情是,您只有一个表名称(与多个表方法相反),因此您的插入语句仍然是静态的。它可以与每个应用程序一起使用 - 对查询完全透明。您也不必担心如果您最终在每个表上获得不同的索引或统计信息,会发生什么。

您创建一个分区功能,该函数决定如何将表分解为场景后面的多个表。该函数只能采用一个输入参数/字段,在您的情况下,它将是日期字段。该功能可以按日期,周,月或年分解桌子 - 在您的情况下,您需要约会24小时。

然后构建一个使用T-SQL每天交换最后一个分区的SQL Server代理作业。删除成为元数据操作,并且快速燃烧。交换分区,然后将旧的分区放出。

其他提示

6年前,我们开发了一种网络史密临记录产品,使我们能够跟踪用户访问的每次点击。

我们所做的是每次访问时进行大容量记录,并具有计划的守护程序解析,并将数据正常化,以便以后进行进一步查找。一旦解析数据/记录,将其删除以保持数据结构较低。

对于我们的下一个产品,我们将在网站上分别分发批量收集器,然后使用守护程序收集数据并随后通过向批量服务发出命令来清理。

这样,我们可以在不丢失数据的情况下处理“计划的维护”。

关于中心服务器上的清理问题,我们当前的计划是添加“时间戳”,以便在EG之后存档数据。 3个月。

我们认为这就像3D游戏/渲染中的MIP-MAP纹理一样。您获得的近距离,越详细的数据,越远,越“分组”越详细。

因此,在日常的基础上,我们可以观察访问者的模式,但是3个月后,这些数据确实相关,并将数据压缩为更少的细节。

我们还没有决定是否将数据库分解为块,以使“细节级别”分离PR。数据库。但是我们可能会,因为如果我们在同一数据库中存储不同的级别,则存在一些名称问题。

希望您可以将其用于某件事吗?我无法为您提供示例代码作为我们公司产品的一部分。

使用两个列创建另一个表daily_tables:table_name和date_table_created。在创建新的每日表(加载Web日志)的代码中,添加另一个条目以使用创建的表名称和时间戳(当前日期时间)填充Daily_tables表。创建一个SQL代理作业,该作业将每周运行TSQL脚本。 TSQL应从daily_tables中删除所有表格,并使用date_table_created时间戳为7天。

希望这就是您要寻找的:)

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top