zoukankan      html  css  js  c++  java
  • 【MYSQL】MySql数据库WAL(Write-Ahead Logging)机制

    简介

      WAL 的全称是 Write-Ahead Logging,中文称预写式日志,是一种数据安全写入机制。就是先写日志,然后在写入磁盘,这样保证数据的安全性。Mysql中的Redo Log就是采用WAL机制。

    WAL作用

      Mysql中如果为了保证数据的持久性,在每提交一个事务就将日志刷新到磁盘上,这样效率就太低了,严重影响性能,所以就有了Write-Ahead 。
      Write-Ahead工作机制:
        先在内存中提交事务,然后写日志(在InnoDB中就是Redo Log,日志是为了防止宕机导致内存数据丢失),然后再后台任务中把内存中的数据异步刷到磁盘。


    WAL优缺点

      使用WAL代替回滚日志有其优点和缺点。

      优点:
        1. 在大多数情况下,WAL的速度要快得多。

        2. WAL提供了更多的并发性,因为读卡器不会阻塞写卡器,而写卡器也不会阻塞读卡器。读和写可以同时进行。

        3. 使用WAL,磁盘I/O操作往往更为连续。

        4. WAL使用的fsync()操作更少,因此在fsync()系统调用中断的系统上不易受到问题的攻击。

       缺点: 

        1. 一般情况下需要VFS支持共享内存模式(shared-memory primitives)。

        2. 操作数据库文件的进程必须在同一台主机上,不能用在网络操作系统。

        3. 持有多个数据库文件的数据库连接对于单个数据库时原子的,对于全部数据库是不原子的。

        4. 进入WAL模式以后不能修改page的size。

        5. 不能打开只读的WAL数据库(Read-Only Databases),这进程必须有"-shm"文件的写权限。

        6. 对于只进行读操作,很少进行写操作的数据库,要慢那么1到2个百分点。

        7. 会有多余的"-wal"和"-shm"文件。

        8. 需要开发者注意checkpointing检查点。

    参考来源

      http://www.sqlite.org/draft/wal.html

  • 相关阅读:
    sql 内链接
    使用python 写一个自动windows桌面壁纸的程序
    在windows使用pyinstall 打包 flask 再使用nsis软件打包成安装包
    超微主板ibm密码
    jenkins邮件模板
    gp集群常用命令
    shell小知识
    Linux配置免密
    文件基础命令
    华为初识命令
  • 原文地址:https://www.cnblogs.com/songgj/p/11192776.html
Copyright © 2011-2022 走看看