Innodb存储引擎的特性(2)

关于锁还有两个被经常提到的概念,就是阻塞和死锁,我发现开发人员会经常混淆,两种错误,

所以我觉得有必要在这里强调一下,两个锁的问题,首先什么是阻塞呢,阻塞是因为不同锁的兼容性的关系,

在有些时刻,一个事务中的锁,需要等待另一个事务锁的释放,他所占用的资源,这就形成了阻塞,比如我们前面

演示的表级锁时,第一个表对应myinnodb加了表级锁,所以第二个连接要在表上加共享锁呢,等待第一个表的排他锁

释放,这样第一个表的连接阻塞第二个连接,阻塞是为了确保事务的可以并发,且正常的运行,但是当一个系统中出现

大量的阻塞,往往就意味着系统中存在问题,也许在一个频繁更新的表上出现了慢查询,或许是一些其他的管理操作,

如alter table表备份时,频繁的加上排他锁,而过多的阻塞绝对不是一个好的现象,占用大量的系统资源,使得系统的

性能整体的下降,那我们下来再来看看什么是死锁,死锁是指两个或者两个以上的事务,在执行过程中,相互占用对方

产生的资源,而产生一种异常,从定义中可以看到,处在阻塞中的多个事务呢,占用了被阻塞事务的多个资源,而死锁是

占用对方的资源,这就是阻塞和死锁最大不同之处,另外一点不同呢,死锁数据库会自动发现,并且在多个死锁的事务中,

选择一个占用资源最小的事务呢,来进行回滚操作,这样就可以使其他事务呢,正常运行了,死锁是可以由系统自动处理的,

如果只有少量的死锁,并不会对系统产生什么样的影响,只要在应用程序中发现死锁并进行处理就可以了,但是如果一个系统中

频繁的出现大量的死锁,这时就需要留意了,通常情况下死锁可以通过在多个事务中,按照相同的顺序访问相同的资源,来解决,

关于具体如何处理死锁下面会有介绍,这里只是给大家强调一下,阻塞和死锁是不同的,希望大家以后不要再混淆这个概念了

我们再来看一看除了锁以外,Innodb其他特性,Innodb相对于其他引擎不同之处呢,还有一点就是,提供了一个独特的

性能监控工具,这个工具就是show engine innodb status命令,这个show命令呢,输出内容包含了一些平均值统计信息,

对于平均值呢,就是上次输出结果后生成的统计数,如果想要使用show engine innodb status这个统计信息的话,那就要

确保在两次输出之间至少要间隔30秒左右的时间,以便有足够长的收集时间,进行多次采样,还要说明的一点是,不同版本的

innodb status的输出呢,会有些不同,这里我使用的是MYSQL5.6的版本,我就以这个版本为例来给大家简单的介绍一下,如何

使用show engine innodb status这个命令,这个命令输出内容比较多,所以我们就到演示系统中来做一个简单的了解,下面我们

就进入到我们的演示系统,来看一下show engine innodb status具体输出是什么样子的

show engine innodb status \G

这里就是show engine的具体输出了,首先我们来看一下第一部分的信息,是多长时间的一个统计,最近33秒,

就是最近33秒的一个平均值,还显示了后台进程的进程信息,包括innodb的主进程,他的循环次数,还有一些sleep的次数,

刷新的次数,这个演示系统是没有任何负载的系统,所以看到他的循环是非常少的,只有一些信号的信息了,首先这些信号

信息就包括一些等待信息啊,包括一些等待的信息

再接下来呢,事务信息,同样由于我们的演示系统是没有任何负载的,我们可以看到一个事务id,就是我们刚才

show engine innodb status的这个连接,这个线程所执行的一个事务,接下来就是关于一些文件IO的信息,

包括写,Innodb的读写进程

innodb的读写进程,我在配置文件中也配置了很多,大家可以看到很多的读写进程,在默认情况下呢,4个读进程,

4个写进程的,那么接下来就是一些缓存信息,包括insert buffer and hash索引的信息,这里就显示了他的插入缓存,

一些尺寸,以及合并的操作信息

大家可以看到呢,几乎都是0,因此我们这张表是没有任何负载的,没有任何操作

下面就是一些log信息了,以及检查点的一些信息,证明了我们的演示系统呢没有任何负载,没有事务的,

下面就是一些缓存池的信息,这个就代表了总的内存分配,以及附加缓存池的信息,可以看到,下面就是一些行的操作

信息,以及大家看到这里有一个插入的行只有24行,读有66行,但是在一个生产环境系统中呢,统计值不应该是这个样子的,

他们都应该代表了一组数据,同时对于生产系统中呢,show engine innodb status呢,它会输出更多的内容,比如死锁信息,

比如外键的错误信息,等等,如果大家对Innodb status感兴趣的话,MYSQL的官方手册,这里就不做过多介绍了

前面我们介绍了Innodb存储引擎的特性,那么下面我们来看看Innodb引擎的适用场景,从上面的介绍呢,

可以看到,Innodb存储引擎呢,可以应用到大多数的在线处理,和应用场景中,从前有一种观点,认为只有

事务支持时呢,才需要Innodb存储引擎,其实从上面的介绍呢,可以看出来,实际上无论是否需要事务支持,

我们都应该使用Innodb存储引擎,其中所说的特殊功能呢,可能就包括我们之前在介绍MYISAM中说过的,

全文索引这些,由于在MYSQL5.7之前,只支持MYISAM存储引擎,所以如果我们要使用MYSQL存储这类数据的话呢,

可能只能选择MYISAM存储引擎了,可是这种情况呢,在MYSQL5.7版本之后呢,已经有了改变,在MYSQL5.7版本之后呢,

Innodb已经可以支持全文索引,和空间函数了,所以呢对于这类应用呢,也完全可以使用Innodb存储引擎来进行存储了,

Innodb和MYISAM是MYSQL最常用的两种存储引擎,另外还有一些特殊功能的存储引擎,在一些场景下呢,我们下面主要介绍

一下,其中比较常用的存储引擎,CSV

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值