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

请教一个优化的思路问题
有过程:
usp_main
usp_a
 usp_a1
 usp_a2
usp_b
 usp_b1
usp_c
...
这些过程是对一系列数据的处理,从导入TXT,然后整理数据。。。
由usp_main开始,然后逐个调用,sp中都未写事务
现在想优化一下整体性能,从加事务方面(先不谈其他方面)

那么问题在于,begin tran怎么加好?有什么讲究?
是只要加外面就好:
begin tran
    usp_main
commit tran
还是修改每个过程:
alter proc usp_main
as
begin tran
   ....
commit tran

------解决方案--------------------
如果之间没有什么特别的关联,比如说必须全部成功或者全部失败,并且持续时间长,可以分开多个事务,否则,一个事务也可以
------解决方案--------------------
这样加比较好:

begin tran
     usp_main
 commit tran
------解决方案--------------------
除了性能,最重要的是数据一致性,
------解决方案--------------------
可以用这种方式来,加强错误处理:

begin try
begin tran
exec proc_t 1
--select '执行成功'
commit tran
end try
begin catch
  --select '执行失败'
  if @@trancount >0 
     rollback
end catch

------解决方案--------------------
这样的好处是,你不需要修改每个存储过程。

只需要在调用的时候,写上begin tran 和错误捕获 begin try
------解决方案--------------------
引用:
过程里有建临时表,各种索引,动态语句
事务对这些有帮助作用吗?


应该没什么帮助作用。
------解决方案--------------------
begintrans可以写在程序端,捕获异常就rollback ,执行正常完毕就commit;
存储过程的优化还是多关注表结构设计,索引优化上面来。。。
------解决方案--------------------
加在最外面最简单,但锁定的时间最长
------解决方案--------------------
事务用于数据一致性了,有些没有必要加事务的
如何加要看楼主数据处理逻辑了
------解决方案--------------------
预先清理检测数据
再一次性导入处理