我想设计并实现一个带silverlight.I的企业软件。我使用this.many用户的sql server数据库,在sql server数据库上运行sql queireis。如何配置sql server数据库以获得最佳性能?如何分发sql server数据库以获得最佳性能?如何在多台服务器之间分发sql server数据库以获得最佳性能?那么,我可以在sql server中使用哪些技术来获得最佳性能呢?
发布于 2011-06-30 22:26:10
除了复制之外,您还可以为此使用镜像或日志传送。请注意,我所说的只是向外扩展读取,而不是写入。因此,报告等可以从数据库的副本运行,但写入必须转到主副本(除非您正在使用合并复制,这对我来说很可怕)。当然,也有一些注意事项。
使用database mirroring,您可以通过拍摄快照将辅助服务器用作只读报告源。这里有您可以镜像的数据库数量的限制,当然还需要维护来管理快照。这里的资源分布并不是很真实,但卸载一些负载可能会有所帮助。在SQL Server的下一个版本(Denali)中,您将能够将次要数据库设置为只读,这样就可以避免维护快照。
使用log shipping,您基本上可以保留一个陈旧版本的数据库以供报告,并通过将日志恢复到它来定期替换它。与复制或镜像相比,您在这里有更多的灵活性,因为您实际上可以定义延迟(例如每6小时或一天刷新一次拷贝)-这也可以用作“从自相残杀中恢复”的场景。缺点是,要恢复数据库的新副本,您需要将所有当前用户踢出,因为数据库需要处于单用户模式才能恢复。
这些只是一些帮助扩展阅读的想法,但在内心深处,我同意@gbn -你正在解决一个你还没有解决的问题吗?设计可伸缩性是一回事,但很容易越过这条线,完全过度设计。
发布于 2011-06-30 20:21:48
嗯,SQL Server本身并没有真正的负载平衡机制。但是,它支持的是主动/被动节点配置和复制。
我们在我支持的一个应用程序中使用复制策略。你可以在这里阅读更多信息:http://msdn.microsoft.com/en-us/library/ms151198.aspx
在我们的配置中,我们基本上有一个事务数据库和一个报告数据库。我们将数据从事务性数据库复制到报告数据库。所有的报告都是针对这个报告数据库完成的,这样我们就不会因为一些长时间运行的报告而减慢在事务性数据库上所做的工作。
请注意,复制并不是真正的实时。换句话说,将数据从事务复制到报告数据库需要一些时间,尽管时间非常短。但是,如果您正在尝试平衡工作负载,那么复制肯定是您可以考虑的一种策略。
您可以考虑的其他事情是对大型表进行分区以获得更好的性能。
正如gbn在他的评论中指出的那样,最好在实现这些策略之前确定您是否真的需要这些策略,因为它们增加了大量的复杂性和维护工作,而这些工作甚至可能都不需要。正确分析您认为您将拥有多少数据,以及针对这些数据将发生多少活动,以确定是否需要我刚才描述的策略,这一点很重要。
此外,您还可以参考此链接获取其他一些有用的信息,以及您可能会发现有帮助的白皮书链接:http://social.msdn.microsoft.com/Forums/en/sqldisasterrecovery/thread/05cf41b7-c558-44bf-86c6-12f5c2b2ffe2
https://stackoverflow.com/questions/6534472
复制相似问题