zoukankan      html  css  js  c++  java
  • innodb 核心配置参数介绍, 双一标准

    说明:配置参数存放在my.cnf文件中,有需求可自定制。

    # 表空间模式(即.ibd文件,存放了行数据,索引及LSN号。该文件成为独立表空间):

      参考:https://www.cnblogs.com/quzq/p/12833272.html

      innoda_file_per_table=1,1代表独立表空间,5.6版默认模式;0代表共享表空间,5.6之前的默认模式

      5.6版之前表空间没有独立出来,存放在ibdata1文件中。设为1后创建的表会在data目录中生成表名.ibd文件,

      设置为0后创建的表不会生成该文件,会把.ibd中的内容存放到ibdata1文件中。

    # 存储引擎配置:

      default_storage_engine=innodb(5.6的默认引擎)

    # 配置共享表空间文件个数和大小(即ibdata1文件,该文件成为共享表空间):

      参考:https://www.cnblogs.com/quzq/p/12833135.html

      innodb_data_file_path=ibdata1:512M:ibdata2:512M:autoextend

      该配置通常在初始化之前配好,会生成两个文件

    # 双一标准的其中一个(默认是1)

      innodb_flush_log_at_trx_commit=1,用于控制redo log buffer中数据写入磁盘redo log文件的。

      值1代表什么呢?(redo log buffer,data buffer poll, undo log buffer都是存在于mysql内存中的)

        mysql启动后会向操作系统申请专用的内存空间,配置为1代表在commit命令后会立即把redo log buffer

        递交到操作系统内存中,然后由操作系统再立即写入到磁盘的redo log文件中。

      值0代表每秒执行一次把redo log buffer递交到操作系统内存,操作系统内存也每秒往redo log中写入一次。

        因为是每秒一次,如果在1秒内发生大量的事务递交,突然宕机,会造成1秒间隔内发生的事务数据丢失

      值2代表每次commit后立即把redo log buffer数据递交到操作系统内存,然后操作系统每秒往redo log中写入一次

        缺点和0一样,只不过能好一点,如果只是mysql服务宕机的话,提交到操作系统内存的事务还不会丢失。

      补充:无论哪个值,redo log buffer递交到操作系统内存的日志都会包含所有,无论该事务是否commit.

    # 双一表中的另一个

      sync_binlog=1    每次事务递交都立即把二进制日志刷写到磁盘。

      双一标准都是用来控制mysql内存数据刷写到磁盘的频率,一个用来控制redo log, 一个用来控制二进制日志的

      二进制日志相关参考:https://www.cnblogs.com/quzq/p/12866410.html

    # 控制mysql内存中logs到磁盘的过程

      innodb_flush_method=o_direct或fsync或o_dsync, 控制的是redo log buffer和data buffer pool,过程如下:

      默认使用的是fsync模式,建议使用o_direct模式

      

       

      

     # 结合上两个参数给出个建议配置如下:

      1. 最高安全模式:

        innodb_flush_log_at_trx_commit=1

        innodb_flush_method=o_direct

      2. 最高性能模式(安全不是特别重要场景):

        innodb_flush_log_at_trx_commit=0

        innodb_flush_method=fsync

    # 三个和redo日志设置有关的参数:

      1. innodb_log_buffer_size=16777216,  设置redo log buffer内存区的大小

      2. innodb_log_file_size=50331648, 设置redo log的两个文件大小

        参考: https://www.cnblogs.com/quzq/p/12833381.html

      3. innodb_log_files_in_group=3,控制redo log的文件数,默认是0和1两个文件

        参考:https://www.cnblogs.com/quzq/p/12833381.html

    # 脏页刷写策略:

      innodb_max_dirty_pages_pct=75, 75为百分比,控制data buffer pool中脏页数据占比达到75%时自动触发CKPT

        和WAL机制把data buffer pool中的信息刷写到ibd文件中,当然日志也是优先于数据写入到redo log中的。

      补充:哪些场景会触发脏页数据写入ibd文件(CKPT)呢?

        1. CSR机制。 参考:https://www.cnblogs.com/quzq/p/12839958.html

        2. redo文件满了。通常redo log中的信息当脏页数据写回ibd后,redo log中的日志就没用了,可以被覆盖写掉。

  • 相关阅读:
    Eclipse安装Hadoop插件
    (转)Ubuntu14.0.4中hadoop2.4.0伪分布模式配置
    Hadoop--DataNode无法启动
    启动与关闭hadoop
    hadoop中执行命令时发生错误
    strings命令
    Deriving data from ElasticSearch Engine
    elasticsearch data importing
    reading words in your computer and changing to female voice, linux festival text2wave saving wav files
    DDNS client on a Linux machine
  • 原文地址:https://www.cnblogs.com/quzq/p/12864886.html
Copyright © 2011-2022 走看看