mysql 8.0 ~ innodb与变量优化
一 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与变量优化的更多相关文章
- MySQL 8.0 InnoDB新特性
MySQL 8.0 InnoDB新特性 1.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe,metadata管理更完善 2.快速在线加新列(腾讯互娱DBA团队贡献) 3. ...
- MySQL 并行复制演进及 MySQL 8.0 中基于 WriteSet 的优化
MySQL 8.0 可以说是MySQL发展历史上里程碑式的一个版本,包括了多个重大更新,目前 Generally Available 版本已经已经发布,正式版本即将发布,在此将介绍8.0版本中引入的一 ...
- Mysql优化系列(1)--Innodb重要参数优化
1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色 ...
- MySQL与MariaDB核心特性比较详细版v1.0(覆盖mysql 8.0/mariadb 10.3,包括优化、功能及维护)
注:本文严禁任何形式的转载,原文使用word编写,为了大家阅读方便,提供pdf版下载. MySQL与MariaDB主要特性比较详细版v1.0(不含HA).pdf 链接:https://pan.baid ...
- mysql 5.7 innodb count count(*) count(1) 大数据 查询慢 耗时多 优化
原文:mysql 5.7 innodb count count(*) count(1) 大数据 查询慢 耗时多 优化 问题描述 mysql 5.7 innodb 引擎 使用以下几种方法进行统计效率差不 ...
- MySQL的Innodb缓存相关优化
MySQL的Innodb缓存相关优化 INNODB 状态的部分解释 通过 命令 SHOW STATUS LIKE 'Innodb_buffer_pool_%' 查看 Innodb缓存使用率 (I ...
- mysql 8.0 主从复制的优化
mysql 8.0复制改进一简介: 基于GTID下的并行复制,本文不考虑MGR架构二 主要特性 1 基于writeset的下的改进型并行复制 我在之前的一篇文章关于并行复制中详细的介绍了关 ...
- MySQL 8.0安装 + 配置环境变量 + 连接 cmd
MySQL 安装教程 搜索 MySQL,进入官网,找到 download 点击适用于 window community 版本,点击图中第二个 450.7 M 的安装包进行下载 这里有五个选项,选择第二 ...
- MySQL · 引擎特性 · InnoDB 事务子系统介绍
http://mysql.taobao.org/monthly/2015/12/01/ 前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoD ...
随机推荐
- Hibernate3 多对多关系
学习hibernate的笔迹第三篇,主要内容:多对多关系, 检索策略,HQL查询,QBC,事物管理,c3p0配置 1.1.1 Hibernate的关联关系映射:(多对多) 1.1.1.1 多 ...
- python基础-格式化时间
module datatime用strftime格式化时间import datetimedatetime.datetime.now() 返回microsecond,要修改datetime.dateti ...
- HTML学习笔记Day5
一.CSS属性 1.文本溢出是否“...”显示属性:text-overflow:clip(不显示省略标记)/ellipsis(文本溢出时“...”显示) 定义此属性有四个必要条件:1)须有容器宽度:w ...
- Luogu P2148 [SDOI2009]E&D
题目链接 \(Click\) \(Here\) 蒟蒻的人生第一道博弈论.真吉尔难啊.... 通常的博弈论写法似乎都是\(SG\)函数打表猜规律.本蒻其实本来想学一下博弈论的证明的,但后来发现果然还是打 ...
- CactiEZ中文解决方案和使用教程
CactiEZ中文版是最简单有效的Cacti中文解决方案,整合Spine,RRDTool和美化字体.集成Thold,Monitor,Syslog,Weathermap,Realtime,Errorim ...
- ps: 图层样式;
图层样式是ps的一项图层处理能力,功能强大,能够简单快捷的制作处立体投影,各种质感以及光影效果. 10种图层样式: (1)投影:将为图层上的对象.文本或形状后面添加阴影效果.投影参数由“混合模式”.“ ...
- bzoj2243 树链剖分
https://www.lydsy.com/JudgeOnline/problem.php?id=2243 新学的树剖,在维护的时候线段树维护区间内颜色数量以及左右两端的颜色.统计的时候区间合并时判断 ...
- 20165232 2017-2018-2《Java程序设计》结对编程一 第一周总结
20165232 2017-2018-2<Java程序设计>结对编程一 第一周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...
- python3 rrdtool 使用
源自 python自动化运维:技术与最佳实践 并做略微修改 安装 yum install python-rrdtoolyum install rrdtool-devel #因为采集用了psutil模块 ...
- JAVA核心技术I---JAVA基础知识(查漏补缺private,static)
一:private对于类和对象(同C++) private是只有这个类内部可以访问(类的成员函数和定义初始化) private是类之间的限制,而不是对对象的限制<重点> 同类对象是可以直接 ...