我想知道按时间表重新启动服务器是否对提高性能是个好主意。
假设我们要每2晚02:00 AM重新启动服务器。
这里的服务器是Windows Server 2008 R2
。主要是,SQL Server和IIS 7.5(正在运行近15个应用程序)在此服务器下运行。服务器有4GB内存。
我想知道按时间表重新启动服务器是否对提高性能是个好主意。
假设我们要每2晚02:00 AM重新启动服务器。
这里的服务器是Windows Server 2008 R2
。主要是,SQL Server和IIS 7.5(正在运行近15个应用程序)在此服务器下运行。服务器有4GB内存。
Answers:
虽然我同意重新启动该框本身没有任何问题,但根据您对SQL Server代理正在停止的评论,我建议进行一些其他根本原因分析。根据我的经验,服务通常不会只是停止,并且SQL Server代理服务通常不会采取这种方式。
我认为除了重新启动之外,您还可以检查事件日志并运行长期性能计数器日志,然后可以使用性能分析日志(PAL)进行分析,以查看是否“看到”了任何错误。如果没有其他问题,您应该尝试将与SQL Agent关联的事件与其他因素相关联。
如果您想重启计算机以提高性能,则可能意味着您最终会遇到内存管理问题。
如果有的话,在更理想的环境中重新启动服务器会损害性能(当然还有正常运行时间)。计算性能的基本原理之一是利用缓存(在快速内存中具有可用数据)。每次重新启动时,都会耗尽缓存。SQL Server和IIS都是如此。尽管您可能没有理想的环境,但是与按计划重新启动服务器相比,以下内容应该可以帮助您选择一个更好的选择。
现在您提到这是IIS 7.5。尽管我发现它令人沮丧,但是在IIS 7.5上运行的许多Web应用程序都有内存泄漏,IIS中的默认设置是每X分钟重新启动一次APP,如果APP池处于空闲状态则将其关闭。理想的方法是修复内存泄漏-但是,如果不能,则可以调整这些设置,包括内存限制和计时器。您可以使用perfmon找出哪个w3wp进程正在使用内存。这有点麻烦,但是您可以将其与应用程序池绑定在一起%systemroot%\system32\inetsrv\APPCMD list wps
。
回到缓存,SQL将占用它可以使用的内存。您可以在SQL Server的属性中对此进行限制。如果您不限制内存,并且还在包装盒上运行IIS,则这些设备可能会开始争夺内存杀死性能。这篇出色的文章对此进行了详细介绍:《 Sysadmin的Microsoft SQL内存指南》。
由于IIS和SQL都位于同一框上,因此必须平衡它们的内存使用量。如果您不这样做,则可能会再次将可能使用的内存换出到磁盘上-这是一个可怕的地方(应该有用于交换活动的perfmon计数器)。通过使用IIS回收设置和SQL内存限制,您应该能够使该系统稳定。为了平衡这一点,您可能需要4GB以上的内存。另外,如果可以选择的话,我强烈建议将SQL Server放在专用计算机上,这将使性能大大提高并大大简化工作。
如果您有大量内存泄漏,那么请确定,为什么不这样做-否则每月重新启动一次更新。
这不是一个可怕的想法,但是如果只是“伏都教”,那可能对您没有太大帮助。
但是,有两个理由不让这成为提高性能的调查的终点。
一是未来的可扩展性。如果您的中断是负载,某些查询,遇到高速缓存,查询编译或btree索引错误的特定查询或当前每天发生的其他问题的结果,则它们可能会随着负载而更频繁地发生随着时间增加。将其压缩在萌芽状态。
另一个问题是,我怀疑您需要在重新启动期间停止从依赖服务传入的请求。您刚刚创建了操作节奏。每次需要运行一些日常任务时,最终任务都会与您的重新启动有关。在某个时候,您将需要花费六个小时进行这些大规模的滚动重启(我在这里并不夸张,我看到它发生在多家公司中),没有人会记得为什么需要在中间停止并重新启动一切的夜晚。
我的建议是监视SQL进程并根据需要重新启动。正如以前的海报所提到的,SQL并没有人们认为的那样的内存泄漏(我说这是90年代中期在MSSQL团队工作的人)。您希望数据库服务器使用几乎100%的内存和CPU。少浪费资源。
我知道一家大公司不仅会每晚重新启动其Windows服务器,而且其中一些甚至每24小时都会重新安装一次。对于他们来说,这是必需的,因为软件中存在内存泄漏和安全性问题。
似乎有些公司每24小时重启一次-尽管对于Linux管理员来说,这似乎很奇怪。明确说明:由于内存问题,我永远不建议这样做-找出问题并解决。
如果您的内存使用率在几个月内保持在75%的固定水平,则可能无需重新引导-服务器应用程序使用所有可用内存是完全正常的-它可以大大提高性能,因为如果使用,则需要更少的磁盘IO RAM来缓存您的数据。