免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: liusz

再次请教: 如何避免表锁定 [复制链接]

论坛徽章:
0
发表于 2007-06-22 18:35 |显示全部楼层

避免不了的。

楼上那些说数据库不用加锁的都是屁话,加锁是数据库的基本,一般情况下都是服务器自己完成的,对傻瓜型用户来说透明。楼主这里说的加锁也是数据库自动完成的,不是你在写程序的时候,要先手工执行一个加锁命令。当你提交一个SQL命令的时候,服务器自己完成加锁和其它操作的,如果暂时不能获得锁,就会将命令放进等待队列,直到锁可用。mssql和mysql默认都是自动提交方式的,也就是说,每一条单独的SQL语句,在执行前都会加锁,执行完成后都会解锁,如果手工开始一个事务,那么锁定会维持到事务结束,锁定的级别和事务级别有关。
    读的时候,会先加一个读锁,如果已经存在读锁,也能获得,就是说可以同时读,其它更新数据库的操作都会加一个写锁,任何时候只能有一个写锁,有了写锁之后,不能在同时读或者写了。select和insert可以同时进行,如果表中无空白行时,这时的insert是在表结尾追加数据,不影响。
    上面有人说更改select和其它更新语句的优先权,但那只能解决select和其它更新语句的冲突,不能解决insert和delete这样都需要写锁的冲突,楼主可以试下insert delayed语句,这个插入语句会加一个delay锁,可以和写锁同时存在,而且客户端立即返回,服务器先缓存这个命令,有机会的时候再执行,实际的效果就是如果有一个进程在delete,而且未完成,这时提交一个insert delayed语句,这个语句会马上返回,让你觉得它已经完成了,实际数据库还没有真正写进去,等到delete进程结束了,mysql会完成后面的insert的。楼上还可以看下delete limit。

论坛徽章:
0
发表于 2007-06-22 18:40 |显示全部楼层
原帖由 wangyih 于 2005-9-7 10:19 发表
应用程序读写数据库是不需要加锁的。
我写了几百个数据库相关程序,从未加锁过。那个网站不是都insert,delete不都是大量并发,谁写程序加过锁?


我倒要问问,哪个网站都是insert和delete大量并发的?是select和insert大量并发差不多,这两个并发是没有问题的,网站delete的操作并不多,比起select和insert。

论坛徽章:
0
发表于 2007-06-22 18:44 |显示全部楼层
这里说的都是在mysql的myisam引擎上讨论的吧?myisam只支持表级锁定,innodb引擎支持事务,可以是行级锁定,但那个读写速度和myisam不是一个级别的。

论坛徽章:
0
发表于 2007-06-22 22:36 |显示全部楼层
原帖由 dragonbody 于 2007-6-22 18:35 发表
楼上那些说数据库不用加锁的都是屁话,加锁是数据库的基本,一般情况下都是服务器自己完成的,对傻瓜型用户来说透明。楼主这里说的加锁也是数据库自动完成的,不是你在写程序的时候,要先手工执行一个加锁命令。当 ...

不错,虽然我没写过数据库
可我学过数据库理论
哈哈:)
UP

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2007-06-23 12:55 |显示全部楼层
原帖由 dragonbody 于 2007-6-22 18:35 发表
楼上那些说数据库不用加锁的都是屁话,加锁是数据库的基本,一般情况下都是服务器自己完成的,对傻瓜型用户来说透明。楼主这里说的加锁也是数据库自动完成的,不是你在写程序的时候,要先手工执行一个加锁命令。当 ...


说的就是应用程序什么时候加锁,   扯什么乱麻七遭的, 狗屁都不如.

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2007-06-23 12:56 |显示全部楼层
原帖由 dragonbody 于 2007-6-22 18:40 发表


我倒要问问,哪个网站都是insert和delete大量并发的?是select和insert大量并发差不多,这两个并发是没有问题的,网站delete的操作并不多,比起select和insert。


像CU这样的网站是select和update并发,  没太多的insert.   select和update你应用程序加锁吗

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2007-06-23 12:58 |显示全部楼层
原帖由 liusz 于 2005-9-5 18:05 发表
请具体支支招吧。

两个程序处理同一个表格,程序A不断的向表格里面插入数据,数千条到数万条,每次可能需要数秒钟的时间,两次执行间睡眠1秒钟。程序B每30秒钟运行一次,计算,然后删除处理过的数据,程序B运行 ...


如果是根据计算的结果来处理删除数据,  那应用程序要加锁

论坛徽章:
0
发表于 2007-06-25 14:51 |显示全部楼层
发表一个新贴子,是insert还是update?

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2007-06-25 15:25 |显示全部楼层
原帖由 lizhuo 于 2007-6-25 14:51 发表
发表一个新贴子,是insert还是update?


发表一个新贴子 insert ,update,select都有
读帖子select,update, 都有. insert 不一定

论坛徽章:
0
发表于 2007-06-25 16:06 |显示全部楼层
原帖由 lizhuo 于 2007-6-25 14:51 发表
发表一个新贴子,是insert还是update?

发表一个新贴是insert,读贴是select,编辑你的旧贴是update,删除你的贴子是delete.所以一般网站是select和insert居多,update和delete很少。像mssql这样的数据库,它的update其实是delete+insert,也就是先删除旧的,再插入更新后的记录,在写它的触发器的时候会提到这个,MYSQL的update机制不是很清楚。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP