公司有台服务器在跑SQL,最近这台服务器频繁出现SQL服务重启,查看事件日志,报错信息为:
sql 服务器进程内存的一大部分已调出。这可能导致性能下降。持续时间: 0 秒。工作集(KB): 63208,已提交(KB): 31496840,内存使用率: 0%%。
重启时间很短,大概1分钟,生产几乎也没什么影响。
服务器配置:4个双核cpu,32G内存
频率:刚开始四五天出现一次,后来两天出现一次,现在差不多一天出现一次。
数据库的操作:最近一个月都在用游标删除主表中的历史数据,每天的数据行在100k,事件也比较长,真个执行过程大约7、8小时。
(中间会有中断,提示错误:事务与另一个进程已被死锁在lock资源上,且该事务已被选作死锁牺牲品)
麻烦高手帮忙分析一下,谢谢!!!
12 个解决方案
#1
优化语句.........
#2
up
#3
应该不是SQL语句的问题!
#4
64位的吗? 打上最新补丁试试。
然後开启sqlserver启动帐号的 "锁定内存分页"权限。
然後开启sqlserver启动帐号的 "锁定内存分页"权限。
#5
用游标删除主表历史数据啊?为什么用游标删除呢?
你的这个服务器除了SQLSERVER用,还有什么程序在用?
你的这个服务器除了SQLSERVER用,还有什么程序在用?
#6
有什么特殊需求,为什么拥游标删除记录?
#7
??同5,6楼问
#8
直接删的话,数据量比较大,产生大容量事务日志,同时会对生产现场有一定影响。
生产第一,不得以才用游标删的。
生产第一,不得以才用游标删的。
#9
你一条一条删除的日志更多.............
而且如果时间列上有索引的话也不慢的
最多你这样来,写个存储过程
跑循环
先判断是不是有符合的要删除的记录
set rowcount 1000
执行删除语句
set rowcount 0
而且如果时间列上有索引的话也不慢的
最多你这样来,写个存储过程
跑循环
先判断是不是有符合的要删除的记录
set rowcount 1000
执行删除语句
set rowcount 0
#10
游标删除时不回滚的,不记录日志的。
你的方法可以考虑,关键是在删除的过程中可能会出现锁而中断该事务,这个比较难搞。
你的方法可以考虑,关键是在删除的过程中可能会出现锁而中断该事务,这个比较难搞。
#11
顶起,又出现了,晕~~~~~~~~
#12
OLTP慎用游标
#1
优化语句.........
#2
up
#3
应该不是SQL语句的问题!
#4
64位的吗? 打上最新补丁试试。
然後开启sqlserver启动帐号的 "锁定内存分页"权限。
然後开启sqlserver启动帐号的 "锁定内存分页"权限。
#5
用游标删除主表历史数据啊?为什么用游标删除呢?
你的这个服务器除了SQLSERVER用,还有什么程序在用?
你的这个服务器除了SQLSERVER用,还有什么程序在用?
#6
有什么特殊需求,为什么拥游标删除记录?
#7
??同5,6楼问
#8
直接删的话,数据量比较大,产生大容量事务日志,同时会对生产现场有一定影响。
生产第一,不得以才用游标删的。
生产第一,不得以才用游标删的。
#9
你一条一条删除的日志更多.............
而且如果时间列上有索引的话也不慢的
最多你这样来,写个存储过程
跑循环
先判断是不是有符合的要删除的记录
set rowcount 1000
执行删除语句
set rowcount 0
而且如果时间列上有索引的话也不慢的
最多你这样来,写个存储过程
跑循环
先判断是不是有符合的要删除的记录
set rowcount 1000
执行删除语句
set rowcount 0
#10
游标删除时不回滚的,不记录日志的。
你的方法可以考虑,关键是在删除的过程中可能会出现锁而中断该事务,这个比较难搞。
你的方法可以考虑,关键是在删除的过程中可能会出现锁而中断该事务,这个比较难搞。
#11
顶起,又出现了,晕~~~~~~~~
#12
OLTP慎用游标