Kar*_*ten 6 performance database-design sql-server
在查看我正在使用的应用程序的数据库结构时,我认识到它在同一 SQL Server 实例上使用 3 个不同的数据库来处理不同的事情。
第一个包含很少更改的主要数据。
第二个包含高流量和容量的事件日志,最后一个是旧事件日志的存档数据库。
我想知道这种结构的好处是什么,因为数据库运行在同一个实例上,数据库文件位于同一个磁盘上。因此,我不希望由此带来任何性能改进。
我想,也许我忽略了一些东西,有人可以指出我没有想到的好处。
更新:
在维护和安全方面提出了一些好的观点。但我仍然想知道是否有可能获得性能改进。
一个更普遍的问题是:一个表的性能是否会受到同一数据库中其他大表的影响(由于碎片或其他原因),或者这些影响可能可以忽略不计。
Bre*_*zar 12
你在这里有两个不同的问题,我将分别回答。
Q:同一个数据库中,一张表的性能会受到其他大表的影响吗?
是的,在插入/更新/删除期间。SQL Server 每个数据库只有一个日志文件。当您插入/更新/删除时,您的事务在您的数据写入日志文件之前不会完成。
假设我们有两个表:
如果这两个表都在同一个数据库中,并且我们在编写文档时也尝试下订单,则订单事务的性能可能会变慢。
现在,这是一个极端的例子,但通常这就是为什么我建议将关键任务、高价值、小宽度记录表与不太关键、价值较低、大宽度记录表存储在单独的数据库中的原因。但是,如果您需要将两组表恢复到完全相同的时间点,或者在服务器之间一起故障转移,那么它们需要位于同一个数据库中。SQL Server 不保证故障转移时数据库之间的事务一致性,例如 AlwaysOn 可用性组。
Q:如果我有快速变化的数据、缓慢变化的数据和永不变化的数据,我是否应该将它们分开到不同的数据库中?
是的,有几个不同的原因:
小智 3
询问设计该解决方案的开发人员/架构师。只有他们自己才能真正说清楚。我可以想到几个原因:
数据库可能是在不同时间添加的。首先是主数据库,然后他们决定需要一个事件数据库,最后一个存储旧数据的地方。根据环境的不同,创建一个新数据库可能比向现有数据库添加大量新表更容易。我曾经工作过的系统,有时会备份生产数据,将其作为只读存档放在网上,然后从当前数据库中删除所有旧数据 - 从而同时有多个旧数据库可用。
未来的使用:也许他们认为系统最终必须分散在不同的服务器上(或者可能只是用于高流量数据库的更快的光盘)。
它实际上可能是上述全部、部分或全部......