mysql存储引擎优化

mysql存储引擎优化

ID:8972635

大小:271.19 KB

页数:18页

时间:2018-04-13

mysql存储引擎优化_第1页
mysql存储引擎优化_第2页
mysql存储引擎优化_第3页
mysql存储引擎优化_第4页
mysql存储引擎优化_第5页
资源描述:

《mysql存储引擎优化》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、存储引擎优化MyISAM存储引擎优化我们知道,MyISAM存储引擎是MySQL最为古老的存储引擎之一,也是最为流行的存储引擎之一。对于以读请求为主的非事务系统来说,MyISAM存储引擎由于其优异的性能表现及便利的维护管理方式无疑是大家最优先考虑的对象。我们将通过分析MyISAM存储引擎的相关特性,来寻找提高MyISAM存储引擎性能的优化策略。索引缓存优化MyISAM存储引擎的缓存策略是其和很多其他数据库乃至MySQL数据库的很多其他存储引擎不太一样的最大特性。因为他仅仅缓存索引数据,并不会缓存实际的表数据信息到内存中,而是将这一工作交给了OS级别的文件系统缓存。所以,在数据

2、库优化中非常重要的优化环节之一“缓存优化”的工作在使用MyISAM存储引擎的数据库的情况下,就完全集中在对索引缓存的优化上面了。在分析优化索引缓存策略之前,我们先大概了解一下MyISAM存储引擎的索引实现机制以及索引文件的存放格式。MyISAM存储引擎的索引和数据是分开存放于“.MYI”文件中,每个“.MYI”文件由文件头和实际的索引数据。“.MYI”的文件头中主要存放四部分信息,分别称为:state(主要是整个索引文件的基本信息),base(各个索引的相关信息,主要是索引的限制信息),keydef(每个索引的定义信息)和recinfo(每个索引记录的相关信息)。在文件头后

3、面紧接着的就是实际的索引数据信息了。索引数据以Block(Page)为最小单位,每个block中只会存在同一个索引的数据,这主要是基于提高索引的连续读性能的目的。在MySQL中,索引文件中索引数据的block被称为IndexBlock,每个IndexBlock的大小并不一定相等。在“.MYI”中,IndexBlock的组织形式实际上只是一种逻辑上的,并不是物理意义上的。在物理上,实际上是以FileBlock的形式来存放在磁盘上面的。在KeyCache中缓存的索引信息是以“CacheBlock”的形式组织存放的,“CacheBlock”是相同大小的,和“.MYI”文件物理存储

4、的Block(FileBlock)一样。在一条Query通过索引检索表数据的时候,首先会检查索引缓存(key_buffer_cache)中是否已经有需要的索引信息,如果没有,则会读取“.MYI”文件,将相应的索引数据读入KeyCache中的内存空间中,同样也是以Block形式存放,被称为CacheBlock。不过,数据的读入并不是以IndexBlock的形式来读入,而是以FileBlock的形式来读入的。以FileBlock形式读入到KeyCache之后的CacheBlock实际上是于FileBlock完全一样的。如下图所示:当我们从“.MYI”文件中读入FileBlock

5、到KeyCache中CacheBlock时候,如果整个KeyCache中已经没有空闲的CacheBlock可以使用的话,将会通过MySQL实现的LRU相关算法将某些CacheBlock清除出去,让新进来的FileBlock有地方呆。我们先来分析一下与MyISAM索引缓存相关的几个系统参数和状态参数:◆key_buffer_size,索引缓存大小;这个参数用来设置整个MySQL中的常规KeyCache大小。一般来说,如果我们的MySQL是运行在32位平台纸上,此值建议不要超过2GB大小。如果是运行在64位平台纸上则不用考虑此限制,但也最好不要超过4GB。◆key_buffer

6、_block_size,索引缓存中的CacheBlockSize;在前面我们已经介绍了,在KeyCache中的所有数据都是以CacheBlock的形式存在,而key_buffer_block_size就是设置每个CacheBlock的大小,实际上也同时限定了我们将“.MYI”文件中的IndexBlock被读入时候的FileBlock的大小。◆key_cache_division_limit,LRU链表中的HotArea和WarmArea分界值;实际上,在MySQL的KeyCache中所使用的LRU算法并不像传统的算法一样仅仅只是通过访问频率以及最后访问时间来通过一个唯一的链

7、表实现,而是将其分成了两部分。一部分用来存放使用比较频繁的HotCackeLock(HotChain),被成为HotArea,另外一部分则用来存放使用不是太频繁的WarmCacheBlock(WarmChain),被成为WarmArea。这样做的目的主要是为了保护使用比较频繁的CacheBlock更不容易被换出。而key_cache_division_limit参数则是告诉MySQL该如何划分整个CacheChain划分为HotChain和WarmChain两部分,参数值为WarmChain占整个Chain的百分比

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。