我读过在同一台机器上安装SQL Server和IIS是不明智的,但我没有看到任何证据。有没有人试过这个,如果有的话,结果是什么?在什么时候需要将它们分开?有必要进行调整吗?我特别关注IIS7和SQL Server 2008.
如果某人可以提供显示何时更有意义去两台机器的数字,那将是最有帮助的。
答案 0 :(得分:47)
使用任何其他产品(包括另一个SQL Server实例)运行SQL Server是不明智的。此建议的原因是SQL Server如何使用OS资源的性质。 SQL Server在名为SQLOS的用户模式内存管理和处理器调度基础结构上运行。 SQL Server旨在以最佳性能运行,并假设它是操作系统上唯一的服务器。因此,SQL OS会在机器上为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在等待跨域边界页面访问时空闲。由于其他进程占用CPU周期,还有其他因素需要考虑TLB和L2未命中增加。
总而言之,可以使用SQL Server运行其他服务器,但不建议这样做。如果必须,请确保将两台服务器隔离到最佳状态。使用 SQL和IIS / ASP的CPU关联掩码将两者隔离在单独的核心上,配置SQL以保留较少的RAM,以便为IIS / ASP留出可用内存,将应用程序池配置为积极回收防止应用程序池的增长。
答案 1 :(得分:6)
是的,这是可能的,很多人都这样做。
这往往是一个安全和/或表现的问题 安全受到质疑,因为你的攻击面增加了两个盒子。也许不是你的问题。
现在您的服务器正在为Web和数据库请求提供服务,因此性能受到质疑。再一次,也许不是你的问题。
测试与生产......
许多人可能在测试环境中感觉很好,但没有生产....
再次,你的团队的电话。我喜欢我的测试和生产环境尽可能相似,但这是我的偏好。
答案 2 :(得分:4)
这是可能的,是的。
生产环境的好主意,没有。
您将遇到的问题是,在大量负载下的SQL Server数据库很可能会进行大量磁盘I / O并且占用大量内存。这种组合会占用整个机器,并且当它试图提供页面时,你会看到IIS的性能损失。
答案 3 :(得分:4)
在某些情况下这是不明智的......在其他情况下完全明智。
如果您的机器未充分利用且不会承受重负荷,那么在同一台机器上安装数据库是有利的,因为您无需通过网络传输任何内容。
另一方面,如果IIS或数据库中的一个或两个都处于高负载状态,它们可能会开始干扰,并且每个专用硬件的性能提升可能会超过必须超过网络
答案 4 :(得分:4)
不要忘记维护问题...你不能重新启动/修补一个而不用另一个。如果它们位于两个盒子上,那么如果您维护SQL框,则可以为用户提供更好的体验,而不是来自Web服务器的响应。
列表中不是最高的,但应该注意。
答案 5 :(得分:2)
你当然可以。例如,如果您拥有大量用户群或者对数据库运行了大量繁重的查询,则会遇到性能问题。我曾经在几个站点上工作,通常托管在1and1,在同一个盒子上运行IIS和SQL Server(Express!),数千个用户(数百个并发)和数百万条记录设计不佳的表,通过写得不好的存储过程访问用户体验当然是可以容忍的。这一切都取决于你打算如何努力打击服务器。