我想知道是否重新启动一个服务器在一个时间表将是一个好主意的性能。
假设我们希望在每两晚上午2:00重新启动服务器。
这里的服务器是Windows Server 2008 R2 。 主要是,SQL Server和IIS 7.5(近15个应用程序运行)正在此服务器下运行。 服务器有4GB内存。
虽然我同意重新启动方块本身没有任何问题,根据您的意见,SQL Server代理正在停止,我会build议一些额外的根本原因分析。 服务通常不会停止,通常情况下,SQL Server代理服务没有按照我的经验采取这种方式。
我认为除了重新启动之外,你还可以检查事件日志并运行一个长期的性能计数器日志, 通过日志性能分析 (PAL) 分析它是否“看到”任何错误。 如果没有别的办法,您应该尝试将与SQL代理关联的事件与其他因素关联起来。
如果您正在重新启动计算机以提高性能,则可能意味着您最终遇到了内存pipe理问题。
如果有的话,重新启动服务器会在更理想的环境中损害性能(当然还有正常运行时间)。 计算性能的基本原理之一是利用caching (在快速内存中提供数据)。 每次你重新启动,你吹走你的caching。 SQL服务器和IIS都是如此。 尽pipe您可能没有理想的环境,但下面的内容应该有助于指导您更好地select按计划重新启动服务器。
现在你提到这是IIS 7.5。 尽pipe我觉得很郁闷,但是在IIS 7.5上运行的很多Web应用程序都有内存泄漏,IIS中的默认设置是每隔X分钟重新启动应用程序,并在应用程序池闲置时将其closures。 理想的是修复内存泄漏 – 但是如果你不能,你可以调整这些设置 ,包括内存限制和定时器。 您可以使用perfmon来确定哪个w3wp进程正在使用内存。 这有点痛苦,但是可以用%systemroot%\system32\inetsrv\APPCMD list wps将它绑回到应用程序池中。
回到caching,SQL将采取什么样的内存。 您可以限制这在SQL服务器的属性。 如果你不限制内存,而且你也在机器上运行IIS,这些可以开始争夺内存查杀性能。 这篇精彩的文章详细介绍了这一点: 系统pipe理员的Microsoft SQL内存指南 。
既然你在同一个盒子里有IIS和SQL,你将不得不平衡他们的内存使用。 如果你不这样做,你可能会得到可能被重新使用的内存换成磁盘 – 这是一个可怕的地方(应该有交换活动的性能计数器)。 通过使用IIS回收设置和SQL内存限制,您应该能够使此系统稳定。 要平衡这个,你可能需要比4GB更多的内存。 另外,如果这是一个选项,我强烈build议把SQL服务器放在一个专用的机器上 – 这会使性能变得更好,并且大大简化了事情。
我不是按计划重新启动服务器的支持者,尤其不是解决某些潜在问题的手段。 如果您需要重新启动服务器来解决性能问题,那么更好的方法是find问题的原因并解决问题。 重新启动定期服务器只是混淆基本问题。
如果你有严重的内存泄漏,那么确定,为什么不这样做 – 否则每月重新启动更新。
如果你真的想按计划重新启动服务器(由于上述内存泄漏或更新或其他原因),为什么不看一个集群解决scheme? 把另外一台服务器并联起来,连接到一个负载均衡器(即使是简单的服务器也可以),并且可以根据需要重新启动它们,而不会损失服务正常运行时间或担心服务器根本无法启动,你会出去的。
这不是一个可怕的想法,但如果它只是“巫术”,它可能不会帮助你很多。
但是,有两个理由不要让这是你的调查结束提高你的performance。
一个是未来的可扩展性。 如果你的中断是加载,一定数量的查询,一个特定的查询,caching,查询编译,或树索引错误,或其他问题,当前每天都会发生,他们可能会更频繁地出现负载随着时间增加。 掐在那里。
另一个问题是,我怀疑在重新启动的时候,你需要暂停从属服务的传入请求。 你刚刚创build了一个操作节奏。 每次需要运行一些日常任务时,最终都会导致重启。 在某个时候,你会有这么大的滚动重启需要6个小时(我在这里没有夸张,我已经看到它发生在多个公司),没有人会记得为什么一切都需要停下来,并在中间重新启动的夜晚。
我的build议是监视SQL过程并根据需要重新启动。 正如前面的海报所提到的,SQL没有人们认为的内存泄漏(我说这是90年代中期在MSSQL团队中的人)。 你希望你的数据库服务器使用几乎100%的内存和CPU。 更less的是浪费资源。
如果代码和内存泄漏不好,那么重新启动可能是将分配的内存返回到池的唯一方法。 如果你有内存绑定的进程,那么这个池刷新到一个干净的状态肯定可以提高性能….一段时间。 但是这是处理性能问题的一个不好的方法,应该把这个真正的原因弄明白并固定下来。
否则,让它运行,直到需要维护窗口来应用修补程序/应用程序/恢复数据。 这可能是一个很好的时机,build议性能工程师看看所涉及的服务器究竟是为什么/哪些问题引人注目。
尽pipe本身并不是一个完整的答案,但是向服务器添加更多内存是否可行? 对于IIS / SQL Server机器而言,4GB是偏低的。 取决于它是一个真正的专用服务器单元还是桌面服务器,您可能能够以相当低的成本获得8GB或更高的性能。 当然,如果它是一个服务器,它可能会比标准的桌面RAM花费多一点,但是在强制重启之间会给你多一点时间。
说,看看你是否可以限制SQL Server最多使用80%的内存,或查看日志,以确定究竟出了什么问题和/或为什么服务停止。
如果您有Windows服务器,并且正在遵循任何修补例程,那么与您可能正在处理的SQL问题无关,您将定期重新启动服务器,而不必“仅因为”重新启动。 当我为“BIG MULTINATIONAL”工作时,我们被授权每月进行一次补丁,因此我们所有的服务器都至less每月重新启动一次。
我在3台服务器上做这个,1个是我们和2个客户。 我已经设置了它的各种原因 – 一台服务器2008R1有很多更新待安装,但我不能批量安装,所以即时安装它每天一个; 另一台服务器2012R2 – 用于启动故障排除和一些性能问题等我不认为这是一个不好的做法,安排定期重新启动,从其他硬它可以帮助跟踪各种硬件和软件问题,尤其是涉及到自动启动。
我知道一家大公司,不仅每晚都要重启Windows服务器,而且还有一些公司每24小时重新安装一次。 对于他们来说,这是因为软件和安全问题的记忆韭菜所必需的。
似乎有些公司每隔24小时重新启动一次 – 虽然我作为一名Linuxpipe理员似乎很奇怪。 要说清楚:我不会因为记忆问题而推荐这样做 – 追踪问题并解决问题。
如果您的内存使用率在几个月内保持75%的固定值,那么可能不需要重新启动 – 服务器应用程序使用所有可用内存是完全正常的 – 它提高了性能,因为如果您使用磁盘IO RAM来caching你的数据。