【发布时间】:2009-09-09 20:14:10
【问题描述】:
我了解到在同一台机器上安装 SQL Server 和 IIS 是不明智的,但我还没有看到任何证据。有没有人试过这个,如果有,结果如何?什么时候有必要将它们分开?是否需要任何调整?我特别关心 IIS7 和 SQL Server 2008。
如果有人可以提供数字显示何时使用两台机器更有意义,那将是最有帮助的。
【问题讨论】:
标签: sql-server iis performance
我了解到在同一台机器上安装 SQL Server 和 IIS 是不明智的,但我还没有看到任何证据。有没有人试过这个,如果有,结果如何?什么时候有必要将它们分开?是否需要任何调整?我特别关心 IIS7 和 SQL Server 2008。
如果有人可以提供数字显示何时使用两台机器更有意义,那将是最有帮助的。
【问题讨论】:
标签: sql-server iis performance
将 SQL Server 与 任何 其他产品(包括 SQL Server 的另一个实例)一起运行是不明智的。此建议的原因是 SQL Server 如何使用操作系统资源的性质。 SQL Server 在名为SQLOS 的用户模式内存管理和处理器调度基础结构上运行。 SQL Server 旨在以最佳性能运行,并假定它是操作系统上的唯一服务器。因此,SQL 操作系统为 SQL 进程保留机器上的所有 RAM,并为每个 CPU 内核创建一个调度程序,并为所有调度程序分配任务以运行,在需要时利用它可以获得的所有 CPU。因为 SQL 保留了所有内存,其他需要内存的进程会导致 SQL 看到memory pressure,并且对内存压力的响应会将页面从缓冲池中逐出,并将已编译的计划从计划缓存中逐出。而且由于 SQL 是唯一真正利用memory notification API 的服务器(有传言说下一个 Exchange 也会这样做),SQL 是唯一真正缩小以为其他进程腾出空间的进程(例如泄漏的错误 ASP 池)。 BOL 中也解释了这种行为:Dynamic Memory Management。
类似的模式发生在 CPU 调度中,其他进程从 SQL 调度程序中窃取 CPU 时间。在高端系统和 Opteron 机器上,情况变得更糟,因为 SQL 充分利用了NUMA 局部性,但没有其他进程通常不知道 NUMA,并且,尽管操作系统可以尝试保留分配的局部性,但它们最终会分配整个物理 RAM 并降低系统的整体吞吐量,因为 CPU 在等待跨 numa 边界页面访问时处于空闲状态。还有其他一些事情需要考虑,例如 TLB 和由于其他进程占用 CPU 周期而导致的 L2 未命中增加。
所以总结一下,你可以用 SQL Server 运行其他服务器,但不推荐。如果您必须,请确保尽最大努力隔离两个服务器。为 SQL 和 IIS/ASP 使用 CPU 关联掩码以将两者隔离在不同的内核上,配置 SQL 以保留更少的 RAM 以便为 IIS/ASP 留下可用内存,配置您的应用程序池以积极回收以防止应用程序池增长。
【讨论】:
是的,这是可能的,很多人都这样做了。
这往往是一个安全和/或性能问题。
安全性受到质疑,因为您的攻击面在兼具两者的盒子上增加了。也许对你来说不是问题。
性能受到质疑,因为现在您的服务器正在处理 Web 和 DB 请求。同样,在您的情况下可能不是问题。
测试与生产....
许多人可能在测试环境中感觉良好,但在生产环境中却不是......
再次,您的团队的电话。我希望我的测试和生产环境尽可能相似,但这是我的偏好。
【讨论】:
有可能,是的。
生产环境的好主意,不。
您将遇到的问题是,在大量负载下的 SQL Server 数据库很可能会执行繁重的磁盘 I/O 并占用大量内存。这种组合会占用机器,并且当 IIS 尝试提供页面时,您会看到性能下降。
【讨论】:
在某些情况下这是不明智的……在其他情况下完全是明智的。
如果您的机器未充分利用并且不会承受重负载,那么将数据库安装在同一台机器上会有好处,因为您根本不必通过网络传输任何内容。
另一方面,如果 IIS 或数据库中的一个或两个负载过重,它们可能会开始干扰,并且每个专用硬件的性能增益可能会超过必须检查的损失网络。
【讨论】:
不要忘记维护问题...如果不对另一个进行核对,您将无法重新启动/修补一个。如果它们在两个盒子上,您可以为您的用户提供更好的体验,而不是在您维护 SQL 盒子时没有来自网络服务器的响应。
在列表中不是最高的,但应该注意。
【讨论】:
你当然可以。例如,如果您拥有庞大的用户群,或者如果对数据库运行大量繁重的查询,您将遇到性能问题。我曾在几个站点工作过,通常托管在 1and1,这些站点在同一个机器上运行 IIS 和 SQL Server(Express!),数千个用户(数百个并发)和数百万条设计不良的表中的记录,通过编写不良的存储过程和用户体验当然是可以忍受的。这一切都归结为您计划访问服务器的难度。
【讨论】: