MariaDB——(二) MariaDB 10.0.15 日志文件—undo 日志
日志的记录和维护是数据库中相当重要的内容,写这篇文章和后面几篇文章作为学习官网文档的笔记。MariaDB数据库日志可分为二进制日志、查询日志、错误日志、myISAM表日志、relay日志和撤销日志(undo log)。
MariaDB(mysql)的undo log 保存数据被InnoDB事务修改前的版本,用于数据恢复或者提供给“一致读consistent read”级别的事务读取,具体细节如下:
1.在某行数据被修改前,首先复制数据到undo log中,表中的每行数据包含一个指针指向undo log中最近的版本,redo log中的每行数据则包含一个指向前一个版本的指针(如果有的话),这样每行被修改的数据就形成了一个记录变更的“历史链history chain”,或者称之为变更集吧。
2.MariaDB中的每一个事物都运行在一定的隔离级别上,这个隔离级别isolation level 决定了怎样创建记录的“视图view”,对于READ UNCOMMITTED通常使用记录当前的版本(不管是否提交,即“脏读dirty reads”)。其它的事务隔离级别的视图则在redo log中查找最后一次提交的版本,READ COMMITTED针对每个表使用不同的视图,REPEATABLE READ可重复度和SERIALIZABLE则针对所有的表使用统一的视图。
3.存在一个全局的变更集(history chain),当有事务提交时,则将该记录版本添加到这个变更集中,这个变更集中的记录是按照事务提交的先后顺序保存的。
4.MariaDB的purge thread会删掉现有视图(view)不再需要的redo log中的记录。
在MariaDB中运行长事务会有哪些问题呢,从redo log工作的方式来考虑,首先的问题就是会造成redo log体积膨胀,因为较长的事务需要保存更多的版本历史,另一个问题是,如果事务需要读取很早之前的版本,就会造成性能影响。虽然只读的事务不会向redo log写记录,但是这些事务会阻止purge thread线程清除redo log,也会造成redo log臃肿。还有一个问题是,使用长事务更容易发生死锁,当然死锁和redo log没有关系。
和undo log相关的一些系统变量配置:
1.MariaDB的undo log通常是物理磁盘上的系统表空间的一部分,在10.0以后的版本中,可以使用 innodb_undo_directory 和 innodb_undo_tablespaces系统变量来将undo log保存到指定的设备位置。
2.innodb_undo_logs系统变量用于确定每个事物可用的最多回滚段数(undo log中的关于insert或者update操作的部分就是回滚段)。
3.innodb_avaliable_undo_logs状态变量保存InnoDB undo log中总的可用回滚段数。
4.innodb_flush_log_at_trx_commit决定了事物写入(flush)到undo log的频率,调整这个参数可以在速度和稳定性方面取得平衡(想必事物太频繁的flush undo log会造成性能低下), Binlog group commit and innodb_flush_log_at_trx_commit中有更详细的说明。
MariaDB——(二) MariaDB 10.0.15 日志文件—undo 日志的更多相关文章
- SpringBoot日志配置(详解) 涉及控制台输出日志、生成日志文件、日志级别修改、hibernate日志不输出
写在前面 本篇主要讲述日志配置,看完本篇可以解决下述问题, 控制台输出日志.生成日志文件.日志级别修改.hibernate日志不输出 Git Demo Path:https://github.com/ ...
- Zookeeper日志文件&事务日志&数据快照
Zookeeper持久化两类数据,Transaction以及Snapshot,logDir存储transaction命令,dataDir存储snap快照,其下子目录名称以version-2命名,子目录 ...
- mysql事务、redo日志、undo日志、checkpoint详解
转载: https://zhuanlan.zhihu.com/p/34650908 事务: 说起mysql innodb存储引擎的事务,首先想到就是ACID(不知道的请google),数据库是如何做到 ...
- Cenos7 编译安装 Mariadb Nginx PHP Memcache ZendOpcache (实测 笔记 Centos 7.0 + Mariadb 10.0.15 + Nginx 1.6.2 + PHP 5.5.19)
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...
- CentOS7 编译安装 Mariadb (实测 笔记 Centos 7.0 + Mariadb 10.0.15)
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...
- MariaDB——(三) MariaDB 10.0.15 standard replication主从复制搭建
最近看了一下MariaDB的常规复制章节,就按部就班的搭建了一下最简单的主从复制.需要的硬件环境很简单(在虚拟机VMware中搭建): 1:两台server:Master: 192.168.6.133 ...
- Java日志使用slf4j 配置log4j后,有日志文件 但日志文件内容为空
SLF4J的全称是Simple Logging Facade for Java,即简单日志门面. SLF4J并不是具体的日志框架,而是作为一个简单门面服务于各类日志框架,如java.util.logg ...
- (72)zabbix监控日志文件 MySQL日志为例
一般情况下,日志最先反映出应用当前的问题,在海量日志里面找到我们异常记录,然后记录下来,并且根据情况报警,大家可以监控系统日志.nginx.Apache.业务日志. 这边我拿常见的MySQL日志做监控 ...
- MariaDB——(一)CentOS 6.5 下 MariaDB 10.0.15 YUM 安装
1.配置yum源: 在MariaDB官网提供了yum源在线生成器,选择合适的系统和版本后,会生成所需的repo文件内容: 在/etc/yum.repos.d/目录下新建一个MariaDB.repo文件 ...
随机推荐
- Javascript 数组相关操作
数组排序问题: sort() arr.sort() 可以直接进行排序,但是排序的方式是按unicode 顺序而来,比如1,1000,200,这个顺序不是我们想要的结果: 所以有了另一种方法,针对num ...
- 微信小程序自定义TabBar
项目中需要根据用户角色控制TabBar中各Item的显示和隐藏,然而小程序自带TabBar没有提供隐藏某个item的功能,只好自己动手写了一个. 1.wxml文件 <view class=&qu ...
- L2-013 红色警报 (25 分)
L2-013 红色警报 (25 分) 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全 ...
- React相关:npm,ES6,
1.NPM: 参考:npm使用入门 npm 学习笔记整理 2.ES6参考:ES6 let命令:ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块 ...
- Some notes in Stanford CS106A(1)
Karel world 1.During make a divider operation --int x=5; double y = x/2 => y=2 we need sth as a ...
- bean 属性排列顺序
丑是丑了点,但是有效啊.@JsonPropertyOrder({ "IP", "accuracy", "continent", " ...
- MySQL 报错 1093
[Err] 1093 - You can't specify target table 'user' for update in FROM clause 报错的sql如下: delete from ` ...
- Python入门 (一)
本文是个人python学习笔记,学习资料为廖雪峰python教程,如需更多内容,请移步廖老师官方网站. 一 安装 官网下载安装包安装,安装好之后,在命令提示符输入python进入Python交互模式: ...
- mysql count 主键之坑
https://www.2cto.com/database/201508/433975.html
- day11.3分页操作divmod
# 分页显示 divmod(被除数,除数) INFO_LIST = [] for i in range(836): template = "第%s天,笨笨先僧 always be there ...