当前位置: 首页 > 科技观察

记得有一次解决生产环境SQLServer服务器卡死的问题--内存分配不当

时间:2023-03-20 19:08:24 科技观察

概述最近迁移了一个数据库,然后运维人员发现服务器卡了一段时间后很卡,连远程登录都需要很长时间。下面记录求解过程。1、查看资源情况,可以发现内存满了,排在第一位的是sqlserver的进程。2、查看sqlserver的内存分配情况。SQLServer与服务器使用多少内存就使用多少,只有在服务器内存不足时才使用它。只有一点点占用的内存被释放,SQLServer服务器的内存才会非常高。可以看到迁移前分配的内存是10G,但是迁移后的服务器只有8G内存。3.调整sqlserver内存这里可以将最大服务器内存修改为1G。确认后会强制释放内存,然后将最大服务器内存修改为合适的值。4.检查内存分配。正常只启动sqlserver服务器消耗2.34G内存,打开F5客户端到3.1G,也就是消耗0.7G内存,最后打开客户端下载数据。应该是下载的数据缓存在sqlserver内存中。所以内存一直在增加。。目前稳定在5.17G内存,也就是本次下载消耗了2.2G内存。5、查看当前内存状态:DBCCMemoryStatus这些内存在SqlServer运行时一般用作缓存:1)数据缓存:执行一条查询语句,SqlServer会保存相关的数据页(SqlServer操作的数据是都是以Pages的形式)加载到内存中,下次再次请求这个page的数据时,就不需要读磁盘了,大大提高了速度。2)执行命令缓存:在执行存储过程和自定义函数时,SqlServer运行前需要进行二进制编译,编译后的结果也会被缓存,再次调用时无需重新编译。