zoukankan      html  css  js  c++  java
  • INNODB

    INNODB,是Mysql5.7的默认存储引擎,是事务安全的,支持ACID,具有提交,回滚和crash-recovery【灾备】能力,以保护用户数据。

    优势:一旦Server崩溃,Innodb会自动保存已提交的数据,undo未被提交的事务;不会产生业务上的影响。

    Innodb buffer pool 会缓存被访问的数据,可加速数据处理。

    将关联数据拆分到多个表,需建立外键【foreign key】以确保数据完整性。

    为表建立适当的主键【primary key】,这样在引用主键时where ,order by ,group by ,join 会很快。

    在 insert,update ,delete 时自动使用change buffering机制,缓存已更改数据。

    Adaptive Hash Index 风格会加快耗时的重复数据查询。

    压缩表和相关index.

    可以较小的影响【性能和可用性】来创建和删除index.

    使用DYNAMIC row format,对于BLOB和长文本类型的处理更高效。

    可以通过查询 INFORMATION_SCHEMA中表来监控存储引擎的内部工作情况。

    通过查询performance_schema中表来监控存储引擎的详细性能信息。

    For InnoDB-specific tuning techniques you can apply in your application code, see Section 9.5, “Optimizing for InnoDB Tables”.

    Innodb 现可以使用FULLTEXT索引执行全文检索;

    Innodb 现在具有更出色的读表现。

    布置于只读媒介上的程序现可以使用Innodb表。

    InnoDB 是多版本控制存储引擎,将被改变行的旧版本信息存储于表空间的rollback segment 区域中。Innodb可使用该区域的信息执行undo操作【在事务回滚时】;也使用该信息构建譔行的早期版本数据。

     INNODB configure

    INNODB buffer pool is used to cache data and index in memory.In configue file ,innodb_buffer_pool_size is about 50%-80% of computer's memory.

    innodb_old_blocks_pct, 在buffer pool 中旧数据的占比【百分比】

    innodb_old_blocks_time,在buffer Pool 中被插入旧区中的数据在第一次被访问多久后再移入新区【如果还存在】

    innodb_buffer_pool_chunk_size 

    在设置innodb_buffer_pool_instances时,保证每一个buffer_pool实例都至少有一个GB,这样才能够最大可能的提高效率,默认时innodb_buffer_pool_instances=1。

    在innodb_buffer_pool的管理上,Mysql不是使用严格意义上的LRU算法,Innodb使用了一种技术来最大化的减少被载入Buffer Pool但从没使用的数据。innodb_old_blocks_pct,设置非热点数据占比,默认37%,该值不应过高;innodb_old_blocks_time,设值窗口时间,即在这个时间内的访问不被载入新区,该值设置越大,数据过期的越快,默认一秒【1000】。

    监测Buffer pool 的设置效果,可使用 SHOW ENGINE INNODB STATUS,查看buffer pool 使用统计情况。

    如:

    配置Innodb中dirty pages处理,在Innodb中有专门的后台Task做Flushing的操作,有两个触发临界点:一个是innodb_max_dirty_pages_pct,设置dirty pages的占比,当大于等于该占比时触发Flushing【根据RedoLog的产生速度和刷新频率来确定实际占比】;第二个是当Log文件的空间用尽,达到sharp checkpoiont而进行Flushing【这种大量IO会对Mysql性能产生较大影响】,为了避免这种情形出现,可使用自适应算法【self-adapting algorithm】,可通过innodb_adaptive_flushing来设置期启用与否。

    我们知道buffer pool里存放了很多热点数据,为了在重启Server时恢复最最常用的热点数据,加速预热,我们可以保存Buffer pool 的状态信息以便恢复时使用。

    可通过innodb_buffer_pool_dump_at_shutdown,innodb_buffer_pool_load_at_startup来配置是否启用buffer pool 状态保存,innodb_buffer_pool_dump_pct配置舍弃热点数据的百分比【25-100】。其实保存文件是很小的,因为其中只保存了定位数据的位置信息【tablespaceId和pageId】,保存文件默认是在Data directory下的ib_buffer_pool。保存的这些位置信息其实来自于information_schema.innodb_buffer_page_lru表中。当然该文件路径名称也可以通过系统变量:innodb_buffer_pool_filename配置。

    如果需要紧急保存状态,可 set Global innodb_buffer_pool_dump_now=ON;若在运行时想恢复,可set global innodb_buffer_pool_load_now=ON;

    Mysql 有单独的后台线程来做这个事。

    显示Buffer pool dump和load进程状态信息:

  • 相关阅读:
    【typecho】解决使用分隔符 <!--more-->标签后首页文字下面出现一段空白
    真没想到,疫情让我实现了远程办公的夙愿
    程序员周末应该干的8件事
    在Delphi中如何控制其它应用程序窗口
    Delphi 如何操作外部程序的控件(如按钮,文本框,单选按钮等)
    delphi 向其他程序发送模拟按键
    Delphi中如何控制其他程序窗体上的窗口控件
    用Delphi“遥控”按钮
    双系统启动菜单的修改方法
    PureBasic 读取文件中一行的两个数据例子
  • 原文地址:https://www.cnblogs.com/itdev/p/5904552.html
Copyright © 2011-2022 走看看