现在的位置: 首页 > 综合 > 正文

再谈 事务 与 io

2014年10月08日 ⁄ 综合 ⁄ 共 2404字 ⁄ 字号 评论关闭

InnoDB uses its log to reduce the cost of committing transactions. Instead of flushing the buffer pool to disk after each transaction commits, it logs the transactions.----不是同步提交到硬盘,而是先写到缓存中,通过事务日志来保证安全性. The
changes transactions make to data and indexes often map to random locations in the tablespace, so flushing these changes to disk would require random I/O. As a rule, random I/O is much more expensive than sequential I/O because of the time it takes to seek
the correct location on disk and wait for the desired part of the disk to rotate under the head.----尽量把随机IO转化成顺序IO
     InnoDB uses its log to convert this random disk I/O into sequential I/O. Once the log is safely on disk, the transactions are permanent, even though the changes haven’t been written to the data files yet. If something bad happens (such as a power failure),
InnoDB can replay the log and recover the committed transactions. --Innodb通过原始的数据文件+事务日志,即可重做生成正确的数据. Of course, InnoDB does ultimately have to write the changes to the data files, because the log has a fixed size. It writes to the log in a circular fashion:
when it reaches the end of the log, it wraps around to the beginning. ---事务日志是被循环利用的It can’t overwrite a log record if the changes contained there haven’t been applied to the data files, because this would erase the only permanent record of the committed transaction.
---随意重用了事务日志将会非常危险.
    InnoDB uses a background thread to flush the changes to the data files intelligently.This thread can group writes together and make the data writes sequential, for improved efficiency. In effect, the transaction log converts random data file I/O into mostly
sequential log file and data file I/O. Moving flushes into the background makes queries complete more quickly and helps cushion the I/O system from spikes in the query load.--后台flush 进程有利于缓冲IO.The overall log file size is controlled by innodb_log_file_size
and innodb_log_files_in_group, and it’s very important for write performance. The total size is the sum of each file’s size. By default there are two 5 MB files, for a total of 10 MB. This is not enough for a high-performance workload. The upper limit for
the total log size is 4 GB, but typical sizes for extremely write-intensive workloads are only in the hundreds of megabytes (perhaps 256 MB total).

InnoDB uses multiple files as a single circular log. You usually don’t need to change the default number of logs, just the size of each log file. To change the log file size, shut down MySQL cleanly,
move the old logs away, reconfigure, and restart. Be sure MySQL shuts down cleanly, or the log files will actually have entries that need to be applied to the data files! Watch the MySQL error log when you restart the server. After you’ve restarted successfully,
you can delete the old log files.----事务日志对innodb的恢复很重要,所以要确保innodb是gracefully shutdown


抱歉!评论已关闭.