我们当前的遗留系统是使用多个不同的数据库(大约十个)构建的。这些都是同一离散系统的一部分,并且大量 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
谢谢!-鲍勃
答案1
除非数据库上的负载非常均匀,否则如果您使用文件组中的多个文件以及分布在各个磁盘上的多个数据库中的单个数据库,则可能会看到更好的性能。这是由于 ms sql 中的负载分配代码,它通常比尝试手动为每个数据库选择磁盘要好得多。
简短的介绍可以在以下网址找到http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/08/17/948.aspx,但事情远不止于此。
你还应该看看SQL Server 2005 / 2008 - 多个文件 / 文件组 - 多少?为什么?,其中对多个文件组的使用进行了很好的讨论。
哦,将所有日志文件放在同一个磁盘上可能会造成 IO 瓶颈,除非该磁盘速度极快且写入负载较低。这一点要小心。
最后,检查您的 IO 队列。如果您没有陷入等待 IO 的困境,那么担心磁盘性能就没什么意义了。这种改变可能只是因为数据库设计更加简洁而激发了人们的兴趣。