现在我们有台服务器是windows 2012 R2数据中心版(内存32G ),然后数据库使用的是sql 2008 R2版本的。服务器上部署了一个IIS网站,是我们公司内部的ERP系统,目前数据库文件总共为300M左右,数据库总的记录条数在100万左右。目前存在的问题就是服务器内存占用到达40%左右,cpu占用在30%左右,服务器响应延时就比较高,平均ping 延时在15ms左右。局域网内部登录服务器也比较卡顿。如果不隔一段时间重启一下sql 2008 R2数据库服务,持续一段时间后,服务器会卡崩掉。
目前的方法就是隔段时间重新启动一下,服务器数据库服务程序,然后配置了数据内存的最大值和最小值,优化了程序里面部分视图的查询,降低了单次查询数据库记录的条数。但是还是不能完全解决问题
我这边想达到服务器使用不卡顿的目的,保证系统正常运行,不需要人工手动给重新启动服务(因为我们系统是24小时运转的,重新启动服务会影响业务)
1.首先说卡顿的问题,先排除网络层面上和系统层面上的问题。
网络层面上,这个很好去检查,定期进行检测,尤其卡顿的时候去进行测试。
系统层面上,从你说的系统占用资源来说,其实不多,也不应该卡死系统才对,不过,在WIN而去跑的话,根据这么多年经验,的确没linux上稳定,尤其去排查各种故障,优化方面,在WIN中,很无奈,能做的操作也很有限。。。如果是系统层面上问题,那就能想想是否更换操作系统,迁移到linux等。
2.数据库层面上,你的数据量不大啊,数据占比也才几百M,完全不该这样卡顿才对,能做的优化,就是相关查询,试图方面。
还有要去看看查询的逻辑,调用的逻辑是否存在问题。
3.最后坏打算(不重装,不迁移各种),要定期重启的话,那就只能写WIN的计划任务去重启数据库,前提对业务影响不大,或者影响很小而去操作。说到计划任务各种控制,突然想吐槽一下,这方面真的不如linux。。。还需要你做好各种测试才行。
思路大概就是从这些入手。
解决方案:一,更换web发布容器,例如,使用nginx,tomcat等web服务器,排查是否是iis引起的问题,可以使用vm虚拟机安装linux,转到linux下发布。
二,数据库方面,explain 调试查询语句,进行优化,这个需要找开发配合。
三,Windows服务器安装python环境,编写python脚本做计划任务,使用任务调度框架apscheduler,时间定在午夜时分,各个服务编排重启,具体示例见我的博客:https://blog.csdn.net/alwaysbefine/article/details/113442019
三,最后一个办法,可以物理机 虚拟化,如何转虚拟机见我的博客:https://blog.csdn.net/alwaysbefine/article/details/121079048