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

    redis cluster最简配置 master配置如下:(默认6379端口) bind 127.0.0.1 port 6379 timeout 0 databases 16 Master的redis ...

  2. [JsonSchema] 关于接口测试 Json 格式比对核心算法实现 (Java 版)

    引言 为什么要自己重新造轮子,而不是采用第三方的JsonSchema方法进行实现存在以下痛点:1.我之前在网上找了很久,没有找到java版直接进行jsonschema生成的方法或直接比较的方法2.ht ...

  3. Raspberry Pi 安装配置 Home Assistant

    家庭助理(Home Assistant)是一款基于 Python 的智能家居开源系统,支持众多品牌的智能家居设备,可以轻松实现设备的语音控制.跟踪和控制家里的所有设备, 并自动化控制,能完美的运行在树 ...

  4. 合肥工业大学oj G-诺德森海岸

    #include<iostream> #include<vector> #include<bits/stdc++.h> using namespace std; v ...

  5. SQL 姓名,联系方式-脱敏

    SELECT ORDER_PROJECT.project_type AS attribute, ORDER_PROJECT.order_num, ,), "*") AS pv, C ...

  6. 06_java基础知识——break/continue和标签的配合使用

    package com.huawei.test.java03; /** * This is Description * * @author * @date 2018/08/29 */ public c ...

  7. wordpress 暴力破解防范

    一.author页面地址 author页面地址为 http://yoursite/?author=1 ID是自增的 请求这个地址会 301 到一个url,这个url里包含了作者的用户名.虽然不算漏洞, ...

  8. HyperLogLog算法

    项目在统计UV/PV时用到了Druid的Hyper hyperunique算法,书上介绍这种算法求出的UV/PV存在一定误差,因此需要了解下误差来自哪里. 实现去重功能,最简单的就是使用set记录集合 ...

  9. python从零开始 -- 第2篇之python版本差异

    python从零开始 -- 第2篇之python版本差异 第0篇开始,咱们就说选择 python 3.x,一般来说,咱们面临选择的时候总是想了解更多一点,并且版本之间的对比能引申出很多有意思的故事和知 ...

  10. 本地新建git仓库后与远端仓库关联

    背景说明:如果你想把自己的一个项目开源到,需要新建一个本地代码仓库,然后与远端代码库建立关.不想使用git clone 命令去克隆远端新建代码仓库,然后再将我们写好的代码copy到克隆下来的文件夹里, ...