日志的记录和维护是数据库中相当重要的内容,写这篇文章和后面几篇文章作为学习官网文档的笔记。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. svg 高宽随父元素自适应

    <html lang="en"> <head> <meta charset="UTF-8"> <meta name=& ...

  2. CSS效果:动态图标

    HTML: <html lang="en"> <head> <meta charset="UTF-8"> <meta ...

  3. Fescar: Fast & Easy Commit And Rollback

    Fescar is an easy-to-use, high-performance, java based, open source distributed transaction solution ...

  4. 访问mysql出现Access denied for user 'root'@'的解决方法

    1.关闭mysql的服务 方法一:我的电脑右键-管理-服务和应用程序-服务,找到mysql,右键关闭 方法二:cmd进入命令提示符,service mysqld stop(这个是网上的方法,我试了一下 ...

  5. Microsoft宣布为Power BI提供AI模型构建器,关键驱动程序分析和Azure机器学习集成

    微软的Power BI现在是一种正在大量结合人工智能(AI)的商业分析服务,它使用户无需编码经验或深厚的技术专长就能够创建报告,仪表板等.近日西雅图公司宣布推出几款新的AI功能,包括图像识别和文本分析 ...

  6. 常用git操作命令

     查看远程仓库 ->$ git remote -v    如果你本地有一个项目,想把他放到远程git服务器上,那就用上面的命令把项目 add 到远程服务器 ->$ git remote a ...

  7. seriviceWorker 小结

    serviceWorker 的状态 install → activate. 1.初进页面,此前未加载过serviceWorker,直接进入install状态,随后进入activate状态,但是此时se ...

  8. Go小爬虫测试

    package main import ( "fmt" "io/ioutil" "log" "net/http" ) t ...

  9. Python入门 (二)

    本文是个人python学习笔记,学习资料为廖雪峰python教程,如需更多内容,请移步廖老师官方网站. 一 函数式编程Functional Programming 函数式编程允许把函数本身作为参数传入 ...

  10. cocos creator

    动画效果: 如图在场景中创建一个空节点,点击添加Animatiion 选中要改变的属性.(以spriteFrame为例) 将选中的图片拖动到所示位置,此时点击播放按钮即可预览. 保存之后将层级管理器中 ...