一  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. IT项目管理分享7个开源项目管理工具

    在一项调查中,有 71% 的组织表示他们在开发过程中会用到敏捷方法. 此外,用敏捷方法管理项目比传统方法管理项目成功率高 28%.在这次工具推荐中,我们从一些比较受欢迎的开源项目管理工具中摘取了支持敏 ...

  2. 文献笔记:Genome-wide associations for birth weight and correlations with adult disease

    该文献纳入了EGG(Early Growth Genetics Consortium)和UK biobank两大数据库,分为欧洲祖先和非欧洲祖先群体.这两个数据用到的样本量分别如下: Early Gr ...

  3. IDEA2017.3.5破解

    首先下载好idea, https://www.jetbrains.com/idea/download/previous.html 下载破解文件: https://pan.baidu.com/s/1tB ...

  4. Codeforces Round #529 (Div. 3) D. Circular Dance

    传送门 题意: 有 n 个孩子编号为 1~n ,绕着圣诞树 dance: 编号为 i 的孩子可以记住ai1,ai2两个小孩,ai1,ai2是 i 在顺时针方向的相邻的两个小孩,但ai1,ai2不一定是 ...

  5. windows下ngnix+php配置

    1.需要工具: 下载ngnix  网址:http://nginx.org/ 下载:RunHiddenConsole 第二步 将下载文件解压后,将RunHiddenConsole拷贝到ngnix目录与p ...

  6. 快速傅里叶变换(FFT)_转载

    FFTFFT·Fast  Fourier  TransformationFast  Fourier  Transformation快速傅立叶变换 P3803 [模板]多项式乘法(FFT) 参考上文 首 ...

  7. 构造方法关键字---this

    this 可以在构造方法之间进行调用 *this在构造方法之间调用 this() this 可以在构造方法之间进行调用 *this在构造方法之间调用 this() package cn.homewor ...

  8. 关于串session

    关于session: 最近在用IE浏览器调试不同用户所拥有的权限功能,出现了串session.串session,主要的流程结构如下: 解决方法: 在IE快捷方式上点击鼠标右键>属性>快捷方 ...

  9. python自动化开发-[第一天]-练习题

    1.使用while循环输入 1 2 3 4 5 6 8 9 10 i = 1 while i < 11: if i == 7: i += 1 continue print (i) i += 1 ...

  10. 设计模式---对象性能模式之单例模式(Singleton)

    前提:“对象性能”模式  面向对象很好的解决了“抽象”的问题,但是必不可免地要付出一定的代价.对于通常情况来讲,面向对象的成本大都可以忽略不计.但是某些情况,面向对象所带来的成本必须谨慎处理. 前面是 ...