我们有一个在SQL Server 2008 R2 SE称为AVL数据库。这个数据库有许多表,但有一个在现在有46个永行,占总数据库大小的99.9%,特别是在所谓ASSETLOCATION。SQL Server 2008中的动态跨数据库查看
该表格包含2008年至今的信息,实际增长速度每天约为12万条记录。 现在,有2种情况,我们谈谈:
- 性能也开始慢慢退化,一切 优化,所以没有太多的做
- 备份时间正在增加,并成为一个问题(我们每天备份1个完整的 )。该BAK文件是11GB,winrar的做他的事 最终大小2GB后,然后脚本将文件发送到场外。我们有一个 T1和拉动2GB通过导线走约5小时。
这一切都是正常的,但这里是我想利用的捕获:+ 90%的SQL语句使用的信息只有3个月或更少,换句话说,2008年,2009年和2010年的数据没有得到经常访问。
我正在考虑为每年创建一个新的数据库。比方说: - AVL2008数据库,只有表会有ASSETLOCATION与记录从2008年 - AVL2009数据库,只有表会有ASSETLOCATION与记录从2009年 - AVL2010数据库,只有表会有ASSETLOCATION与记录从2010年
正如你已经猜到了,从过去的数据没有得到改变,所以这将是从备份的角度很大,因为AVL数据库将只能从当年的记录。这种方法也将有助于提高性能。
现在的问题。假设ASSETLOCATION表有以下几列: - IDASSETLOCATION(INT,PK身份) - IDASSET(INT,FK资产表) - 当(日期时间) - 经纬度(VARCHAR(22),空间信息)
我需要在名为“vassetLOCATION”的AVL数据库中创建一个视图,相当简单,但我不希望视图访问所有数据库并通过UNION加入ASSETLOCATION表,而只需要基于WHEN字段。例如:
select * from vASSETLOCATION where [WHEN] between '2008-01-01' and '2008-01-02'
在这种情况下,视图应只能访问AVL2008.ASSETLOCATION表
select * from vASSETLOCATION where [WHEN] between '2008-12-29' and '2009-01-05'
在这种情况下,视图应该访问AVL2008.ASSETLOCATION和AVL2009.ASSETLOCATION
select * from vASSETLOCATION where
([WHEN] between '2008-01-01' and '2008-01-01')
or
([WHEN] = getdate())
在这种情况下,视图应该访问AVL2008.ASSETLOCATION和AVL.ASSETLOCATION
我知道一个表标量UDF代替视图将解决问题,但是不止有4个字段,并且[WHEN]不是我们可能想要包含在where部分中的唯一字段。 之前有人建议它,表分区功能将可能在性能上有所帮助,但不是在备份的问题。
如果有一种方式,为了做到这一点? 谢谢.-
参照你对表分区的评论一想,这可能会帮助你的备份问题,如果你使用的分区方案,以独立分散在不同的文件组中的数据,然后备份文件组(可能对不同的方案)。至少要研究一些东西。 –
@WT_W绝对地说,分区并不一定意味着“备份是巨大的”......当然有办法布置分区和文件组,以便旧数据是只读的而不是活动备份例程的一部分。 –