我已经看到在同一台机器上安装sql Server和IIS是不明智的,但我没有看到任何证据.有没有人尝试过,如果是,结果如何?在什么时候需要分开它们?是否需要调整?我特别关心IIS7和sql Server 2008.
如果有人可以提供数字,显示何时更有意义的去两台机器,这将是最有帮助的.
解决方法
使用任何其他产品(包括sql Server的另一个实例)运行sql Server是不明智的.这个建议的原因是sql Server如何使用操作系统资源的本质. sql Server在用户模式下运行内存管理和处理器调度基础架构,名为
SQLOS.sql Server旨在以最高性能运行,并假设这是操作系统上唯一的服务器.因此,sql操作系统保留机器上的所有RAM,用于sql进程,并为每个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在等待跨数字边界页访问时空闲.还有其他一些事情要考虑,就像TLB和L2由于其他进程占用cpu周期而增加.
总而言之,您可以使用sql Server运行其他服务器,但不推荐.如果必须的话,请确保您将两台服务器隔离成最佳能力.对于sql和IIS / ASP,使用cpu亲和力掩码来隔离两个独立的内核,配置sql以保留较少的RAM,以便为IIS / ASP留下可用内存,配置您的应用程序池以积极回收以防止应用程序池增长.