内存原因导致服务器SQL服务频繁自动重启,怎么回事?

时间:2022-09-22 18:02:33
内存原因导致服务器SQL服务频繁自动重启,怎么回事?


公司有台服务器在跑SQL,最近这台服务器频繁出现SQL服务重启,查看事件日志,报错信息为:
sql 服务器进程内存的一大部分已调出。这可能导致性能下降。持续时间: 0 秒。工作集(KB): 63208,已提交(KB): 31496840,内存使用率: 0%%。

重启时间很短,大概1分钟,生产几乎也没什么影响。

服务器配置:4个双核cpu,32G内存
频率:刚开始四五天出现一次,后来两天出现一次,现在差不多一天出现一次。
数据库的操作:最近一个月都在用游标删除主表中的历史数据,每天的数据行在100k,事件也比较长,真个执行过程大约7、8小时。
(中间会有中断,提示错误:事务与另一个进程已被死锁在lock资源上,且该事务已被选作死锁牺牲品)

麻烦高手帮忙分析一下,谢谢!!!

12 个解决方案

#1


优化语句.........

#2


up

#3


应该不是SQL语句的问题!

引用 1 楼 colacat911 的回复:
优化语句.........

#4


64位的吗? 打上最新补丁试试。

然後开启sqlserver启动帐号的 "锁定内存分页"权限。

#5


用游标删除主表历史数据啊?为什么用游标删除呢?
你的这个服务器除了SQLSERVER用,还有什么程序在用?

#6


引用 3 楼 dong3431 的回复:
应该不是SQL语句的问题!

引用 1 楼 colacat911 的回复:
优化语句.........


有什么特殊需求,为什么拥游标删除记录?

#7


??同5,6楼问

#8


直接删的话,数据量比较大,产生大容量事务日志,同时会对生产现场有一定影响。

生产第一,不得以才用游标删的。

引用 7 楼 fredrickhu 的回复:
??同5,6楼问

#9


你一条一条删除的日志更多.............

而且如果时间列上有索引的话也不慢的

最多你这样来,写个存储过程

跑循环

先判断是不是有符合的要删除的记录

set rowcount 1000

执行删除语句

set rowcount 0

#10


游标删除时不回滚的,不记录日志的。

你的方法可以考虑,关键是在删除的过程中可能会出现锁而中断该事务,这个比较难搞。

引用 9 楼 colacat911 的回复:
你一条一条删除的日志更多.............

而且如果时间列上有索引的话也不慢的

最多你这样来,写个存储过程

跑循环

先判断是不是有符合的要删除的记录

set rowcount 1000

执行删除语句

set rowcount 0

#11


顶起,又出现了,晕~~~~~~~~

#12


OLTP慎用游标

#1


优化语句.........

#2


up

#3


应该不是SQL语句的问题!

引用 1 楼 colacat911 的回复:
优化语句.........

#4


64位的吗? 打上最新补丁试试。

然後开启sqlserver启动帐号的 "锁定内存分页"权限。

#5


用游标删除主表历史数据啊?为什么用游标删除呢?
你的这个服务器除了SQLSERVER用,还有什么程序在用?

#6


引用 3 楼 dong3431 的回复:
应该不是SQL语句的问题!

引用 1 楼 colacat911 的回复:
优化语句.........


有什么特殊需求,为什么拥游标删除记录?

#7


??同5,6楼问

#8


直接删的话,数据量比较大,产生大容量事务日志,同时会对生产现场有一定影响。

生产第一,不得以才用游标删的。

引用 7 楼 fredrickhu 的回复:
??同5,6楼问

#9


你一条一条删除的日志更多.............

而且如果时间列上有索引的话也不慢的

最多你这样来,写个存储过程

跑循环

先判断是不是有符合的要删除的记录

set rowcount 1000

执行删除语句

set rowcount 0

#10


游标删除时不回滚的,不记录日志的。

你的方法可以考虑,关键是在删除的过程中可能会出现锁而中断该事务,这个比较难搞。

引用 9 楼 colacat911 的回复:
你一条一条删除的日志更多.............

而且如果时间列上有索引的话也不慢的

最多你这样来,写个存储过程

跑循环

先判断是不是有符合的要删除的记录

set rowcount 1000

执行删除语句

set rowcount 0

#11


顶起,又出现了,晕~~~~~~~~

#12


OLTP慎用游标