[size=large][/size]最近了解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性能.
分享到:
相关推荐
### MySQL InnoDB 日志 回滚段 & 崩溃恢复实现详解 #### 知识准备 - **ACID** - 在数据库管理系统中,事务具有四个关键属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性...
以上总结了InnoDB日志结构的基本知识点,旨在帮助IT专业人员深入理解InnoDB日志的工作原理和配置管理方法。实际应用中,对于日志文件的管理需要结合具体的业务场景和性能要求,制定出合理的策略和最佳实践。
- `innodb_log_files_in_group=…`:每个InnoDB日志文件组中的日志文件数量。 - `innodb_log_file_size=…`:每个InnoDB日志文件的大小。 #### 二、创建备份 本节将详细介绍如何使用ibbackup创建完整的压缩与非...
- **描述**:指定InnoDB日志文件的存放目录,必须与`innodb_log_arch_dir`设置相同的值。 - **应用场景**:当需要更改日志文件存放位置时使用,例如将其放置在高性能存储设备上以提高性能。 ##### 5. `innodb_log_...
12. **innodb_log_group_home_dir**:定义InnoDB日志文件的存放目录。 优化这些参数需要根据实际的数据库负载、硬件配置和业务需求进行调整。在调整时,应谨慎考虑性能与数据安全之间的平衡,确保在提升性能的同时...
5. **InnoDB日志文件问题**:InnoDB使用重做日志文件(`ib_logfile0`和`ib_logfile1`)进行事务持久化。如果这些文件损坏或无法访问,也可能导致启动失败。检查日志文件的状态。 6. **数据文件损坏**:`ibdata1`...
- 指定InnoDB日志文件归档目录的位置。 - **第12行**: `innodb_log_archive=0` - 设置是否启用日志归档功能。0表示不启用,1表示启用。默认为0。 - **第13行**: `innodb_buffer_pool_size=80M` - 设置InnoDB...
9. **性能优化**:手册会涵盖如何调整InnoDB的参数以提升性能,如缓冲池大小、InnoDB日志文件大小等。 10. **性能监控**:了解如何使用MySQL的性能监视工具,如`SHOW ENGINE INNODB STATUS`和`SHOW INNODB STATUS`...
【InnoDB日志系统详解——Undo Log与Redo Log】 InnoDB存储引擎是MySQL数据库中广泛使用的事务型存储引擎,其强大的事务处理能力和高可用性离不开日志系统的支持。日志系统主要包括两种类型:Undo Log和Redo Log,...
* innodb_log_buffer_size:InnoDB 日志缓冲区大小 * innodb_flush_method:刷新日志的方法 * innodb_additional_mem_pool_size:innodb 内存池的大小,存放着各种内部使用的数据结构 * innodb_data_home_dir:...
适合对mysql有一定基础的同学,涉及mysql调优、集群等操作,包含详细的操作步骤和...3.2、INNODB日志 4、全局优化 4.1、全局参数配置 5、8.0新特性 5.1、Mysql8.0.17新特性 6、安装集群 6.1、单机版本 6.2、主从复制
InnoDB事务日志由一组文件组成,每个文件的大小可通过`innodb_log_file_size`参数配置。默认情况下,InnoDB会创建两个文件,并且可以在运行时动态增加新的日志文件。 **3、错误日志** 错误日志(error log)记录...
- **InnoDB Log Activity**:监测InnoDB日志文件的活动情况。 - **InnoDB Memory Allocation**:展示InnoDB内存分配情况,包括不同组件占用的内存大小。 - **InnoDB Row Lock Time**:显示行级锁定的时间,可用于...
- 关键的内存缓冲区包括InnoDB缓冲池、InnoDB日志文件、MyISAM数据的操作系统缓存、线程缓存和查询缓存。 2. **InnoDB缓冲池**: - InnoDB缓冲池是最重要的内存分配,用于存储InnoDB表的数据和索引。其大小直接...
- **innodb_log_files_in_group**: 一组中InnoDB日志文件的数量。 - **innodb_max_dirty_pages_pct**: 允许脏页在缓冲池中的最大百分比。 - **innodb_file_per_table**: 控制每个InnoDB表是否使用单独的数据文件。 -...
- **功能**:设置InnoDB日志缓冲区大小。 - **建议值**:通常设置为18M左右,具体数值可根据实际情况调整。 - **注意事项**:过大的缓冲区可能导致内存浪费。 10. **innodb_log_file_size** - **功能**:设定每...
当遇到"InnoDB Error ib_logfile0 of different size"错误时,意味着MySQL在启动时检测到当前的InnoDB日志文件(ib_logfile0和ib_logfile1)的大小与配置文件(my.cnf)中指定的大小不匹配,这可能导致数据库无法...
- `innodb_log_file_size`:InnoDB日志文件的大小,影响MySQL在异常情况下的恢复时间。 - `innodb_log_buffer_size`:日志缓冲区大小,用于保存事务日志。 - `innodb_flush_log_at_trx_commit`:设置事务提交时...