zoukankan      html  css  js  c++  java
  • mysql 读取硬盘数据

    innodb 的最小管理单位是页

    innodb的最小申请单位是区,一个区 1M,内含64个页,每个页16K ,即 64*16K=1M, 考虑到硬盘局部性,每次读取4个区,即读4M的数据加载至内存

    线性预读:

      innodb的读线程从disk读取4M数据后,如果这4个区中被连接访问的页的数据大于或等于innodb_read_ahead_threshold (默认为56)时,就会提前把后面4个区的数据 load 至内存

    注意:

      InnoDb存储引擎这本书中说至少向硬盘申请4个区的数据,

      但大多数文章说只申请1个区的数据,先这样

     参考 

    http://www.oschina.net/translate/making-full-table-scan-10x-faster-in-innodb

    MySQL下InnoDB的预热方法 

    对于MyISAM表,表的统计信息都是现成的,无需人工预热。但InnoDB的存储格式和MyISAM不一样, innodb会在mysql启动后的第一次访问表的时候,统计表的索引基数等相关信息,如果表很多的话,这是一个巨大的开销。所以在正式提供服务之前,就把表打开,放入到innodb buffer pool中。

    MySQL 5.0

    1
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES;

    MySQL 5.1

    1
    SELECT concat(’select * from ‘,table_schema,’.',table_name,’ limit 1;’) FROM information_schema.tables where engine=’innodb’;

    MySQL 5.6

    在my.cnf里,加入如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    innodb_buffer_pool_dump_at_shutdown = 1
     
    #解释:在关闭时把热数据dump到本地磁盘。
     
    innodb_buffer_pool_dump_now = 1
     
    #解释:采用手工方式把热数据dump到本地磁盘。
     
    innodb_buffer_pool_load_at_startup = 1
     
    #解释:在启动时把热数据加载到内存。
     
    innodb_buffer_pool_load_now = 1
     
    #解释:采用手工方式把热数据加载到内存。

    在关闭MySQL时,会把内存中的热数据保存在磁盘里ib_buffer_pool文件中,位于数据目录下。在启动后,会自动加载热数据到Buffer_Pool缓冲池里。注:只有在正常关闭MySQL服务,或者pkill mysql时,会把热数据dump到内存。机器宕机或者pkill -9 mysql,是不会dump。

    附注

    查看状态:show innodb statusG

    我们可以在my.cnf 加入init-file=/mysql/init.sql ,每次mysql重启的时候就自动执行这个预热的sql

    http://www.linuxidc.com/Linux/2012-07/66262.htm

  • 相关阅读:
    兼容火狐几秒后跳转页面
    js 利用sina ip库获取ip及通信服务商
    jQuery.validate 中文API
    s:select标签的Map形式使用
    【原创随笔】reCAPTCHA加密验证Email地址,正确才可完整查看地址!
    eclipse编辑jsp文件和javascript代码很卡解决办法
    oracle 10 R2 静默安装 + psu
    【容易成功的十种能力你具备几种
    CentOS 新虚拟机网卡设置
    【与人沟通的技巧很重要】
  • 原文地址:https://www.cnblogs.com/taek/p/4821985.html
Copyright © 2011-2022 走看看