• 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中的日志就没用了,可以被覆盖写掉。

  • 相关阅读:
    使用Jpath 对Json字符串进行解析
    使用PowerDesigner 生成mysql 数据库脚本
    在windows 环境下Kratos 代码示例搭建
    Java jdbc无法连接sql server和sa登录失败的坑
    win10 安装sql server 2008 提示重新启动计算机失败
    RNN计算loss function
    ReLU 函数非线性
    TopK 问题
    mysql初始化问题(版本 8.0.11)
    投资理财的66条军规
  • 原文地址:https://www.cnblogs.com/quzq/p/12864886.html
Copyright © 2020-2023  润新知