12
返回列表 发新帖
楼主: myownstars

关于CR块的一些疑问

[复制链接]
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
11#
发表于 2015-2-21 01:16 | 只看该作者
Thanks sqysl. Indeed I don't seem to hear "CR block" in MySQL, or MySQL using InnoDB. You explained it well.

I wonder how much the row-level locking in MySQL impacts its performance. Everything has advantage and disadvantage at the same time.

使用道具 举报

回复
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
12#
发表于 2015-2-22 17:59 | 只看该作者
mysql最大的特点就是有免费版,再就是安装、使用的简单灵活,innodb锁机制实现的也不错,避免了读写阻塞,行锁是以页为单位通过每个锁结构里的位图实现的,这样,虽然比oracle占用较多内存,但相较其他有些数据库内存占用情况还算好些。因为mysql innodb使用场景一般是短事务,所以,锁内存问题并不会很明显,锁机制方面的性能也不错。但在实际使用中,也会出现一些问题,例如:hash join问题,大并发下的性能问题等。只有在大数据量操作的场景下, hash join问题才会表现明显。也有人提出过mysql的innodb没能实现完全的一致性读,但这点我也没深入研究和测试过。

使用道具 举报

回复
论坛徽章:
10
2011新春纪念徽章
日期:2011-02-18 11:43:342015年新春福章
日期:2015-03-06 11:58:18懒羊羊
日期:2015-03-04 14:52:11马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09优秀写手
日期:2013-12-18 09:29:11三菱
日期:2013-08-30 20:37:412013年新春福章
日期:2013-02-25 14:51:24ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51暖羊羊
日期:2015-06-22 15:51:36
13#
 楼主| 发表于 2015-2-24 20:06 | 只看该作者
>>一个包含多个行锁的事务里的某个单独的行锁,不可能单独被释放,所以,有没有锁结构,对判断行锁的释放没影响。
应该可以通过rollback to savepoint可以释放所占的行锁,
DML1
savepoint a;
DML2
rollback to savepoint a;
此时DML2所占的行锁应该已经释放,其他事务可以对这些行进行DML


使用道具 举报

回复
论坛徽章:
10
2011新春纪念徽章
日期:2011-02-18 11:43:342015年新春福章
日期:2015-03-06 11:58:18懒羊羊
日期:2015-03-04 14:52:11马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09优秀写手
日期:2013-12-18 09:29:11三菱
日期:2013-08-30 20:37:412013年新春福章
日期:2013-02-25 14:51:24ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51暖羊羊
日期:2015-06-22 15:51:36
14#
 楼主| 发表于 2015-2-24 20:23 | 只看该作者
sqysl 发表于 2015-2-22 17:59
mysql最大的特点就是有免费版,再就是安装、使用的简单灵活,innodb锁机制实现的也不错,避免了读写阻塞,行 ...

你指的hash join是?貌似mysql只实现了nested loop join

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
15#
发表于 2015-2-25 04:14 | 只看该作者
> 可以通过rollback to savepoint可以释放所占的行锁,

I thought about that. But rollback to savepoints is not the same as individually control (rollback etc) each line lock. Suppose locks are placed on lines 1, 2, and 3, in that order, and I want to release the lock on 1 only. You can't release a lock created earlier than a lock you want to preserve. Rollback to a savepoint can do the opposite.

使用道具 举报

回复
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
16#
发表于 2015-2-25 14:01 | 只看该作者
myownstars 发表于 2015-2-24 20:06
>>一个包含多个行锁的事务里的某个单独的行锁,不可能单独被释放,所以,有没有锁结构,对判断行锁的释放没 ...

呵呵,你这还是说的事务,你也没单独操作一个行锁,其他有行锁结构的数据库也一样,都是操作的事务,所以,这对判断行锁释放没什么意义。

使用道具 举报

回复
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
17#
发表于 2015-2-25 14:03 | 只看该作者
myownstars 发表于 2015-2-24 20:23
你指的hash join是?貌似mysql只实现了nested loop join

对的,确切的说是innodb引擎,我只是通过举一些例子说明一个道理,并不是为了列出所有的优点和缺点。

使用道具 举报

回复
论坛徽章:
10
2011新春纪念徽章
日期:2011-02-18 11:43:342015年新春福章
日期:2015-03-06 11:58:18懒羊羊
日期:2015-03-04 14:52:11马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09优秀写手
日期:2013-12-18 09:29:11三菱
日期:2013-08-30 20:37:412013年新春福章
日期:2013-02-25 14:51:24ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51暖羊羊
日期:2015-06-22 15:51:36
18#
 楼主| 发表于 2015-3-2 15:50 | 只看该作者
sqysl 发表于 2015-2-25 14:03
对的,确切的说是innodb引擎,我只是通过举一些例子说明一个道理,并不是为了列出所有的优点和缺点。

>>innodb并不是任何时候都会使用行锁,基本流程是这样的,先获取行所在页信息,然后通过页信息获取锁结构入口,然后得到锁结构以获取页上每行的锁信息,但当不能走索引时,就会首先对表加表锁,对全表进行扫描以获取符合条件的行的页信息

请问相应的加锁API名字是什么,想阅读一下源码

使用道具 举报

回复
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
19#
发表于 2015-3-3 17:30 | 只看该作者
myownstars 发表于 2015-3-2 15:50
>>innodb并不是任何时候都会使用行锁,基本流程是这样的,先获取行所在页信息,然后通过页信息获取锁结构 ...

呵呵,不好意思,才看到你的回帖,API?你是指源码里的实现函数吧?函数不止一个,你想想啊,首先得初始化和分配,然后,还有操作锁,检查锁,释放锁,锁等待等一些列的行为,我只是大概理解原理,那些具体的东西,我也回答不出来,好久不碰那些东西了,如果你真想看源码,还是找些类似的专业书看吧,还有,那东西比较耗费时间。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表