为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。一、概述MySQL有三种锁的级别:页级、表级、行级。MyISAM和MEMORY存储引擎采用的是表级锁(table level locking);BDB存储引擎采用的是页面锁(page levellocking ...
分类:
数据库 时间:
2018-04-20 14:36:27
阅读次数:
174
【参考书籍:mysql技术内幕 INNODB存储引擎】【参考了一些博客内容】 事务的隔离性由锁机制来实现,事务的原子性,一致性,持久性通过INNODB的redo log和undo log来完成。 redo log:称为重做日志,用来保证事务的原子性和持久性。 undo log:用来保证事务的一致性。 ...
分类:
数据库 时间:
2018-04-18 18:54:34
阅读次数:
220
本文参考自MySQL官网5.6版本参考手册的14.5.1,此小节说明MySQL的锁分类,此外还有14.5.2小节和14.5.3小节详述事务隔离级别和各SQL语句的加锁模式,后两节将单独写2篇笔记。 https://dev.mysql.com/doc/refman/5.6/en/innodb-lock ...
分类:
数据库 时间:
2018-04-16 10:18:33
阅读次数:
174
MyISAM锁机制: MyISAM只有表锁,分为X和S锁两种(或者叫read lock,write lock)。读加S锁,写加X锁。互相阻塞,因此并发DML性能并不好。 InnoDB锁机制: lock table/tables tab_name read/write; --手动加锁语句:(同样适用于 ...
分类:
数据库 时间:
2018-04-10 15:13:03
阅读次数:
242
我们知道通过FutureTask的get方法可以拿到Callable的返回值,起初猜想get方法应该是不断循环,判断Callable是否达到运行完成状态(会有标记位),如果未完成则wait,这个判断过程是需要加锁完成的,但查看其源码发现并没有锁机制,而是简单了wait,这样的话,难道不会出现Call ...
分类:
其他好文 时间:
2018-04-08 18:10:26
阅读次数:
199
概述: 锁机制在程序中是最常用的机制之一,当一个程序需要多线程并行访问同一资源时,为了避免一致性问题,通常采用锁机制来处理。在数据库的操作中也有相同的问题,当两个线程同时对一条数据进行操作,为了保证数据的一致性,就需要数据库的锁机制。每种数据库的锁机制都自己的实现方式,mysql作为一款工作中经常遇 ...
分类:
数据库 时间:
2018-04-04 12:33:57
阅读次数:
187
悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实 ...
分类:
其他好文 时间:
2018-03-25 14:25:23
阅读次数:
131
乐观锁与悲观锁不同的是,它是一种逻辑上的锁,而不需要数据库提供锁机制来支持当数据很重要,回滚或重试一次需要很大的开销时,需要保证操作的ACID性质,此时应该采用悲观锁而当数据对即时的一致性要求不高,重试一次不太影响整体性能时,可以采用乐观锁来保证最终一致性,同时有利于提高并发性通常,乐观锁采用版本号... ...
分类:
数据库 时间:
2018-03-24 23:55:20
阅读次数:
264
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 (2)一个线程持有锁会导致其它所有需要此锁的线程挂起。 (3)如果一个优先级高的线程等待一个优先级低的线 ...
分类:
编程语言 时间:
2018-03-22 22:39:15
阅读次数:
223
如果不用锁机制如何实现共享数据访问。(不要用锁,不要 用sychronized 块或者方法,也不要直接使用 jdk 提供的线程安全的数据结构,需要自己实现一个类来保证多个线程同时读写这个类中的共享数据是线程安全的,怎么 办 ?) 无锁化编程的常用方法 :件 硬件 CPU 同步原语 CAS(Compa ...
分类:
编程语言 时间:
2018-03-19 13:31:14
阅读次数:
283