同一个存储过程是否能够并发执行

LanBin520 2013-07-02 10:27:58
公司的逻辑都写在存储过程里。
最近发现有个导出csv的功能速度很慢,在调用的存储过程里加了日志,然后打开两个页面,第一个页面选择比较复杂的条件,确保它能执行较长的时间(比如30秒), 第二个页面选择简单的条件,一般来说3s可以执行完毕。
先在第一个页面中点击按钮执行,随后马上转到第二个页面点击执行(间隔大概1-2秒)。发现第二个页面的执行速度变的非常慢,而且是在第一个页面执行完毕后才能完成。
看存储过程的日志,第二个页面调用的时间在第一个页面调用的时间之后。也就是说,第二个页面调用的存储过程是在第一个页面调用的存储过程执行完毕后才开始的。这里,存储过程是同一个。
所以我很想向各位请教,sql server的存储过程是串行执行的吗?存储过程中会创建临时变量和临时表, 是不是这些导致存储过程排队?
...全文
2656 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
会飞的鱼1 2013-07-02
  • 打赏
  • 举报
回复
使用临时表可以.如果使用正式表有删除就会死锁
LanBin520 2013-07-02
  • 打赏
  • 举报
回复
存储过程有2千多行,就不贴了。。。
LanBin520 2013-07-02
  • 打赏
  • 举报
回复
我现在奇怪的是,在存储过程中并没有使用什么技巧来避免存储过程是不可重入的,但是为什么从日志看第二个调用总是在第一个调用完成之后才开始? 日志(存储在一张表中)如下: Jul 2 2013 5:02:32:913AM SP start 。。。 Jul 2 2013 5:03:03:263AM SP end Jul 2 2013 5:03:03:720AM SP start 。。。 Jul 2 2013 5:03:07:697AM SP end 出发两个调用的时间间隔很短。 从日志里看,第二个调用执行的时间不是很长,但是在页面上等的时间=第一个调用执行时间+第二个调用执行时间。
Mr_Nice 2013-07-02
  • 打赏
  • 举报
回复
引用 楼主 LanBin520 的回复:
公司的逻辑都写在存储过程里。 最近发现有个导出csv的功能速度很慢,在调用的存储过程里加了日志,然后打开两个页面,第一个页面选择比较复杂的条件,确保它能执行较长的时间(比如30秒), 第二个页面选择简单的条件,一般来说3s可以执行完毕。 先在第一个页面中点击按钮执行,随后马上转到第二个页面点击执行(间隔大概1-2秒)。发现第二个页面的执行速度变的非常慢,而且是在第一个页面执行完毕后才能完成。 看存储过程的日志,第二个页面调用的时间在第一个页面调用的时间之后。也就是说,第二个页面调用的存储过程是在第一个页面调用的存储过程执行完毕后才开始的。这里,存储过程是同一个。 所以我很想向各位请教,sql server的存储过程是串行执行的吗?存储过程中会创建临时变量和临时表, 是不是这些导致存储过程排队?
lz 说的是两个问题,存储过程就跟其他select 等t-sql一样是可以并行的。 但并行时,使用的表,数据的行,是否锁定,内部的事务是否等待阻塞,锁定等等状况,是会体现为有前后处理顺序的。 毕竟资源的竞争还是存在的。
nzperfect 2013-07-02
  • 打赏
  • 举报
回复
当然可以并行,如果没能并行,有可能在等待资源,你可以贴一下存储过程内容来看看。
LanBin520 2013-07-02
  • 打赏
  • 举报
回复
@rockyljt 非常感谢。 @beyond789654 请举个例子?是不是要使用排他锁来达到来避免并行?
走你_ 2013-07-02
  • 打赏
  • 举报
回复
当然可以并行,决定是否能并行的关键因素是存储过程里边如何写的
---涛声依旧--- 2013-07-02
  • 打赏
  • 举报
回复
引用 2 楼 LanBin520 的回复:
@rockyljt 查询结果最好放在临时表里,就是说临时表的作用范围只是当前存储过程,和并发执行的同一存储过程的临时表结果不会冲突了?是这个意思不?
是的
引用 2 楼 LanBin520 的回复:
@rockyljt 有没有什么设置让存储过程调用不排队?
这个是sql server自己的机制控制的,我们自己不用再考虑了
LanBin520 2013-07-02
  • 打赏
  • 举报
回复
@rockyljt 谢谢,不过我不是很明白。既然会并发执行,怎么还会存在排队情况呢? 查询结果最好放在临时表里,就是说临时表的作用范围只是当前存储过程,和并发执行的同一存储过程的临时表结果不会冲突了?是这个意思不? 有没有什么设置让存储过程调用不排队?
---涛声依旧--- 2013-07-02
  • 打赏
  • 举报
回复
可以并发执行的,存储过程调用时存在排队情况,里面的临时表不会 如果查询结果是存在一个固定表里面的话,那可能会影响你的查询结果的(最好用临时表)
LanBin520 2013-07-02
  • 打赏
  • 举报
回复
最终测试发现是web端第二个页面触发事件晚了,存储过程这边没有问题,研究中。。。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧