摘要: InnoDB 是一个数据多版本的存储引擎,它会保持它修改的数据的旧版本数据以此来支持事务特性,比如并发操作和事务的回滚。这些旧版本数据存储在一个叫做rollback segment的数据结构中(回滚段),当事务回滚的时候,Innodb会使用回滚段的数据来执行事务的撤销操作,也会使用这些老版本的数据来 阅读全文
posted @ 2019-06-28 10:52 接天居士 阅读(238) 评论(0) 推荐(0) 编辑
摘要: Change Buffer属于Innodb内存中的一块结构,它主要用来缓存对二级索引数据的修改(insert, update, delete)操作当二级索引不在Buffer pool中的时候,这些写操作会在稍后合并到二级索引当二级索引被其他读请求加载到buffer pool的时候。 不同于聚簇索引, 阅读全文
posted @ 2019-06-28 15:43 接天居士 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 如下图展示了Innodb内存中和磁盘的结构: 内存中结构主要有如下几种: buffer pool change buffer adaptive hash index (自适应的hash索引) Log buffer 磁盘中的结构主要有下面几类: Tables Indexs Tablespaces In 阅读全文
posted @ 2019-06-28 13:19 接天居士 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。未授权读取也称为读未提交(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。授权读取也称为读提交(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。可重复读取(Repeatable Read)可重复读取(Repeatable Re 阅读全文
posted @ 2014-02-20 15:04 接天居士 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 总结一下oracle中会使索引无效的情况1 无where条件;2 索引列进行运算时;3 使用like,并且通配符在前的情况;4字符型字段为数字时在where条件里不添加引号;5not in ,not exist;6 当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况;7单独引用复合索引里非第一位置的索引列;8如果column1和column2是同一个表的字段,含有条件column1 column2或column1 = column2; 阅读全文
posted @ 2014-02-18 11:20 接天居士 阅读(808) 评论(0) 推荐(0) 编辑
摘要: java虚拟机在执行java程序的过程中会把它所管理的内存划分为不同的区域,这些区域有各自不同的用途,以及创建和销毁时间,java虚拟机所管理的区域有:方法区、虚拟机栈、本地方法栈、堆、程序计数器等。1 程序计数器: 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程执行的字节码的行号指示器,由于虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现,在任何一个确定的时刻,一个处理器只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储,如果线程正在执行是一个java方法,这个计数器. 阅读全文
posted @ 2014-02-15 23:21 接天居士 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 最近在看多线程方面的内容,注意到java中原来除了Runnable和Thread之外还有Callable的方式实现多线程,并且Callable还能得到子线程的返回值,这是前面两种方式所不具有的。 Callable是一个借口,并且支持泛型,我们编写多线程只需要实现这个接口,并且重写call方法,要得到Callable的返回值就要使用Future对象,Callable负责计算结果,Future负责拿到结果,具体的使用请看如下两个例子:public class CallableAndFuture { public static void main(String[] args) { ... 阅读全文
posted @ 2014-01-20 23:43 接天居士 阅读(2982) 评论(0) 推荐(0) 编辑
摘要: 1、通过thread.join()方式,注意:如果有多个子线程,需要将全部的线程先start,然后再join。代码示例如下:public class Main{ public static void main(String[] args) { long start = System.currentTimeMillis(); List list = new ArrayList(); for(int i = 0; i < 5; i++) { Thread thread = new TestThread(); thread.start(); list.add(thread); } try { 阅读全文
posted @ 2014-01-20 17:11 接天居士 阅读(461) 评论(0) 推荐(0) 编辑
摘要: 数据并发会引起很多问题,数据库通过锁机制来解决并发访问的问题,虽然不同的数据库在实现细节上存在差别,但是原理都差不多,下面介绍一下数据库的锁机制 按锁定的对象不同分为表锁定和行锁定,表锁定对整个表进行锁定,行锁定针对特定的行进行锁定,从并发事务锁定的关系上看,可以分为共享锁定和独占锁定,共享锁定会防止独占锁定,允许其他的共享锁定,而独占锁定既防止其他的独占锁定,也防止其他的共享锁定。下面介绍一下oracle的五种锁定: 1 行共享锁定:一般通过select for update 语句隐式获得行共享锁定,在oracle中用户可以通过lock table in row share mode... 阅读全文
posted @ 2014-01-17 22:51 接天居士 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 数据库事务有严格的定义,他必须满足四个特性:简称ACID,原子性(Atomic),一致性(Consistency),隔离性(Isolation)和持久性(Dutabiliy),在这些特性中,“一致性”是最终的目标,其他的特性都是为了这个目标的措施和手段原子性:表示组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有的操作执行成功,整个事务才提交,事务中任务一个数据库操作失败,依旧执行的任务操作都必须撤销,让数据库返回到初始状态一致性:事务操作成功后,数据库所处的状态和他的业务规则是一致的,既数据不会被破坏。隔离性:在并发数据库操作时,不同的事务拥有各自的数据空间,他们的操作不会对对方 阅读全文
posted @ 2014-01-17 22:10 接天居士 阅读(238) 评论(0) 推荐(0) 编辑