`
andyhu1007
  • 浏览: 199810 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

mysql数据库锁

阅读更多

一个数据库操作需要半个小时,并且在一个transaction 内,导致其它的操作因为locktimeout

 

为了解决这个问题,找了DBA 了解了数据锁的知识:

 

1. 两种类型的锁: locks:

     共享的(S) 锁允许一个事务去读一行(tuple )。

     独占的锁(X) 允许一个事务更新或删除一行。

 

2. 表锁定,页锁定,行锁定?

 

看看mysql 使用的是什么存储引擎,以区分对锁定的支持:SHOW TABLE STATUS FROM database_nameok ,是InnoDB ,它实现标准行级锁定。

 

锁的有效期决定于transaction 或者for update 这类语句在何时结束或者roll back

 

如果有select * from table for update 此类语句,那么就是表锁定。

如果有select * from table where id between 1 and 10000  for update 此类语句,那么就是页级锁定。

如果有select * from table where id= 1 for update 此类语句,那么就是行级锁定。

 

还有,索引也会影响到锁的多少。

 

锁直到transaction 结束后释放。

 

3. 乐观锁和悲观锁 :悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。 乐观锁机制往往基于系统中的数据存储逻辑,因此也具备一定的局限性。可以参见Hibernate 的乐观锁与悲观锁  

 

4. 事务隔离级别:InnoDB默认是可重复读的(REPEATABLE READ)。

 

如何解决此问题?

 

思路两种:

a. 优化查询、更新的sql 语句,减少页锁定、表锁定以降低冲突的可能性。

b. 增加transaction 粒度。

 

 

还有,如何解决死锁?

 

·         用Use SHOW INNODB STATUS来确定最后一个死锁的原因。这样可以帮助你调节应用程序来避免死锁。

·         总是准备着重新发出事务,如果它因为死锁而失败了。死锁不危险,再试一次。

·         经常提交你的事务。小事务更少地倾向于冲突。

·         如果你正使用锁定读,(SELECT ... FOR UPDATE或 ... LOCK IN SHARE MODE),试着用更低的隔离级别,比如READ COMMITTED。

·         以固定的顺序访问你的表和行。则事务形成良好定义的查询并且没有死锁。

 

等等,详见: 解决死锁问题

 

 

分享到:
评论

相关推荐

    mysql数据库锁+优化.pdf

    MySQL数据库中的锁机制是事务处理和并发控制的关键部分,它确保了数据的一致性和完整性。在MySQL中,尤其是InnoDB存储引擎,锁主要用于处理多用户同时访问同一数据时可能出现的冲突。以下是对锁的一些详细解释: 1....

    在Linux下,MySQL数据库的启动、停止和重启

    Mysql启动、停止、重启常用命令(都是在root背景下)  a、启动方式  1、使用 service 启动:  [root@localhost /]# service mysqld start (5.0版本是mysqld)  [root@szxdb etc]# service mysql start (5.5.7...

    mysql数据库英文文献.pdf

    MySQL数据库架构还包括查询优化器、缓存机制、锁机制等多个组件。 MySQL数据库架构的优点包括: * 高性能: MySQL数据库架构能够提供高性能的数据存储和查询功能。 * 灵活性: MySQL数据库架构能够支持多种存储...

    mysql数据库锁的产生原因及解决办法

    MySQL数据库锁是数据库管理系统为了保证数据的一致性和完整性而在并发操作中采取的一种机制。当多个用户同时访问数据库并试图修改同一数据时,如果没有适当的控制,可能会导致数据的不一致。数据库锁就是用来解决这...

    MySQL数据库原理及设计方法.pdf

    MySQL数据库是一种广泛使用的开源关系型数据库管理系统,其原理和设计方法是数据库管理员和开发者必须掌握的基础知识。本文将深入探讨MySQL的逻辑架构、并发控制、事务处理等方面。 首先,MySQL的逻辑架构分为三层...

    C++连接mysql数据库 源代码

    需要注意的是,MySQL数据库的线程安全性和锁机制也是需要考虑的因素。 7. **数据库设计**: 在编写源代码前,理解数据库的表结构、字段类型以及它们之间的关系至关重要。良好的数据库设计能够提升数据的存储效率和...

    MySQL数据库考试练习题 mysql试题集 共28页.pdf

    根据提供的文件信息,我们可以推断出这份文档主要包含MySQL数据库相关的考试练习题目。MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),因其性能稳定、易于使用和成本低廉等特点,在互联网应用开发中非常...

    MySQL 数据库监控攻略

    不过,基于标题、描述和标签,我们可以围绕MySQL数据库监控展开一系列深入讨论。 ### MySQL 数据库监控的重要性 在现代数据驱动的应用环境中,MySQL作为一款广泛使用的开源关系型数据库管理系统,其稳定性和性能...

    数据库锁,mysql和oracle不同,关系型数据库的锁

    数据库锁,mysql和oracle不同,关系型数据库的锁;数据库锁,mysql和oracle不同,关系型数据库的锁

    MySQL数据库性能监控与诊断

    - **锁等待**:数据库锁的等待时间和频率,反映并发控制的效率。 #### SQL运行 通过监控SQL运行情况,可以识别出执行效率低下或资源消耗大的SQL语句。这通常涉及到对慢查询日志的分析,以及对TopSQL的持续监控,以...

    MySQL数据库:锁定与解锁.pptx

    在MySQL数据库管理中,锁定与解锁是至关重要的概念,它们主要用于多用户环境下的并发控制,以确保数据的一致性和完整性。本课程的目标是使学习者理解锁定和解锁的基本原理,并能够熟练设置这两种操作。 锁定机制在...

    MySQL数据库原理及应用(第2版)(微课版)-课程标准.zip

    《MySQL数据库原理及应用(第2版)(微课版)》是一门深入解析MySQL数据库核心技术与实际应用的课程。该课程旨在帮助学习者掌握数据库的基础理论,理解MySQL的架构和工作原理,以及如何在实际项目中有效地运用MySQL...

    MySQL数据库考试题与答案.doc

    MySQL 数据库考试题与答案是 MySQL 数据库相关知识的考试题和答案的集合,涵盖了 MySQL 数据库的各种知识点,包括基本概念、数据类型、SQL 语句、索引、视图、存储过程、触发器、事务处理、锁机制、优化技术等。...

    mysql数据库应用与管理视频教程详细完整版

    内容包括dba视频教程中的mysql数据库应用与管理,第一章:配置mysql服务器 第二章:获取元数据 第三章:存储引擎 第四章:隔离级别与锁 第五章:使用分区 第六章:导出与导入数据 第七章:备份与恢复 第八章:使用...

    mysql数据库备份策略

    为了使用`mysqlhotcopy`,首先需要安装DBD-mysql Perl模块以支持该脚本与MySQL数据库的连接。然后可以通过设置Crontab任务来定期执行备份脚本,例如每天凌晨3点自动备份数据库。 ##### 3. 使用`mysqldump`备份...

    Linux下mysql数据库操作手册

    ### Linux下MySQL数据库操作知识点详解 #### 一、进入MySQL数据库 在Linux环境下,可以通过不同的方式连接MySQL数据库。 1. **以root身份直接进入MySQL**: ```sql mysql -u root -p ``` 输入命令后,系统会...

Global site tag (gtag.js) - Google Analytics