sql并发问题 首先,这个问题需要研究你的原始需求,其实为什么要写个这样的存储过程呢?应该有更好的方案可以满足你的需要。其次,如果你还是要这样写,事务隔离级别将会使用:SET TRANSACTION ISOLATION LEVEL REPEATABLE READ,这样的话并发性是很差。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我写了个存储过程gerNumber,该存储过程先获取表id的最大值,然后计算出一个编号,在数据量很大或者并并发很大的时候就会有问题, 暂时还没有碰到,但是肯定会发生的,请问这样的并发应该怎么样避免, 我的方法是锁住表,或者用事务隔离级别(但是不知道那个级别才适合),===========================最好不要取id的最大值,这样会出现很多隐藏问题最好是用IDENTITY.如果是为了解决并发问题,那么可以采取时间戳的办法,很容易搞定最好别锁表,锁来锁去越锁越乱. 换种方式可能会好一点,如增一个张表专门用来存放IDTable: TableID-------------------------TABLE_NAME Max_ID'表1' 100001'表2' 100222再写一个函数CREATE FUNC GET_ID(table_name varchar(16)) returns intasdeclare @ID int;UPDATE TableID SET = Max_ID + 1 WHERE TABLE_NAME = '表1'SELECT @ID = Max_ID FROM TableID WHERE TABLE_NAME = '表1'RETURN @ID 我是这样测试的,在控制台调用存储过程addPointByGame,用1000到50000个线程测试,每隔1毫秒执行,有很多编号重复了,但是都执行成功了然后修改存储过程addPointByGame,也就是上面我贴出来的,用用1000到50000个线程测试,每隔1毫秒执行,没有编号重复,但是不会全部都执行成功比如1000个就有13个执行失败,10000个就有300多个失败,这样的数据量还算可以吗,因为用了悲观锁,所有有并发的话就执行失败,这样的数据量不知道行不行,感觉失败的有点多 远程连接sql插入表的语句 问一下,我现在要查看一个数据库的日志文件,我要用什么软件才可以看到啊 如果准实时的从sql sever的表导入数据到oracle对应表中 这个不知道算不算交叉表,不知道怎么做,请朋友帮忙看看。 SQL2000 DTS包的密码忘记了,有办法吗? 怎么让SQL语句里这么运算呢 求救:从两个表中的内容建立新表 请教如何选择字段类型 多表合并成一个表,在线等待! DB2 数据库的棘手问题 一个复杂sql语句的书写问题 谁来帮我看看 哪里错了! 谢谢大家~~
暂时还没有碰到,但是肯定会发生的,请问这样的并发应该怎么样避免,
我的方法是锁住表,或者用事务隔离级别(但是不知道那个级别才适合),
===========================
最好不要取id的最大值,这样会出现很多隐藏问题
最好是用IDENTITY.如果是为了解决并发问题,那么可以采取时间戳的办法,很容易搞定最好别锁表,锁来锁去越锁越乱.
Table: TableID
-------------------------
TABLE_NAME Max_ID
'表1' 100001
'表2' 100222再写一个函数
CREATE FUNC GET_ID(table_name varchar(16))
returns int
asdeclare
@ID int;UPDATE TableID SET = Max_ID + 1 WHERE TABLE_NAME = '表1'
SELECT @ID = Max_ID FROM TableID WHERE TABLE_NAME = '表1'RETURN @ID
然后修改存储过程addPointByGame,也就是上面我贴出来的,用用1000到50000个线程测试,每隔1毫秒执行,没有编号重复,但是不会全部都执行成功
比如1000个就有13个执行失败,10000个就有300多个失败,这样的数据量还算可以吗,
因为用了悲观锁,所有有并发的话就执行失败,这样的数据量不知道行不行,感觉失败的有点多