一  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. struts2 数据转换器

    四.数据类型的转换(明白原理,实际开发中几乎不用) 1.开发中的情况: 实际开发中用户通过浏览器输入的数据都是String或者String[]. String/String[]————填充模型(set ...

  2. TestNg 6.异常测试

    * 什么时候会用到异常测试??* 在我们期望结果为某一个异常的时候* 比如:我们传入了某些不合法的参数,程序抛出异常* 也就是我的预期结果就是这个异常看以下的一段代码: package com.cou ...

  3. C 线程学习记录

    "互斥锁"(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域. 这时的解决方法,就是在门口挂n把钥匙.进去的人就取一把钥匙,出来时再把钥匙挂 ...

  4. 函数:PHP将字符串从GBK转换为UTF8字符集iconv

    1. iconv()介绍 iconv函数可以将一种已知的字符集文件转换成另一种已知的字符集文件.例如:从GB2312转换为UTF-8. iconv函数在php5中内置,GB字符集默认打开. 2. ic ...

  5. php如何判断数组是一维还是多维

    php>4.2 int count ( mixed $var [, int $mode ] )  --  计算数组中的单元数目或对象中的属性个数  如果可选的 mode 参数设为 COUNT_R ...

  6. (最小生成树 Prim) nyoj1403-沟通无限校园网

    题目描述: 校园网是为学校师生提供资源共享.信息交流和协同工作的计算机网络.校园网是一个宽带.具有交互功能和专业性很强的局域网络.如果一所学校包括多个学院及部门,也可以形成多个局域网络,并通过有线或无 ...

  7. 用jQuery写的轮播图

    效果图: GitHub地址:https://github.com/123456abcdefg/Javascript 大家可以下载源码查看. 与前一篇写的轮播图实现的效果一致,这个是用jQuery写的, ...

  8. shell关于文件操作

    一.如何将一个十进制的整数用2进制表示出来? echo "obase=2;50" | bc 二.Linux下经常需要删除空白行,grep,sed,awk,tr等工具均可实现 gre ...

  9. nginx做负载均衡+keepalived(做主备)

    部署Nginx 一,安装nginx依赖: 查看是否已经安装 rpm -qa |grep gcc rpm -qa |grep openssl-devel rpm -qa |grep pcre-devel ...

  10. 【.net】The source was not found, but some or all event logs could not be searched

    1.案发现场: 注册服务的时候 2.解决方案: 用管理员身份运行CMD,再注册服务: I had to run Command Prompt with Administrator Rights.