`
andyhu1007
  • 浏览: 193314 次
  • 性别: 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

    全局锁:针对整个数据库执行全局层面的锁,上锁后任何对该数据库的DDL、DML语句都*无法执行,只能进行查询操作。一般使用场景是用于数据库备份。但不建议使用该方法,因为阻塞所有非读操作会影响业务的正常执行。因此 ...

    在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数据库锁的产生原因及解决办法

    主要介绍了mysql数据库锁的产生原因及解决办法,需要的朋友可以参考下

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

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

    MySQL数据库优化

    MySQL数据库优化(五):锁 25 MySQL数据库优化(六):优化数据库结构 29 MySQL数据库优化(七):MySQL如何使用索引 31 MySQL数据库优化(九) 34 MySQL数据库优化(八):MyISAM 索引缓存 36 MySQL数据库优化(十...

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

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

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

    数据库编程 锁定与解锁 课程目标 了解 —— 锁定和解锁的概念; 掌握 —— 锁定和解锁的设置; 锁定与解锁 MySQL提供了LOCK TABLES语句来锁定当前线程的表,语法格式如下: LOCK TABLES tbl_name [AS alias] {READ ...

    MySQL数据库锁机制原理解析

    在并发访问情况下,很有可能出现不可重复读等等读现象。为了更好的应对高并发,封锁...乐观锁和悲观锁不仅在关系数据库里应用,在Hibernate、Memcache等等也有相关概念。 悲观锁:也即悲观并发控制,Pessimistic Concur

    mysql数据库规范.docx

    mysql数据库规范全文共3页,当前为第1页。mysql数据库规范全文共3页,当前为第1页。mysql数据库规范 mysql数据库规范全文共3页,当前为第1页。 mysql数据库规范全文共3页,当前为第1页。 规范名称 具体内容 解释 ...

    MySQL数据库-事务、锁及SQL优化

    MySQL数据库-事务、锁及SQL优化

    mysql 锁机制及mysql中的锁介绍.pdf

    系统介绍mysql锁机制

    多线程访问mysql数据库

    主要分为3部分: 1.DBSqlMan是多线程访问mysql的动态库 2.mysql5,开源的windows下使用的mysql2次开发库,...其他接口主要是后续扩展的,比如获取表字段,对表进行加减锁,获取计算机信息等,不是核心的接口,不做解释

    MySQL 数据库锁定机制

    MySQL 数据库锁定机制,全揭秘,非常不错的,实践文档

    MySQL数据库基础与实例教程 中文PPT版 4.25MB.rar

    本书使用量身定制的案例全面讲解MySQL基础知识以及MySQL5.6新特性,InnoDB全文检索、触发器、存储过程、函数、事务、锁等概念,全部融入该案例。 本书尽量将抽象问题形象化、图形化,复杂问题简单化。即便读者没有...

    mysql的简单应用

    安装完毕后在cmd 里面 以 mysql -uroot -p; 登入 然后 显示可用数据库: show databases; 选择 一个数据库操作:如默认的test 或者 自己建立一个数据库 create database mydatabase; 然后在mydatabase 里制表 很...

    Mysql高级:锁

    主要二个主题:锁机制和全局机制 锁机制:概述,三锁:表锁和行锁,页锁

    项目9--MySQL数据库中的事务机制与锁机制.pptx

    项目9--MySQL数据库中的事务机制与锁机制.pptx

    MYSQL 解锁与锁表介绍

    相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level ...

    数据库事务及锁机制面试题

    并发处理带来的问题中,更新丢失可以完全避免,由应用对数据加锁即可。脏读、不可重读度、幻读,其实都是数据库的一致性问题,...我们的数据库锁,就是为了构建这些隔离级别存在的。mysql默认的隔离级别为可重复读。

Global site tag (gtag.js) - Google Analytics