课件文稿成果锁_第1页
课件文稿成果锁_第2页
课件文稿成果锁_第3页
课件文稿成果锁_第4页
课件文稿成果锁_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 MySQL锁第十一讲MySQL支持锁类型锁定粒度:表级锁MyISAM,memory,innodb,BDB行级锁innodb(默认)页级锁BDBMyISAM表锁MyISAM仅支持表锁隐式加表锁:insert,update,delete等DML显式加表锁:lock tables t1 read|write;特殊:5.1以及以前alter tableMySQL的表锁模式兼容矩阵当前锁请求锁无读锁写锁读锁是是否写锁是否否show status like %table_locks_immediate%;立即获得锁show status like %table_locks_waited%;等待锁MyIS

2、AM表锁调度默认写锁队列优先MyISAM锁调度:1.-low-priority-updates2.set session|global low_priority_updates=13.insert,update,delete low_priority4.max_write_lock_count一个表超过一定写锁时,降低写请求优先级InnoDB事务事务ACID并发访问带来的读一致性问题:脏读,不可重复读,幻读如何解决?读之前加S锁,再读多版本控制(MVCC)innodb_lock_monitoruse test;create table innodb_lock_monitor(a int);In

3、noDB锁模式行锁1.S锁2.X锁表锁1.IS锁2.IX锁在加行锁之前必须先获得表级意向锁,否则等待innodb_lock_wait_timeout超时后根据innodb_rollback_on_timeout决定是否回滚事务InnoDB自增锁AUTO-INC locking内部计数器:select max(auto_inc_col) from t for update;表锁机制,insert结束后立即释放MySQL 5.1.221.开始使用轻量级mutex实现自增2.innodb_autoinc_lock_modeInnoDB自增锁insert分类:insert-likeinsert,rep

4、lace,insertselect,load datasimple inserts插入之前就能确定行数,insert(on update除外),replacebulk inserts:插入之前不能确定行数,insert|replaceselect,load datamixed-mode inserts:部分自增长,insert into .values(1,a),(null,b),(3,c)InnoDB自增锁innodb_autoinc_lock_mode:0:(traditional)旧的表锁方式,不推荐1:(consecutive)默认,对于simple inserts,用mutex对内存

5、中的计数器累加。对于bulk inserts,使用传统的auto-inc锁。safe for binlog using statement2:(interleaved)对于所有insert,用mutex实现自增,性能最大化unsafe for binlog using statement建议使用row-basedInnoDB显式加锁selectfor updateselect.lock in share modeInnoDB行锁实现算法通过对索引数据页上的record加锁算法实现:1.record lock:单个行记录的锁2.gap lock:间隙锁,锁定一个范围,不包括记录本身3.next-

6、key lock:(record lock)+(gap lock) 在tx_isolation=REPEATABLE-READ和innodb_locks_unsafe_for_binlog=off情况下, innodb默认算法 锁住间隙加上间隙边缘值的recordquestion:why next-key?show innodb status中hex值转换【int】同下。order_id int(10) default NULL, 这种int属于signed类型,需要去掉符号位。【bigint】id bigint(20) unsigned NOT NULL AUTO_INCREMENT COM

7、MENT 主键这种直接十六进制转十进制id bigint(20) signed NOT NULL AUTO_INCREMENT COMMENT 主键1.如果是正数,这种去掉头部符号位,再转。2.如果是负数,直接转,然后加上负号即可。【varchar】直接unhex即可InnoDB锁关系矩阵死锁MyISAM,无死锁InnoDB逐行加锁,导致死锁死锁产生的四个条件:1.互斥条件:一个资源每次只能被一个进程使用; 2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放; 3.不剥夺条件:进程已获得的资源,在没使用完之前,不能强行剥夺; 4.循环等待条件:多个进程之间形成一种互相循环等

8、待资源的关系死锁show engine innodb statusG;查看死锁- LATEST DETECTED DEADLOCK - 120111 9:39:36 * (1) TRANSACTION: 事务id,持续时间,读取类型发生死锁时正在执行的sql* (1) WAITING FOR THIS LOCK TO BE GRANTED: 想要获取什么样的锁,并等待锁住record的信息* (2) TRANSACTION:事务id,持续时间,读取类型发生死锁时正在执行的sql* (2) HOLDS THE LOCK(S): 当前事务正持有的锁* (2) WAITING FOR THIS LOCK TO BE GRANTED: 想要获取什么样的锁,并等待* WE ROLL BACK TRANSACTION (1|2) 死锁死锁时,innod

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论