网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 数据库技术 > Oracle > 性能调优 > MySQL数据库优化(七)-性能调优  

MySQL数据库优化(七)-性能调优

2008-06-14  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

  中点插入策略

  默认地,MySQL 4.1的索引缓存管理系统采用LRU策略来选择要被清除的缓存区块,不过它也支持更完善的方法,叫做\"中点插入策略\"。

网管网www_bitscn_com

  使用中点插入策略时,LRU链就被分割成两半:一个热子链,一个温子链。两半分割的点不是固定的,不过缓存管理系统会注意不让温子链部分\"太短\",总是至少包括全部缓存区块的 key_cache_division_limit 比率。key_cache_division_limit 是缓存结构体变量的组件部分,因此它是每个缓存都可以设置这个参数值。

网管网www.bitscn.com

  当一个索引区块从表中读入缓存时,它首先放在温子链的末尾。当达到一定的点击率(访问这个区块)后,它就提升到热子链中去。目前,要提升一个区块的点击率(3)对每个区块来说都是一样的。将来,我们会让点击率依靠B树中对应的索引区块节点的级别:包含非叶子节点的索引区块所要求的提升点击率就低一点,包含叶子节点的B索引树的区块的值就高点。 网管朋友网www_bitscn_net

  提升起来的区块首先放在热子链的末尾。这个区块在热子链内一直循环。如果这个区块在该子链开头位置停留时间足够长了,它就会被降级回温子链。这个时间是由索引缓存结构体变量的组件 key_cache_age_threshold 值来决定的。

网管有家www.bitscn.net

  这个阀值是这么描述的,一个索引缓存包含了 N 个区块,热子链开头的区块在低于 N*key_cache_age_threshold/100 次访问后就被移动到温子链的开头位置。它又首先成为被删除的候选对象,因为要被替换的区块还是从温子链的开头位置开始的。 中国网管论坛bbs.bitsCN.com

  中点插入策略就能在缓存中总能保持更有价值的区块。如果更喜欢采用LRU策略,只需让 key_cache_division_limit 的值低于默认值 100。

网管u家u.bitsCN.com

  中点插入策略能帮助改善在执行需要有效扫描索引,它会将所有对应到B树中高级别的有价值的节点推出的查询时的性能。为了避免这样,就必须设定 key_cache_division_limit 远远低于100以采用中点插入策略。则在扫描索引操作时那些有价值的频繁点击的节点就会保留在热子链中了。

网管朋友网www_bitscn_net

  索引预载入

网管有家www.bitscn.net

  如果索引缓存中有足够的区块用来保存全部索引,或者至少足够保存全部非叶子节点,那么在使用前就载入索引缓存就很有意义了。将索引区块以十分有效的方法预载入索引缓存缓冲:从磁盘中顺序地读取索引区块。

网管朋友网www_bitscn_net

  没有预载入,查询所需的索引区块仍然需要被放到缓存中去。虽然索引区块要保留在缓存中,因为有足够的缓冲,它们可以从磁盘中随机读取到,而非顺序地。 网管论坛bbs_bitsCN_com

  想要预载入缓存,可以使用 LOAD INDEX INTO CACHE 语句。如下语句预载入了表 t1 和 t2 的索引节点(区块):

网管bitscn_com


  mysql> LOAD INDEX INTO CACHE t1, t2 IGNORE LEAVES;
  +---------+--------------+----------+----------+
  | Table | Op | Msg_type | Msg_text |
  +---------+--------------+----------+----------+
  | test.t1 | preload_keys | status | OK |
  | test.t2 | preload_keys | status | OK |
  +---------+--------------+----------+----------+
网管网www.bitscn.com

  增加修饰语 IGNORE LEAVES 就只预载入非叶子节点的索引区块。因此,上述语句加载了 t1 的全部索引区块,但是只加载 t2 的非叶子节点区块。 网管网www_bitscn_com

  如果使用 CACHE INDEX 语句将索引指向一个索引缓存,将索引区块预先放到那个缓存中去。否则,索引区块只会加载到默认的缓存中去。 网管有家www.bitscn.net

网管u家www.bitscn.net

TAGs   性能   优化   数据库   索引   区块       使用   访问   一个   这个      
 上一篇:MySQL数据库优化(六)-性能调优   下一篇:MySQL数据库优化(八)-性能调优
MySQL数据库优化(七)-性能调优 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: