写一个存储过程,里面用到了游标,也就是CRUSOR,然后在一个ERP系统里面查询,
把得到的数据经过处理之后再插入到别的表里面(和提取的ERP系统没有关系)
这个存储过程很大,经常运行运行就报错,说死锁,然后这个存储过程就无端的牺牲掉了
并且在此事ERP系统也变的非常的缓慢,综上所述我想问的问题如下:1, 存储过程里面我没有加入任何事物,难道不加事物的话,本身存储过程就是一个事物吗?
2,我生成的游标就是sql server默认的游标,我想问一下,游标在查询一个表的时候会对这个表加锁吗?
游标本身不是事物吧?
3,究竟是什么原因导致我使用游标的时候会出现死锁呢,各位如果有经验分享一下也可。非常感谢!
把得到的数据经过处理之后再插入到别的表里面(和提取的ERP系统没有关系)
这个存储过程很大,经常运行运行就报错,说死锁,然后这个存储过程就无端的牺牲掉了
并且在此事ERP系统也变的非常的缓慢,综上所述我想问的问题如下:1, 存储过程里面我没有加入任何事物,难道不加事物的话,本身存储过程就是一个事物吗?
2,我生成的游标就是sql server默认的游标,我想问一下,游标在查询一个表的时候会对这个表加锁吗?
游标本身不是事物吧?
3,究竟是什么原因导致我使用游标的时候会出现死锁呢,各位如果有经验分享一下也可。非常感谢!
--加上事务吧,万一出错了就无法回滚~~~~本身不是事务。
2,我生成的游标就是sql server默认的游标,我想问一下,游标在查询一个表的时候会对这个表加锁吗?
游标本身不是事物吧?3,究竟是什么原因导致我使用游标的时候会出现死锁呢,各位如果有经验分享一下也可。
--要想不死锁必须提高你的SQL执行速度,你的响应速度越慢,则锁的越久,资源共享在时间越长,则死锁的机会越大。
--所以不建立你用游标,改为批量执行。
非常感谢!
--储过程本身好像不是事物
2,我生成的游标就是sql server默认的游标,我想问一下,游标在查询一个表的时候会对这个表加锁吗?
游标本身不是事物吧? --游标不会对表加锁,游标也不是事物,游标好像就是一个结果集,
--可以看可供访问做临时表,自然也就不是事物了
3,究竟是什么原因导致我使用游标的时候会出现死锁呢,各位如果有经验分享一下也可。
--游标的死锁;我估计是你游标运算太久,而造成的资源一直占用,导致死锁,我以前在计算物料需求计划时,
--也曾计算了大量的物料,数据库有7G多,没有出现你说的现象,
--于你说的运行你的sp 时,erp访问慢,这个正常,应为你的sp 占用了资源太多。优化sp,看看那里耗时
没有办法,只能自己研究了。