我们当前的遗留系统是使用多个不同的数据库(其中大约十个)构建的。这些都是同一个谨慎系统的一部分,大量的 SP 和功能跨越多个数据库。还有一些跨度的关键关系(例如,标题表可能在数据库 A 中,而历史记录在数据库 B 中,等等)。
因此,当将我们的应用程序的多个副本部署到同一台服务器时,我们必须使用多个实例(因为数据库名称被编码到如此多的存储过程中)。
我们正在评估将这十个数据库(总共约 30gb,单个大小从 100mb 到 10gb 不等)并将它们合并到一个数据库中的想法。
目前,我们的数据库分布在多个主轴上以获得更好的 IO。我的问题是拥有 10 个不同的数据库与 10 个不同的数据库文件是否有任何性能损失或好处?
即而不是拥有三个数据库(A、B 和 C)
Disk D: A.mdf (1gb)
Disk E: B.mdf (4gb)
Disk F: C.mdf (10gb)
Disk G: A_Log.ldf, B_Log.ldf, C_Log.ldf
拥有一个数据库 (X)
Disk D: X1.mdf (5gb)
Disk E: X2.mdf (5gb)
Disk F: X3.mdf (5gb)
Disk G: X1_log.ldf,X2_log.ldf,X3_log.ldf
谢谢!-鲍勃
除非数据库上的负载非常均匀,否则如果您在一个文件组中使用多个文件,并且在分布在不同磁盘上的多个数据库上使用单个数据库,您可能会看到更好的性能。这是由于 ms sql 中的负载分布代码,它通常比尝试为每个 db 手动选择磁盘要好得多。
可以在http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/08/17/948.aspx找到简短的介绍,但还有更多内容。
您还应该看看SQL Server 2005 / 2008 - 多个文件/文件组 - 有多少?为什么?,其中对多个文件组的使用进行了很好的讨论。
哦,将所有日志文件放在同一个磁盘上可能会给您带来 IO 瓶颈,除非该磁盘非常快并且您的写入负载很低。那里要小心。
最后,检查您的 IO 队列。如果您没有在等待 IO 时陷入困境,那么担心磁盘性能就没有什么意义了。仅仅因为 db 设计更加简洁,这种变化可能会激发人们的兴趣。