我想用silverlight设计和实现一个企业软件。我使用sql server数据库。很多用户在sql server数据库上运行sql queireis。 如何配置sql server数据库以获得最佳性能? 我如何分发SQL Server数据库以获得最佳性能? 如何在某些服务器之间分发sql server数据库以获得最佳性能? 那么我可以在sql server中使用哪些技术来获得最佳性能?
答案 0 :(得分:1)
好吧,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
答案 1 :(得分:1)
除了复制,您还可以使用镜像或日志传送。请注意,我只是在谈论扩展读取,而不是写入。因此,报告等可以从数据库的副本运行,但写入必须转到主副本(除非您使用合并复制,这对我来说是可怕的)。当然有一些警告。
使用database mirroring,您可以通过拍摄快照将辅助服务器用作只读报告源。这里有一些限制,您可以镜像多少个数据库,当然还有维护来管理快照。这里的资源分配并不完全正确,但卸载一些负载可能会有所帮助。在下一版本的SQL Server(Denali)中,您可以将辅助节点设置为只读,这样就可以避免维护快照。
使用log shipping,您基本上可以保留数据库的陈旧版本以进行报告,并通过将日志还原到它来定期替换它。与复制或镜像相比,您在此处具有更大的灵活性,因为您实际上可以定义延迟(例如每6小时或每天一次,您刷新副本) - 这也可以作为“从拍摄中自我恢复”脚踏实地的“场景”。缺点是要恢复数据库的新副本,您需要将所有当前用户踢出去,因为数据库需要处于单用户模式才能恢复。
这些只是帮助扩展读取的几个想法,但内心深处我同意@gbn - 您是否正在解决您尚未解决的问题?设计可扩展性是一回事,但是很容易跨越这条线并完全过度工程。