一个数据库操作需要半个小时,并且在一个transaction
内,导致其它的操作因为lock
而timeout
。
为了解决这个问题,找了DBA
了解了数据锁的知识:
1.
两种类型的锁: locks:
共享的(S)
锁允许一个事务去读一行(tuple
)。
独占的锁(X)
允许一个事务更新或删除一行。
2.
表锁定,页锁定,行锁定?
看看mysql
使用的是什么存储引擎,以区分对锁定的支持:SHOW TABLE STATUS FROM database_name
。ok
,是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。
·
以固定的顺序访问你的表和行。则事务形成良好定义的查询并且没有死锁。
等等,详见: 解决死锁问题
分享到:
相关推荐
全局锁:针对整个数据库执行全局层面的锁,上锁后任何对该数据库的DDL、DML语句都*无法执行,只能进行查询操作。一般使用场景是用于数据库备份。但不建议使用该方法,因为阻塞所有非读操作会影响业务的正常执行。因此 ...
Mysql启动、停止、重启常用命令(都是在root背景下) a、启动方式 1、使用 service 启动: [root@localhost /]# service mysqld start (5.0版本是mysqld) [root@szxdb etc]# service mysql start (5.5.7...
主要介绍了mysql数据库锁的产生原因及解决办法,需要的朋友可以参考下
数据库锁,mysql和oracle不同,关系型数据库的锁;数据库锁,mysql和oracle不同,关系型数据库的锁
MySQL数据库优化(五):锁 25 MySQL数据库优化(六):优化数据库结构 29 MySQL数据库优化(七):MySQL如何使用索引 31 MySQL数据库优化(九) 34 MySQL数据库优化(八):MyISAM 索引缓存 36 MySQL数据库优化(十...
内容包括dba视频教程中的mysql数据库应用与管理,第一章:配置mysql服务器 第二章:获取元数据 第三章:存储引擎 第四章:隔离级别与锁 第五章:使用分区 第六章:导出与导入数据 第七章:备份与恢复 第八章:使用...
数据库编程 锁定与解锁 课程目标 了解 —— 锁定和解锁的概念; 掌握 —— 锁定和解锁的设置; 锁定与解锁 MySQL提供了LOCK TABLES语句来锁定当前线程的表,语法格式如下: LOCK TABLES tbl_name [AS alias] {READ ...
在并发访问情况下,很有可能出现不可重复读等等读现象。为了更好的应对高并发,封锁...乐观锁和悲观锁不仅在关系数据库里应用,在Hibernate、Memcache等等也有相关概念。 悲观锁:也即悲观并发控制,Pessimistic Concur
mysql数据库规范全文共3页,当前为第1页。mysql数据库规范全文共3页,当前为第1页。mysql数据库规范 mysql数据库规范全文共3页,当前为第1页。 mysql数据库规范全文共3页,当前为第1页。 规范名称 具体内容 解释 ...
MySQL数据库-事务、锁及SQL优化
系统介绍mysql锁机制
主要分为3部分: 1.DBSqlMan是多线程访问mysql的动态库 2.mysql5,开源的windows下使用的mysql2次开发库,...其他接口主要是后续扩展的,比如获取表字段,对表进行加减锁,获取计算机信息等,不是核心的接口,不做解释
MySQL 数据库锁定机制,全揭秘,非常不错的,实践文档
本书使用量身定制的案例全面讲解MySQL基础知识以及MySQL5.6新特性,InnoDB全文检索、触发器、存储过程、函数、事务、锁等概念,全部融入该案例。 本书尽量将抽象问题形象化、图形化,复杂问题简单化。即便读者没有...
安装完毕后在cmd 里面 以 mysql -uroot -p; 登入 然后 显示可用数据库: show databases; 选择 一个数据库操作:如默认的test 或者 自己建立一个数据库 create database mydatabase; 然后在mydatabase 里制表 很...
主要二个主题:锁机制和全局机制 锁机制:概述,三锁:表锁和行锁,页锁
项目9--MySQL数据库中的事务机制与锁机制.pptx
相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level ...
并发处理带来的问题中,更新丢失可以完全避免,由应用对数据加锁即可。脏读、不可重读度、幻读,其实都是数据库的一致性问题,...我们的数据库锁,就是为了构建这些隔离级别存在的。mysql默认的隔离级别为可重复读。