我们有一个运行的应用程序,其中IIS和SQL在同一台机器上。它是一个Windows2003标准服务器,在VM上运行4GB内存。
现在用户数量不断增加。还有一些巨大的统计数据,可以由用户运行,但对其他用户的性能影响很大。所以我们需要以某种方式提高性能。
我想在每台机器上使用windows2008 64位和至少6 GB内存的2台不同机器上分离IIS和SQL,但它也应该有一个故障转移解决方案。
您能否就如何解决性能和故障转移问题推荐一些方案?
由于
ps:
仅供参考:我们现在在IIS中使用inproc状态管理,但我认为更改为sqlstatemanagement会更好。
修改
我已将问题扩展到故障转移的程度。因为我们的客户不想在服务器和SQL许可证上花太多钱。将复制到第二个SQL服务器并将其用作故障转移是否“可以”?你知道一些更好的“廉价”解决方案吗?
该应用程序仅供内部使用,但现在越来越多的部门参与此项目。
答案 0 :(得分:2)
答案 1 :(得分:1)
如果SQL Server是在机器上运行的“唯一”的东西,它总是效果最好。只需这样做,您将获得快速,简单和良好的好处。它似乎想控制一切,并且在它可以时总是更快乐:)
答案 2 :(得分:1)
听起来你真的在问你应该把数据库放在一台单独的机器上。这可能无法提高性能(实际上会随着延迟的增加而减少),但会提高可扩展性(我猜你真正需要它)。
表现<>可扩展性。
然而,更多的问题发挥作用 - 如果你没有足够的RAM性能可能会降低数据库在同一个盒子上 - SQL服务器喜欢使用RAM。
这就是为什么像TFS这样的东西使用SQL服务器,对于少数用户微软推荐它全部安装在一台机器上,但对于更多用户,微软建议数据库位于不同的服务器上。
你可以read about the deployment options for TFS here。
切换SQL Server状态管理不会提高性能 - 它可能会降低性能,但您将获得其他好处(如可靠性)。
听起来你需要先了解性能瓶颈是什么。根据我的经验,这通常在数据库中。
您是否研究过标准的ASP.NET优化技术,如缓存? Microsoft提供的guidance on application tuning也可能对您有用。
在Web应用程序方案中使用SQL Server时,如果您使用的是SQL Server 2005及更高版本,则可能希望阅读Snapshot isolation。有时不使用它是Web应用程序中性能问题的原因。
答案 3 :(得分:1)
您必须在codeproject上参考这两篇关于ASP.Net性能调优的文章
<强> 1。 http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx
2. http://www.codeproject.com/KB/aspnet/aspnetPerformance.aspx
我个人在我的asp.net应用程序中实现了这些技术,并且性能提升了30%以上。
此外,您可以参考this文章获取99.99%的正常运行时间。
答案 4 :(得分:0)
分层可能会有所帮助。通常,为数据库调整机器是非常具体的,所以这是一个合理的第一次努力。
但是,如果你有两种用户活动,其中一种非常沉重,那么你总是会冒一些重度用户伤害其他人的风险。
您可以考虑两件事:
答案 5 :(得分:0)
自然地将IIS和SQL服务器分开是第一步。 Sql server真的想拥有一台完整的机器。
第二件重要的事情是在运行时分析应用程序。在没有真实使用数据的情况下,永远不要尝试优化应用程序的性能,因为您可能只是花时间优化很少被调用的东西。我过去成功使用的一种技术是在global.asax中的Request_Begin中创建System.Diagnostics.Stopwatch,然后将其存储在上下文变量中
var sw = new Stopwatch();
sw.Start()
HttpContext.Current.Items["stopwatch"] = sw;
在Request_End中,您获得秒表agin
sw = HttpContext.Current.Items["stopwatch"];
sw.Stop();
Timespan ts = sw.Elapsed;
然后写入日志表处理请求所花费的时间。同时记录URL(包含和不包含查询字符串参数)以及各种有助于分析性能的内容。
然后你可以分析你的应用程序并找出哪些操作占用时间最长,哪些操作最多,等等。这样你就可以看到是否有一个页面被请求了很多,而且通常需要很长时间要完成,这应该是优化的目标,使用你拥有的任何工具,包括.NET和SQL分析器。
我通常记录的其他内容,IP地址和登录用户的用户ID。当错误出现时,这也给了我一个宝贵的调试工具。
将其放入表中而不是将其写入日志文件的原因是您可以使用SQL语法来过滤,分组,计算平均时间等。