我需要在以下方面提供一些帮助。
备注:在下面的场景中,我无法访问应用程序的源代码,因此只能在数据库级别进行更改。
我们的数据库使用dbo.[BLOB]存储各种文件和文档。该表使用IMAGE (是的,过时的)数据类型。由于这个特定的表增长很快,我想实现一些归档功能。
我的想法是将所有超过X个月的文件移动到第二个数据库,然后以某种方式将dbo.[BLOB]表链接到外部/归档数据库。
这有可能吗?目标是减少数据库大小,以提高备份和查询性能。
任何想法和暗示都很感激。
谢谢。法比安
发布于 2017-03-22 08:26:03
在本例中,有两个特性可以帮助您实现备份速度和数据库大小:
菲列斯特拉姆将允许您将BLOBS存储为文件系统中的文件,而不是数据库文件。它使备份方案复杂化,您必须同时备份数据库和文件,但是数据库文件越小,对文档的访问时间也越快。从文件系统读取文件比从blob列读取文件要快得多。此外,filestream允许大于2GB的文件。
分区将在物理级别上将表分割成较小的块。这样,您就不需要访问应用程序代码来更改特定行的物理存储位置,并决定哪些数据需要快速访问,并将其放在SSD驱动器上,哪些数据可以降落在较慢的归档文件中。这样,您可以在当前分区上进行更频繁的备份,而在归档中则更少备份。
在Server 2016 SP1之前,此功能仅在企业版本中可用。对于Server 2016 SP1,所有版本都有此功能。
在你的情况下,最有可能的是你应该先使用filestream。
发布于 2017-03-22 10:06:46
W/o修改应用程序--基本上,你什么也做不了。您可以尝试查看应用程序是否允许更改列类型(非常不可能,99.99%它会破坏应用程序),并尝试使用FILESTREAM,但即使成功,它也不会带来多少好处(例如,备份大小相同)。
您可以尝试的第二件事是使用更新触发器将表替换为视图。它仍然很有可能破坏应用程序(假设99.98%)。目标是拥有一个分布式分区视图(或跨DB分区视图),它向应用程序提供了“冷”和“热”数据的统一视图。很复杂,易出错,但是它会减少备份的大小(只要数据从热数据移动到冷数据,并且数据是不变的,只需要很少的备份)。
目标是减少数据库大小,以提高备份和查询性能。
为了减少备份大小,正如我前面所解释的,基本上您什么也做不了。但是,根据您的发现,您需要调查它并适当地处理它的性能。说数据库是慢的,“因为有气泡”,这是挥手。
https://stackoverflow.com/questions/42945997
复制相似问题