mysql 行锁 并发_mysql 并发 行锁 inoodb

http://www.cnblogs.com/hitwtx/archive/2011/09/12/2174297.html

1. 锁是数据库区别于文件系统的重要特性之1,锁机制用于管理对共享文件的并发访问

innodb使用的是行级锁

myisam,使用的是表级锁,在并发条件下,读操作没有问题,但是并发插入会有性能上的影响

sql server 2005之前的版本都是页级锁的,相对于myisam言,并发访问上性能有所提高,在2005以及之后,sql

server 支持乐观并发和悲观并发,在乐观并发下执行行级锁,但实现方式和与innodb不相同,在sql

server中,锁是一种稀有的资源,而在mysql innodb中,锁没有相关的开销,可以同时得到并发性和一致性

2. innodb的锁类型

共享锁和排他锁

共享锁 (S Lock): 允许事务读一行数据

排他锁(X Lock):允许事务写或者修改一行数据

,可以在一行上使多个S锁,但是只要有X锁,就不能在加其他的锁了

innodb存储引擎支持多粒度锁定,这种锁定允许在表级和行级上的锁同时存在,为了支持在不同粒度上架锁,innodb  提供了一种意向锁,意向锁是表级锁,且分为 意向共享锁和排他共享锁

+++++++++++++++++++++++++++++++++++++

http://blog.csdn.net/xiaoxu0123/article/details/5736172

获取InnoDB行锁争用情况

可以通过检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况:

mysql> show status like 'innodb_row_lock%';

+-------------------------------+-------+

| Variable_name                 | Value |

+-------------------------------+-------+

| InnoDB_row_lock_current_waits | 0     |

| InnoDB_row_lock_time          | 0     |

| InnoDB_row_lock_time_avg      | 0     |

| InnoDB_row_lock_time_max      | 0     |

| InnoDB_row_lock_waits         | 0     |

+-------------------------------+-------+

5 rows in set (0.01 sec)

如果发现锁争用比较严重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比较高,还可以通过设置InnoDB Monitors来进一步观察发生锁冲突的表、数据行等,并分析锁争用的原因。

具体方法如下:

mysql> CREATE TABLE innodb_monitor(a INT) ENGINE=INNODB;

Query OK, 0 rows affected (0.14 sec)

然后就可以用下面的语句来进行查看:

mysql> Show innodb status/G;

*************************** 1. row ***************************

Type: InnoDB

Name:

Status:

------------

TRANSACTIONS

------------

Trx id counter 0 117472192

Purge done for trx's n:o < 0 117472190 undo n:o < 0 0

History list length 17

Total number of lock structs in row lock hash table 0

LIST OF TRANSACTIONS FOR EACH SESSION:

---TRANSACTION 0 117472185, not started, process no 11052, OS thread id 1158191456

MySQL thread id 200610, query id 291197 localhost root

---TRANSACTION 0 117472183, not started, process no 11052, OS thread id 1158723936

MySQL thread id 199285, query id 291199 localhost root

Show innodb status

监视器可以通过发出下列语句来停止查看:

mysql> DROP TABLE innodb_monitor;

Query OK, 0 rows affected (0.05 sec)

置监视器后,在SHOW INNODB

STATUS的显示内容中,会有详细的当前锁等待的信息,包括表名、锁类型、锁定记录的情况等,便于进行进一步的分析和问题的确定。打开监视器以后,默认

情况下每15秒会向日志中记录监控的内容,如果长时间打开会导致.err文件变得非常的巨大,所以用户在确认问题原因之后,要记得删除监控表以关闭监视

器,或者通过使用“--console”选项来启动服务器以关闭写日志文件。

++++++++++++++++++++++++++++++++++

20.3.4 InnoDB行锁实现方式

http://book.51cto.com/art/200803/68127.htm

阅读(661) | 评论(0) | 转发(1) |

给主人留下些什么吧!~~

评论热议

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,是一种用于控制并发访问的机制。它可以防止多个事务同时修改或读取同一数据,以确保数据的一致性和完整性。 在高并发场景下,是非常重要的,因为它可以避免数据的竞争和冲突。当多个事务同时操作同一数据时,如果没有机制,可能会出现以下问题: 1. 脏读(Dirty Read):一个事务读取到了另一个事务未提交的数据。 2. 不可重复读(Non-repeatable Read):一个事务在多次读取同一数据时,发现数据不一致。 3. 幻读(Phantom Read):一个事务在多次查询同一范围的数据时,发现有新的数据满足了查询条件。 MySQL提供了两种的实现方式: 1. 共享(Shared Lock):也称为读,多个事务可以同时持有共享,用于防止其他事务进写操作。 2. 排他(Exclusive Lock):也称为写,只能有一个事务持有排他,用于防止其他事务进读或写操作。 在实际使用中,可以通过以下方式来使用提高高并发环境下的性能和数据完整性: 1. 仅在必要时使用会阻塞其他事务的访问,因此需要评估是否真正需要使用来解决并发冲突。 2. 提高事务执效率:优化事务的逻辑和查询语句,减少事务持有的时间,从而减少对并发性能的影响。 3. 合理设置事务隔离级别:MySQL提供了多种事务隔离级别,如读未提交、读已提交、可重复读和串化。根据业务需求和数据一致性要求选择合适的隔离级别。 4. 使用索引:合理创建索引可以减少的范围,提高并发性能。 需要注意的是,的使用需要谨慎,过度使用或不当使用可能会导致死和性能问题。因此,在设计和实现时应该综合考虑业务需求、数据一致性和性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值