日志的记录和维护是数据库中相当重要的内容,写这篇文章和后面几篇文章作为学习官网文档的笔记。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 日志的更多相关文章

  1. SpringBoot日志配置(详解) 涉及控制台输出日志、生成日志文件、日志级别修改、hibernate日志不输出

    写在前面 本篇主要讲述日志配置,看完本篇可以解决下述问题, 控制台输出日志.生成日志文件.日志级别修改.hibernate日志不输出 Git Demo Path:https://github.com/ ...

  2. Zookeeper日志文件&事务日志&数据快照

    Zookeeper持久化两类数据,Transaction以及Snapshot,logDir存储transaction命令,dataDir存储snap快照,其下子目录名称以version-2命名,子目录 ...

  3. mysql事务、redo日志、undo日志、checkpoint详解

    转载: https://zhuanlan.zhihu.com/p/34650908 事务: 说起mysql innodb存储引擎的事务,首先想到就是ACID(不知道的请google),数据库是如何做到 ...

  4. 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 显示系统版 ...

  5. 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 显示系统版 ...

  6. MariaDB——(三) MariaDB 10.0.15 standard replication主从复制搭建

    最近看了一下MariaDB的常规复制章节,就按部就班的搭建了一下最简单的主从复制.需要的硬件环境很简单(在虚拟机VMware中搭建): 1:两台server:Master: 192.168.6.133 ...

  7. Java日志使用slf4j 配置log4j后,有日志文件 但日志文件内容为空

    SLF4J的全称是Simple Logging Facade for Java,即简单日志门面. SLF4J并不是具体的日志框架,而是作为一个简单门面服务于各类日志框架,如java.util.logg ...

  8. (72)zabbix监控日志文件 MySQL日志为例

    一般情况下,日志最先反映出应用当前的问题,在海量日志里面找到我们异常记录,然后记录下来,并且根据情况报警,大家可以监控系统日志.nginx.Apache.业务日志. 这边我拿常见的MySQL日志做监控 ...

  9. MariaDB——(一)CentOS 6.5 下 MariaDB 10.0.15 YUM 安装

    1.配置yum源: 在MariaDB官网提供了yum源在线生成器,选择合适的系统和版本后,会生成所需的repo文件内容: 在/etc/yum.repos.d/目录下新建一个MariaDB.repo文件 ...

随机推荐

  1. 运维seq语法

    seq-print a sequence of numbers 用于产生从某个数到另外一个数之间的所有整数 语法:seq 开始列  指定步长  结束列 参数: -f :指定输出格式,允许使用print ...

  2. python—函数

    # 函数:1.减少重复代码:# 2.使程序变的可扩展# 3.使程序变的易维护# 永远只能且返回一个值#def 定义内容# a,b = 5,8# c = a** b# print(c)## def ca ...

  3. redis客户端(三)

    redis客户端 一.>redis自带的客户端 启动 启动客户端命令:[root@ming bin]# ./redis-cli -h xxx.xxx.xx.xxx-p 6379 注意: -h:指 ...

  4. outlook2010设置失败后重新设置

    1.WIN+R ,然后在弹出框中输入outlook /importprf .\.prf 2.重新设置.

  5. 14JDBC

    一.JDBC简介 全名:java database connection java代码与数据库相连的工具,java>JDBC>(oracle  mysql sql server) 二.四大 ...

  6. 12集合(2)-----Set

    一.总体分类 Collection(包括方法add,remove,contains,clear,size) List(接口) LinkedList ArrayList Vector---Stack 2 ...

  7. javascript获取某个月份的天数

    function DayNumOfMonth(Year,Month)      //例DayNumOfMonth(2017,05);{ Month--;   //月份是0~11.month=4 var ...

  8. 炒鸡讨厌换python版本呀

    https://www.cnblogs.com/yjlch1016/p/8641910.html 还是说,装个 Anaconda,你好我好大家好. https://blog.csdn.net/qq_3 ...

  9. vue day4 table

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  10. c# excel xls保存

    public HSSFWorkbook Excel_Export(DataTable query,string title,int[] rowweight,string[] rowtitle) { H ...