网上提供的大表统计数据

时间:2013-11-01 13:00:24

标签: asp.net report sql-server-2012 large-data-volumes

我们有一个大型数据表,大约有30 000 0000行,每天增长,目前每天增加10万行,而且这个数字会随着时间的推移而增加。

今天我们直接从数据库生成不同的报告(MS-SQL 2012)并进行大量计算。

问题是这需要时间。我们有索引等等,但今天的人们想要非常快速的报告。

我们还希望能够更改时间段,查看数据的不同方式等等。

我们只需要查看一天前的数据,这样我们就可以从昨天获取所有数据并使用它来加速查询和报告。

所以你们中的任何一个人都对这个解决方案有很好的想法,这个解决方案很快就会在网上而不是excel或BI工具中。

今天所有报告都在asp.net c#webforms中,并且有针对MS SQL 2012表的查询..

1 个答案:

答案 0 :(得分:0)

您有一个OLTP系统。您通常希望在这样的系统上最大化您的吞吐量。报告将需要锁存器和锁来获取数据。这会拖累您的OLTP吞吐量,并且报告(附加索引)的好处将对您的OLTP产生不利影响,因为它会对性能产生负面影响。而且甚至不认为拍打WITH(NOLOCK)会减轻一些负担。 ;)

正如其他人所说,您可能希望将活动数据与报告数据分开。

如果您拥有Enterprise Edition,则对表进行分区可以完成此。否则,您需要做一些像Paritioned Views这样的hackery,根据您的数据访问方式,这些hackery可能适用于您,也可能不适用。

我会看一下定期从系统中提取所需的数据并将其推送到别处。其他地方是同一数据库中的不同表集,还是同一服务器上的不同目录或完全不同的服务器,将取决于大量变量(成本,实施时间,数据复杂性,速度要求,存储子系统等) )。

由于听起来您没有超级特定的报告要求(目前您查看昨天的数据,但看到更多信息等等),我会在报告中实施Columnstore Indexes表。它为查询聚合提供了惊人的性能,即使在聚合表上也具有优势,您无需指定特定的粒度(WTD,MTD,YTD等)。但缺点是它是一个只读数据结构(以及创建索引时的内存和CPU)。 SQL Server 2014将引入可更新的列存储索引,这些索引将是傻瓜,但这已经过了一段时间。