我需要对以下内容提供一些帮助。
注意:在以下情况中,我无法访问应用程序的源代码,因此我只能在数据库级别进行更改。
我们的数据库使用dbo.[BLOB]
来存储各种文件和文档。该表使用IMAGE
(是的,过时的)数据类型。由于这个特定的表正在快速增长,我正在考虑实现一些归档功能。
我的想法是将超过X个月的所有文件移动到第二个数据库,然后以某种方式从dbo.[BLOB]
表链接到外部/存档数据库。
这甚至可能吗?目标是减少数据库大小,以提高备份和查询性能。
任何想法和提示都非常赞赏。
感谢。 费边
答案 0 :(得分:1)
在这种情况下,有2个功能可以帮助您提高备份速度和数据库大小:
Filestream将允许您将BLOBS作为文件存储在文件系统而不是数据库文件中。它使备份方案变得复杂,您必须备份数据库和文件,但是您可以获得更小的数据库文件以及更快的文档访问时间。从文件系统读取文件要比从blob列读取文件快得多。此外,文件流允许大于2GB的文件。
Partitioning会将表拆分为物理级别的较小块。这样,您无需访问应用程序代码即可更改物理存储特定行的位置,并确定需要快速访问哪些数据并将其放在SSD驱动器上,哪些数据可以放在较慢的存档上。这样,您可以在当前分区上进行更频繁的备份,而在归档时则更少。
在SQL Server 2016 SP1之前 - 此功能仅在企业版中提供。对于SQL Server 2016 SP1,所有版本均提供此版本。
在您的情况下,您最有可能首先使用文件流。
答案 1 :(得分:0)
无需修改您可以执行的应用程序,基本上没有。您可能会尝试查看应用程序是否可以容忍更改列类型(非常不可能,99.99%会破坏应用程序)并尝试使用FILESTREAM,但即使您成功也不会带来太多好处(备份大小将是例如,相同)。
您可以尝试的第二件事是使用INSTEAD OF
triggers for updates将视图替换为视图。它仍然很可能打破应用程序(比方说99.98%)。目标是拥有distributed partitioned视图(或跨数据库分区视图),向应用程序提供“冷”和“热”数据的统一视图。是复杂的,error prone,但它将减少备份的大小(只要数据从热变为冷,冷数据是不可变的,只需要很少的备份)。
目标是减少数据库大小,以提高备份和查询性能。
为了减少备份大小,正如我上面所解释的那样,基本上你什么都不做。但是你需要investigate it所需的表现,并根据你的发现适当地解决它。说数据库很慢'因为BLOBs'正在挥手。