MYSQL数据库mysql innodb数据库引擎解析
副标题[/!--empirenews.page--]
《MYSQL数据库mysql innodb数据库引擎解析》要点: MYSQL实例本节内容: MYSQL实例一.mysql体系结构和存储引擎 MYSQL实例1.1、数据库和实例的区别 MYSQL实例数据库:物理操作系统或其他形式文件类型的集合.在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件. MYSQL实例数据库实例:由数据库后台进程/线程以及一个共享内存区组成.数据库实例才是真正用来操作数据库文件的. MYSQL实例mysql数据库是单进程多线程的程序,与sql server比较类似.也就是说,Mysql数据库实例在系统上的表现就是一个进程. MYSQL实例1.2、mysql的体系结构 MYSQL实例mysql由连接池组件、管理服务和工具组件、sql接口组建、查询分析器组件、优化器组件、缓存组件、插件是存储引擎、物理文件. MYSQL实例1.3、mysql存储引擎 MYSQL实例1.3.1、innodb存储引擎,特点支持外键、行锁、非锁定读(默认情况下读取不会产生锁)、mysql-4.1开始支持每个innodb引擎的表单独放到一个表空间里.innodb通过使用MVCC来获取高并发性,并且实现sql标准的4种隔离级别,同时使用一种被称成next-key locking的策略来避免换读(phantom)现象.除此之外innodb引擎还提供了插入缓存(insert buffer)、二次写(double write)、自适应哈西索引(adaptive hash index)、预读(read ahead)等高性能技术. MYSQL实例1.3.2、myisam存储引擎,myisam特点是不支持事物,适合olap应用,myisam表由MYD和MYI组成.mysql-5.0版本之前,myisam默认支持的表大小为4G,从mysql-5.0以后,myisam默认支持256T的表单数据.myisam只缓存索引数据. MYSQL实例1.3.3、NDB存储引擎,特点是数据放在内存中,mysql-5.1版本开始可以将非索引数据放到磁盘上.NDB之前的缺陷是join查询是mysql数据库层完成的,而不是存储引擎完成的,复杂的join查询需要巨大的网络开销,速度很慢.当前mysql cluster7.2版本中已经解决此问题,join查询效率提高了70倍. MYSQL实例1.3.4、memeory存储引擎,将数据放到内存中,默认使用hash索引,不支持text和blob类型,varchara是按照char的方式来存储的.mysql数据库使用memory存储引擎作为临时表还存储中间结果集(intermediate result),如果中间集结果大于memorg表的容量设置,又或者中间结果集包含text和blog列类型字段,则mysql会把他们转换到myisam存储引擎表而放到磁盘上,会对查询产生性能影响. MYSQL实例1.3.5、archive存储引擎,压缩能力较强,主要用于归档存储. MYSQL实例1.3.6、federated存储引擎,不存储数据,他指向一台远程mysql数据库上的表. MYSQL实例1.3.7、maria存储引擎,myisam的后续版本,支持缓存数据和索引,行锁设计,支持mvcc,支持事务和非事务安全的选项,以及更好的BLOG字符类型的处理性能. MYSQL实例1.3.8、其他存储引擎,sphinx用于全文索引,infobright用于数据仓库. MYSQL实例1.4连接Mysql MYSQL实例1.4.1、TCP/IP:基于网络的连接,连接进行权限检查. MYSQL实例1.4.2、命名管道和共享内存:Windows系统上同一服务器上的两进程可通过命名管道连接,需在配置文件中启用--enable-named-pipe选项. MYSQL实例1.4.3、Unix套接字:客户端与服务端位于同一服务器时才可使用,可以在my.cnf中指定-socket=/tmp/mysql.sock,连接时指定./mysql -S/tmp/mysql.sock. MYSQL实例二.InnoDB存储引擎 MYSQL实例2.2、innodb引擎架构 MYSQL实例1).维护所有进程/线程需要访问的多个内部数据结构. MYSQL实例2).缓存磁盘上的数据,方便快速的读取,并且在对磁盘文件的数据进行修改之前在这里缓存. MYSQL实例3).重做日志缓存. MYSQL实例后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存是最近的数据,此外、将已经修改的数据文件刷新到磁盘文件 MYSQL实例2.2.1、后台线程 MYSQL实例innodb存储引擎后台有7个线程,—–4个IO线程(insert buffer thread,log thread,read thread,write thread),1个master thread,一个lock监控线程,一个错误监控线程. MYSQL实例2.2.2、内存 MYSQL实例innodb存储引擎内存由以下三个部分组成:缓冲池(buffer pool),重做日志缓存(redo log buffer),额外的内存池(additional memory pool).可以使用 show engine innodb status来查看innodb_buffer_pool的使用情况. MYSQL实例innodb_buffer_pool_size:具体看,缓冲池中的数据库类型有:索引页、数据库页、undo页、插入缓存页(insert buffer)、自适应hash(adaptive hashindex)、innodb存储的锁信息(lock info)、数据字典信息(data dictionary). MYSQL实例InnoDB工作方式:将数据文件按页(每页16K)读入InnoDBbuffer pool,然后按最近最少使用算法(LRU)保留缓存数据,最后通过一定频率将脏页刷新到文件. MYSQL实例 MYSQL实例 MYSQL实例2.3.1、master thread源码分析 MYSQL实例2.3.2、master thread的潜在问题 MYSQL实例1、由于硬件的发展,现在的硬件性能已经提高了很多,如果innodb每秒最大刷新100个脏页,那么效率会很低,为了解决这个问题,innodb plugin提供了一个参数innodb_io_capacity,用来表示磁盘IO的吞吐量,默认值是200,规则如下:在合并插入缓存时,合并插入缓存的数量为innodb_io_capacity的5%;在从缓冲区刷新脏页时,啥新脏页的数量为innodb_io_capacity. (编辑:航空爱好网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |