现有一项目,每分钟360条数据的写入,使用的是纯SQL语句,没有使用存储过程。
现在数据积累到了4千万条,为了减少数据库容量,提高查询速度。
我在SQL2005企业管理器中设置了计划任务,每个星期备份数据库,并清除三个月之前的数据记录和系统运行日志。
其中计划任务中清除数据,我使用的SQL:
delete from monitor where datediff(mm,addtime,getdate())>3
实际执行的效果,删除速度很慢。
问题归纳如下:
在监控系统正常运行的情况下,SQL2005的计划任务启动后,数据库的读写冲突了。
造成系统无法正常使用。
请问如何解决这个问题,谢谢!
别的不说,你这语句当然慢了
delete from monitor where datediff(mm,addtime,getdate())>3
你思考一下
delete from monitor where addtime<dateadd(mm, -3, getdate())
这样会好点。
我修改了一下 你看这样是不是要更快一点?
DELETE
FROM dt_monitor
WHERE id<
( SELECT top 1 id
FROM dt_monitor
WHERE datediff(mm,[datetime],getdate())>3
ORDER BY id DESC )
还有是不是计划任务删除数据的时候,程序写入数据,会有冲突!
谢谢
@PKSEO_dudu: 说了不要用Datediff了,你不明白?
你这样使用datediff有1千万条记录,就要计算1千万次。
delete from monitor where addtime<dateadd(mm, -3, getdate())
修改为
declare @date datetime
set @date=dateadd(mm, -3, getdate())
delete from monitor where addtime<@date
@爱编程的大叔: roger that ! 谢谢
@爱编程的大叔:
计划任务中 执行 delete的同时,程序写入大量数据,是不是会有问题?
现在就是程序会无法写入数据,请教一下! 谢谢
@PKSEO_dudu: 可能会有问题,可能没有问题,这个无法一概而论。
现在是你出现问题了,你只要想怎么解决就行了。
@爱编程的大叔: 非常感谢!
sqlserver 2005 微软都不维护了 还不换吗?
老项目了,没办法!
兄弟,你看了我这个问题,有没有什么解决办法?谢谢!
@PKSEO_dudu: 写个程序不行吗?监视你的记录和日志?
@tkb至简: 会不会是计划任务在删除数据的时候把表锁死了,由于数据量过大!