日期:2014-05-17  浏览次数:20875 次

同一个存储过程是否能够并发执行
公司的逻辑都写在存储过程里。
最近发现有个导出csv的功能速度很慢,在调用的存储过程里加了日志,然后打开两个页面,第一个页面选择比较复杂的条件,确保它能执行较长的时间(比如30秒), 第二个页面选择简单的条件,一般来说3s可以执行完毕。
先在第一个页面中点击按钮执行,随后马上转到第二个页面点击执行(间隔大概1-2秒)。发现第二个页面的执行速度变的非常慢,而且是在第一个页面执行完毕后才能完成。
看存储过程的日志,第二个页面调用的时间在第一个页面调用的时间之后。也就是说,第二个页面调用的存储过程是在第一个页面调用的存储过程执行完毕后才开始的。这里,存储过程是同一个。
所以我很想向各位请教,sql server的存储过程是串行执行的吗?存储过程中会创建临时变量和临时表, 是不是这些导致存储过程排队?
同一个存储过程并发

------解决方案--------------------
可以并发执行的,存储过程调用时存在排队情况,里面的临时表不会
如果查询结果是存在一个固定表里面的话,那可能会影响你的查询结果的(最好用临时表)
------解决方案--------------------
引用:
@rockyljt
查询结果最好放在临时表里,就是说临时表的作用范围只是当前存储过程,和并发执行的同一存储过程的临时表结果不会冲突了?是这个意思不?

是的

引用:
@rockyljt
有没有什么设置让存储过程调用不排队?

这个是sql server自己的机制控制的,我们自己不用再考虑了
------解决方案--------------------
当然可以并行,决定是否能并行的关键因素是存储过程里边如何写的
------解决方案--------------------
引用:
公司的逻辑都写在存储过程里。
最近发现有个导出csv的功能速度很慢,在调用的存储过程里加了日志,然后打开两个页面,第一个页面选择比较复杂的条件,确保它能执行较长的时间(比如30秒), 第二个页面选择简单的条件,一般来说3s可以执行完毕。
先在第一个页面中点击按钮执行,随后马上转到第二个页面点击执行(间隔大概1-2秒)。发现第二个页面的执行速度变的非常慢,而且是在第一个页面执行完毕后才能完成。
看存储过程的日志,第二个页面调用的时间在第一个页面调用的时间之后。也就是说,第二个页面调用的存储过程是在第一个页面调用的存储过程执行完毕后才开始的。这里,存储过程是同一个。
所以我很想向各位请教,sql server的存储过程是串行执行的吗?存储过程中会创建临时变量和临时表, 是不是这些导致存储过程排队?



lz 说的是两个问题,存储过程就跟其他select 等t-sql一样是可以并行的。 但并行时,使用的表,数据的行,是否锁定,内部的事务是否等待阻塞,锁定等等状况,是会体现为有前后处理顺序的。 毕竟资源的竞争还是存在的。
------解决方案--------------------
使用临时表可以.如果使用正式表有删除就会死锁