存储过程高并发如何实现存储过程高并发的并发执行

存储过程编写经验和优化措施_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
存储过程编写经验和优化措施
&&存储过程编写经验和优化措施
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢大量并发调用存储过程 同时执行update
会不会死锁
[问题点数:40分,结帖人TravyLee]
本版专家分:17
结帖率 97.45%
CSDN今日推荐
本版专家分:107768
2002年2月 MS-SQL Server大版内专家分月排行榜第一2001年11月 MS-SQL Server大版内专家分月排行榜第一
2008年2月 MS-SQL Server大版内专家分月排行榜第二2007年7月 MS-SQL Server大版内专家分月排行榜第二2002年3月 MS-SQL Server大版内专家分月排行榜第二2002年1月 MS-SQL Server大版内专家分月排行榜第二2001年12月 MS-SQL Server大版内专家分月排行榜第二
2013年2月 MS-SQL Server大版内专家分月排行榜第三
本版专家分:17
本版专家分:17
本版专家分:17
本版专家分:14466
2013年3月 MS-SQL Server大版内专家分月排行榜第二2013年2月 MS-SQL Server大版内专家分月排行榜第二2013年1月 MS-SQL Server大版内专家分月排行榜第二
本版专家分:7357
本版专家分:17
本版专家分:14466
2013年3月 MS-SQL Server大版内专家分月排行榜第二2013年2月 MS-SQL Server大版内专家分月排行榜第二2013年1月 MS-SQL Server大版内专家分月排行榜第二
本版专家分:17
本版专家分:17
本版专家分:14466
2013年3月 MS-SQL Server大版内专家分月排行榜第二2013年2月 MS-SQL Server大版内专家分月排行榜第二2013年1月 MS-SQL Server大版内专家分月排行榜第二
本版专家分:214508
2014年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第二
2014年8月 总版技术专家分月排行榜第一2014年7月 总版技术专家分月排行榜第一2014年6月 总版技术专家分月排行榜第一2014年5月 总版技术专家分月排行榜第一2014年4月 总版技术专家分月排行榜第一2014年3月 总版技术专家分月排行榜第一2014年1月 总版技术专家分月排行榜第一2013年12月 总版技术专家分月排行榜第一
2013年10月 总版技术专家分月排行榜第二2012年11月 总版技术专家分月排行榜第二
匿名用户不能发表回复!|
其他相关推荐频繁执行存储过程为何数据库会挂死 - ITeye问答
用loadrunner 并发执行一段程序(10个并发),该程序最终就是调用存储过程delete十几张表的数据(有条件的删,不能truncate),前20分钟tips正常,但大概20分钟后tips出现严重抖动,发现数据库的磁盘写非常多,导致整个数据库都很卡
求高手解释!!!
另补充一下:由于业务特性,各个并发之间不可能删除同一条数据,所以排除了锁的可能
首先,请你解释下tips是什么东西
第二,为什么会产生磁盘写:delete需要把数据加载到buffer cache中这是,磁盘读。删除的时候同时会产生undo,这是磁盘写。整个过程中如果buffer cache和log cache满足一定条件后,会记录log和将脏数据写入磁盘,这是磁盘写。程序大约为10个左右的并发量,且每次删除10几张左右的表,那么就有可能同时进行100多个delete操作,如果delete的数据量较大的话,确实会另数据库响应迟钝
解决方案:
1、检查是否相关表是否有不必要或者错误的索引,维护索引的操作时非常消耗资源的。
2、避免频繁commit,存储过程中经常设置在操作多少行数据后进行提交,这可以避免给undo带来过大压力,但缺点也是明显的。就是log buffer会频繁的将日志写入归档日志中,确定你的过程的commit频率是否合适。
3、避免同时进行delete。由于不清楚你的程序设计,这点帮不到你
4、可以考虑在进行操作的时候修改表属性,不记录日志。
已解决问题
未解决问题其心诚,其志坚,其行必成
多线程调用存储过程问题
书写一存储过程:proc_importurltodb;
该存储过程的主要作用是将给定的URL拆分,以类链表的方式多个表分层次给予存储。
主要的流程为: 首先查询表,判断要插入的数据是否存在;如果存在,则返回相应的orderid;如果不存在,则插入数据,并且返回插入后的orderid。
由于数据量较大(千万级),因此程序中采用了ADO+多线程调用存储过程的方式,结果跑了一天的数据发现出现问题了;
由于多线程问题,可能会出现线程1插入同样数据,与此同时线程2插入同样数据,但由于库中没有要插入的数据,因此线程1和线程2会分别将数据给予插入,结果为同样的数据却出现了重复。。。。
呵呵,每天都例行公事,出点棘手的问题。没办法只能解决处理了:
方法一:数据库锁定
由于是多线程调用存储过程,而整个插入逻辑都由存储过程实现,因此如果需要锁定数据,仅能靠存储过程中实现。
通过查看sql server 帮助手册以及试验,发现采用
begin tran
SET @OrderNum = (SELECT
top 1 urldomainorderid FROM UrlDomainTable with(tablockx)
WHERE urlinfo = @UrlDomain)
commit tran
的方式可以确保插入时为唯一条数据。
但却也出现新问题了: 由于采用的是表级锁定, 在存储过程的整个事务中,其它事务无法使用该表;而整个系统的其它表则会同时使用该表。。。所以再换思路。
方法二:多线程同步
该方法需要对含有同样数据的信息进行多线程同步处理,主要思路为多线程插入数据时,判断是否为同样数据,如果同样,则同步。
实现复杂,不想实现~~·
方法三:唯一约束+错误处理
对插入数据表的特定列创建唯一约束,对于可能会涉及到多个列的,则创建组合唯一约束。
当出现相同数据多次插入时,则会由于唯一约束问题,而插入失败。此时通过TRY ....CATCH即可捕获错误信息,通过对错误信息判断,进而可以再次插入数据,而此时由于数据已经存在因此也就不存在多次插入的可能。
呵呵,问题总算得到解决,又得到一个教训。。。700多W白跑了。
不知道,各位看有没有其它更好的办法?
C#使用多线程进行并发处理
C#--多进程多线程访问数据库
没有更多推荐了,Jemeter 测试存储过程的并发调用
第一次使用Jemeter测试项目,测试的是多个存储过程的并发调用
准备工作:
先熟悉存储过程的脚本内容,确定了测试方案,需要编写两部分的脚本
1、创建压测数据的脚本
2、清理压测数据的脚本,目的是为了方便压测可以多次执行
做好这些工作,我们就可以开始压测了,操作步骤如下
下载相关数据库驱动jar包到Jmeter根目录的lib目录下,启动Jemeter
1、选择测试计划,添加一个线程组(添加-&Threads-&线程组)
2、选择线程组,添加一个计数器(添加-&配置原件-&计数器),配置运行的线程数量
3、选择线程组,添加一个JDBC(添加-&配置原件-&JDBC Connection Cofiguration),配置连接数据库的信息
4、选择线程组,添加一个CSV Data Set Config(添加-配置原件-&CSV Data Set Config),配置参数信息,支持多个参数传递,分隔符(自己配置分隔符)分开
5、选择线程组,添加一个JDBC Request( 添加-sample-&JDBC Request),用来执行SQL语句,并且可以将返回结果保存成变量
6、选择线程组,添加一个BeanShell Sampler( 添加-sample-&BeanShell Sampler),使用Bean shell内置对象vars可以对变量进行存取操作
7、选择线程组,添加一个JDBC Request( 添加-sample-&JDBC Request),用来执行SQL语句,这里用来写调用存储过程的脚本
8、选择线程组,添加一个查看结果树(添加-&监听器-&查看结果树),可以查看每个线程执行的请求数据、响应结果、执行结果等
9、选择线程组,添加一个查看结果树(添加-&监听器-&聚合报告),执行结果的综合统计
10、选择线程组,添加一个响应断言(添加-&断言-&响应断言),根据返回内容判断执行成功与否,jemeter 支持多个断言,允许使用变量
感受:Jemeter 比LoadRunner易用性较好,比较容易上手~
存储过程性能测试之_Sql执行速度的比较
使用 JMeter 完成常用的压力测试
jmeter接口测试及详细步骤
Oracle存储过程处理大批量数据性能测试
一个简单存储过程的测试
利用存储过程,生成N行数据进行压力测试脚本
没有更多推荐了,

我要回帖

更多关于 存储过程高并发 的文章

 

随机推荐