`
oliver_peng
  • 浏览: 44296 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于MySQL Innodb log 日志的一点收获

阅读更多
最近了解Innodb 日志,弄明白了两个问题。

首先Innodb log的功能,有两种log: undo log 和 redo log.

undo log实现事物的回滚(roll back transaction).

redo log用来实现灾难恢复(crash recovery).突然断电会导致Innodb表空间(Table space)中的数据没有被更新到磁盘上,通过重新执行redo log 能够重新执行这些操作来恢复数据。

redo log 还有一个很重要的功能是提升InnoDB的I/O性能. Innodb引擎把数据和索引都载入到内存中的缓冲池(buffer pool)中,如果每次修改数据和索引都需要更新到磁盘,必定会大大增加I/O请求,而且因为每次更新的位置都是随机的,磁头需要频繁定位导致效率低.所以Innodb每处理完一个请求(Transaction)后只添加一条日志log,另外有一个线程负责智能地读取日志文件并批量更新到磁盘上,实现最高效的磁盘写入.

Innodb log文件的尺寸多大合适,首先通过执行以下Query能够算出每分钟写入多少数据到日志文件:

mysql> pager grep sequence
PAGER set to 'grep sequence'
mysql> show innodb status \G; select sleep(60);  show innodb status \G;
Log sequence number 178 764981234
1 row in set, 1 warning (0.01 sec)

ERROR:
No query specified

1 row in set (1 min 0.00 sec)

Log sequence number 178 777500289
1 row in set, 1 warning (0.02 sec)

ERROR:
No query specified

mysql> nopager
PAGER set to stdout
mysql> SELECT (777500289 - 764981234) / 1024 / 1024 AS MB_per_min;
+-------------+
| MB_per_min  |
+-------------+
| 11.93910122 |
+-------------+
1 row in set (0.00 sec)


计算的结果是大概12M每分钟,根据Baron Schwartz的建议,Innodb日志文件能够保存一小时的数据就足够了,所以日志文件设置为720M就可以了.

英文原文: http://www.mysqlperformanceblog.com/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/

另外对于有很频繁增删改操作的数据库,通过将innodb_flush_log_at_trx_commit = 2能够大幅提高I/O性能.
1
0
分享到:
评论

相关推荐

    InnoDB_Log_Structures

    在MySQL中,InnoDB引擎使用重做日志(Redo Log)和回滚日志(Undo Log)来维护数据的持久性和一致性。重做日志记录了所有对数据库所做的更改,用于系统崩溃恢复时重做操作,而回滚日志用于支持事务的回滚操作。 ###...

    MySQL Innodb 参数详解与优化实践

    - **描述**:指定InnoDB日志文件的存放目录,必须与`innodb_log_arch_dir`设置相同的值。 - **应用场景**:当需要更改日志文件存放位置时使用,例如将其放置在高性能存储设备上以提高性能。 ##### 5. `innodb_log_...

    mysql用户权限与日志(MySQL用户、访问鉴权、日志记录系统、日志配置查看、InnoDB事务日志等)..docx

    InnoDB事务日志由一组文件组成,每个文件的大小可通过`innodb_log_file_size`参数配置。默认情况下,InnoDB会创建两个文件,并且可以在运行时动态增加新的日志文件。 **3、错误日志** 错误日志(error log)记录...

    MySql Innodb 引擎特性详解

    - `innodb_log_file_size` 和 `innodb_log_files_in_group`:控制重做日志文件的大小和数量,以确保在事务提交时的性能。 - `innodb_flush_log_at_trx_commit`:控制日志刷新频率,2表示每秒刷新一次,这在大多数...

    mysql 5.6 新特性-innodb

    ### MySQL 5.6 新特性-InnoDB:深入剖析 #### MySQL 5.6 版本简介及重要性 MySQL 5.6 是 MySQL 的一个重要版本,相比于之前的版本(如 MySQL 5.1 和 5.5),它在多个方面进行了显著的改进。这些改进不仅提升了...

    MySQL InnoDB 源码实现分析

    - **日志同步**:确保所有已提交事务的日志都被写入到redo log文件中。 - **恢复机制**:在系统重启时,可以通过redo log文件恢复未完成的事务,保证数据一致性。 #### Group Commit Group Commit是一种优化技术,...

    MYSQL innodb性能优化学习总结

    MySQL InnoDB性能优化的学习总结涉及了多个关键知识点,下面将对这些知识进行详细说明: 1. **参数配置与优化**: - **innodb_buffer_pool_size**:InnoDB的缓冲池大小,建议设置为系统内存的60%至80%,以便将数据...

    innodb log漫游 @何登成1

    InnoDB存储引擎是MySQL数据库中广泛使用的事务型存储引擎,其强大的事务处理能力和高可用性离不开日志系统的支持。日志系统主要包括两种类型:Undo Log和Redo Log,它们协同工作以确保事务的原子性、一致性、隔离性...

    Mysql 的InnoDB引擎相关读书笔记

    1.2.1.InnoDB内存结构——log buffer.md 1.2.2.InnoDB内存结构——change buffer.md 1.2.3.InnoDB内存结构——额外内存池.md 1.3.0.InnoDB磁盘结构——逻辑存储结构.md 1.3.1.InnoDB磁盘结构——表.md 1.3.2.InnoDB...

    py_innodb_page_info工具

    这就需要用到如`py_innodb_page_info`这样的工具,它为我们提供了一扇窗口,让我们可以深入到InnoDB存储引擎的底层,直观地理解日志(redo log和undo log)以及数据文件的工作方式。本文将详细介绍`py_innodb_page_...

    Mysql InnoDB删除数据后释放磁盘空间的方法

    3. 删除InnoDB相关的所有数据文件,包括ibdata1(系统表空间文件)和ib_logfile*(重做日志文件)。 4. 重启MySQL服务,系统会自动重建这些必要的文件。 5. 最后,导入之前备份的数据库文件,恢复数据。 具体的命令...

    mysql innodb引擎 知识点总结

    以下是关于MySQL InnoDB引擎的一些关键知识点: 1. **事务处理**:InnoDB支持ACID(原子性、一致性、隔离性和持久性)事务,这是企业级数据库系统的基本需求。事务的四大特性确保了数据的一致性和可靠性。 2. **...

    2 万字 + 30 张图 | 细聊 MySQL undo log、redo log、binlog 有什么用?.doc

    在本文中,我们讨论了 MySQL 事务日志机制的原理和实现,包括 undo log、redo log 和 binlog 三种日志机制的作用和原理。我们还讨论了 MySQL 事务日志机制的应用场景,包括数据备份、主从复制和事务回滚等。

    Mysql启动中 InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes 的问题

    然而,在某些情况下,可能会遇到一个特定的问题,即“Error: log file ./ib_logfile0 is of different size 0 5242880 bytes”,这通常意味着InnoDB的日志文件大小与MySQL配置文件中设置的大小不匹配。 日志文件...

    MySQL启动报错问题InnoDB:Unable to lock/ibdata1 error

    5. **InnoDB日志文件问题**:InnoDB使用重做日志文件(`ib_logfile0`和`ib_logfile1`)进行事务持久化。如果这些文件损坏或无法访问,也可能导致启动失败。检查日志文件的状态。 6. **数据文件损坏**:`ibdata1`...

    MySQL InnoDB小结1

    MySQL中的InnoDB存储引擎是用于处理事务处理和并发操作的核心组件。InnoDB是MySQL数据库中最常用的存储引擎之一,尤其在需要事务支持的应用中。本文将深入探讨InnoDB的特性和事务处理的ACID属性。 首先,事务是...

    3000帧动画图解MySQL为什么需要binlog、redo log和undo log.doc

    MySQL数据库管理系统需要binlog、redo log和undo log三个重要的日志系统,以确保数据的一致性和持久性。下面是对这些日志系统的详细解释: 为什么需要分层设计 MySQL数据库系统采用分层设计,将Server层和存储引擎...

    MySQL数据库innodb启动失败无法重启的解决方法

    4. **日志文件和数据恢复**:如果上述方法无效,可能需要进一步分析错误日志,特别是InnoDB的重做日志(redo log)和回滚日志(undo log),这些记录了事务操作,可能有助于恢复数据。在某些情况下,备份可能是唯一...

Global site tag (gtag.js) - Google Analytics