一  innodb的优化
  1 已完全不支持myisam引擎
  2 将自增主键的计数器持久化到redo log中。每次计数器发生改变,都会将其写入到redo log中。如果数据库发生重启,InnoDB会根据redo log中的计数器信息来初始化其内存值。为了尽量减小对系统性能的影响,计数器写入到redo log中,并不会马上刷新。解决了主键分配不正常的情况
  3 针对select for update操作等待处理
   select for update nowait/skip locked 不会再进行锁等待直到超时,会立刻退出
二 变量
  1 已完全不支持query_cache_size查询缓存
  2 新添加死锁检测热开关,可以手动进行死锁关闭,提高并发量 变量名称 innodb_deadlock_detect
  3 不再支持压缩的临时表。当 innodb_strict_mode启用(默认值),在指定压缩格式时会发生错误,在其他应用临时表的情况下都要应用ibtmp1数据文件
  4 innodb_flush_method 默认不再为null,在类unix环境下为fsync
  5 SET PERSIST variables= '' 可以直接生效,但是并不是直接应用到配置文件中,而是生成一个 mysqld-auto.cnf的配置文件,记载详细的记录 mysqld-auto.cnf文件中的配置相比my.cnf文件具有高优先级,如果相同配置出现在两个文件中,就以mysqld-auto.cnf文件中的记录为主。
  6 支持会话级别SET_VAR 动态调整部分参数,有利于提升语句性能
select /*+ SET_VAR(sort_buffer_size = 16M) */ name from people order y name;
  7 增加两个变量用于undo redo加密,默认关闭
   innodb_undo_log_encrypt
   innodb_undo_log_encrypt
  8 添加首个自适应参数 innodb_dedicated_server
     1 默认关闭
     2 只读值,必须在重启后生效
     3 优先级低于配置文件中的选项
    4 测试相关环境(内存64G,centos6.5 ext4文件系统,在小内存和不同文件系统可能不同,这点请注意)
      决定三个值 innodb_buffer_pool_size, innodb_log_file_size 和 innodb_flush_method(O_DIRECT_NO_FSYNC)
      探测到的物理内存 * 0.75(很合理,如果只有mysql单实例)
      flush_method为 O_DIRECT_NO_FSYNC
      innodb_log_file_size(2g)
    5 mysqld服务进程每次重启后都会自动调整上述三个参数值,并不会持久保存在配置文件中,非常智能
    6 不适应单机多实例和引擎复杂的场景
    7  InnoDB使用O_DIRECT来刷新IO,但是跳过fsync()步骤。对某些文件系统有效,但是对XFS文件系统并不适用。为了保证文件的metadata刷新到磁盘中,XFS必须使用O_DIRECT。

9 双1 设置

innodb_flush_log_at_trx_commit 和sync_log 默认都是双1,最安全高效

三  ddl 优化
 1 要么成功要么回滚,将DDL操作回滚日志写入到data dictionary 数据字典表 mysql.innodb_ddl_log,实现了DDL的原子性
  eg drop table t1,t2;在8.0中 如果t2不存在,那么t1被删除后也会回滚,这在以前的版本是不能实现的

四  innodb 并发redo日志的实现

MTR (Mini TRansaction)
  特别说明
  mysql 8.0之前
  1 InnoDB存储引擎严格的保证MTR写入Redo Log Buffer的顺序是按照LSN递增的顺序,以及flush list中的脏页按LSN递增顺序排序。
  2 MTR是串行的完成从本地日志Copy redo到全局Redo Log Buffer以及添加Dirty Page到Flush list的
  多线程并发情况控制顺序写入redo_log_buffer和 LRU_FLUSH_LIST
  这一约束是通过两个全局锁log_sys_t::mutex和log_sys_t::flush_order_mutex实现的。
  mysql 8.0之后的改进
  一 并发机制的改进
  1 去掉了 两个全局锁log_sys_t::mutex和log_sys_t::flush_order_mutex,实现了并发MTR的写入
  2 在redo_log_buffer通过预留位置(全局的原子变量log_t::s)保证LSN全局向前推进,通过(新的数据结构Link_buf)解决并发拷贝速度导致的空洞问题
  二 线程独立的增加
 log_writer 负责将redo_log_buffer缓存写到os cache中
  log_flusher 执行fysnc函数将os cache数据刷到磁盘文件中
 用户线程只需要在事务提交的时候,根据innodb_flush_log_at_trx_commit定义的不同行为,等待log_writer或log_flusher的通知即可
 在8.0之前,是由用户线程触发fsync或者等先提交的线程执行fsync( Group Commit行为), 而在MySQL 8.0中,用户线程只需要等待flushed_to_disk_lsn足够大即可。

三 总结

我们可以发现,innodb在并发写入log_buffer_cache和事务提交触发动作两方面进行了很大程度的优化,这样能提高很高的并发能力

mysql 8.0 ~ innodb与变量优化的更多相关文章

  1. MySQL 8.0 InnoDB新特性

    MySQL 8.0 InnoDB新特性 1.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe,metadata管理更完善 2.快速在线加新列(腾讯互娱DBA团队贡献) 3. ...

  2. MySQL 并行复制演进及 MySQL 8.0 中基于 WriteSet 的优化

    MySQL 8.0 可以说是MySQL发展历史上里程碑式的一个版本,包括了多个重大更新,目前 Generally Available 版本已经已经发布,正式版本即将发布,在此将介绍8.0版本中引入的一 ...

  3. Mysql优化系列(1)--Innodb重要参数优化

    1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色 ...

  4. MySQL与MariaDB核心特性比较详细版v1.0(覆盖mysql 8.0/mariadb 10.3,包括优化、功能及维护)

    注:本文严禁任何形式的转载,原文使用word编写,为了大家阅读方便,提供pdf版下载. MySQL与MariaDB主要特性比较详细版v1.0(不含HA).pdf 链接:https://pan.baid ...

  5. mysql 5.7 innodb count count(*) count(1) 大数据 查询慢 耗时多 优化

    原文:mysql 5.7 innodb count count(*) count(1) 大数据 查询慢 耗时多 优化 问题描述 mysql 5.7 innodb 引擎 使用以下几种方法进行统计效率差不 ...

  6. MySQL的Innodb缓存相关优化

    MySQL的Innodb缓存相关优化 INNODB 状态的部分解释 通过 命令 SHOW STATUS LIKE  'Innodb_buffer_pool_%' 查看  Innodb缓存使用率  (I ...

  7. mysql 8.0 主从复制的优化

    mysql 8.0复制改进一简介: 基于GTID下的并行复制,本文不考虑MGR架构二 主要特性   1 基于writeset的下的改进型并行复制     我在之前的一篇文章关于并行复制中详细的介绍了关 ...

  8. MySQL 8.0安装 + 配置环境变量 + 连接 cmd

    MySQL 安装教程 搜索 MySQL,进入官网,找到 download 点击适用于 window community 版本,点击图中第二个 450.7 M 的安装包进行下载 这里有五个选项,选择第二 ...

  9. MySQL · 引擎特性 · InnoDB 事务子系统介绍

    http://mysql.taobao.org/monthly/2015/12/01/ 前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoD ...

随机推荐

  1. python 二维数组读入

    study from : https://www.cnblogs.com/reaptomorrow-flydream/p/9613847.html python 二维数组键盘输入 1 m = int( ...

  2. 【译】2. Java反射——Class对象

    原文地址:http://tutorials.jenkov.com/java-reflection/classes.html ====================================== ...

  3. Gym 101915

    Gym - 101915A  Printing Books 题意:有一本书,从第X页开始,一共用了n位数字,求此书一共多少页.99就是两位数字,100就是三位数字. 思路:直接模拟即可,我用了一个hi ...

  4. (最长回文子串 线性DP) 51nod 1088 最长回文子串

    输入一个字符串Str,输出Str里最长回文子串的长度. 回文串:指aba.abba.cccbccc.aaaa这种左右对称的字符串. 串的子串:一个串的子串指此(字符)串中连续的一部分字符构成的子(字符 ...

  5. root登陆欢迎界面设置

    root登陆欢迎界面设置 #!/bin/bash echo -ne "\033[0;36m" cat<<EOF _oo0oo_ (| -_- |) \ = / ___/ ...

  6. Mysql连接查询、子查询、联合查询 整理

    连接查询 连接语法的基本形式 from 表1  [连接方式]  join 表2  [on 连接条件]: 交叉连接 语法: from  表1  [cross]  join  表2  ;      //可 ...

  7. C++ 二维数组作为形参传递使用实例

    在线代码编辑器: http://codepad.org/ 1.*指针 void display(int *arr, const int row, const int col) { ; i < r ...

  8. JavaScript中的this指向规则

    首先,JavaScript的this指向问题并非传说中的那么难,不难的是机制并不复杂,而被认为不好理解的是逻辑关系和容易混淆的执行上下文.这篇博客也就会基于这两个不好理解的角度来展开,如要要严格的来对 ...

  9. HDU 1045(炮台安置 DFS)

    题意是在 n*n 的方格中进行炮台的安置,炮台不能处于同一行或同一列(类似于八皇后问题),但若是炮台间有墙壁阻挡,则可以同时安置这对炮台.问图中可以安放的最大炮台数目. 用深搜的方法,若此处为空地,则 ...

  10. [Android] Android 去掉界面标题栏的方法

    Android 去掉界面标题栏的方法 这个首先要区分当前Activity 是继承了 Activity 类 ,还是 AppCompatActivity 类 情况一:创建的activity默认继承了App ...