选择合适的innodb_log_file_size

Choosing proper innodb_log_file_size

选择合适的innodb_log_file_size

If you’re doing significant amount of writes to Innodb tables decent size of innodb_log_file_size is important for MySQL Performance. However setting it too large will increase recovery time, so in case of MySQL crash or power failure it may take long time before MySQL Server is operational again.

如果对 Innodb 数据表有大量的写入操作,那么选择合适的 innodb_log_file_size 值对提升MySQL性能很重要。然而设置太大了,就会增加恢复的时间,因此在MySQL崩溃或者突然断电等情况会令MySQL服务器花很长时间来恢复。

So how to find the optimal combination ?

那么,怎么才能找到最佳的配置组合呢?

First let me explain what happens on recovery and why large innodb_log_file_size slows down recovery. During startup after crash Innodb scans log files to find log records which only have been applied in memory and do not exist in tablespace. Log records for modifications which did not make it to the tablespace are then applied. This is called redo phase of recovery. It can take pretty long time and this time depends on number of variables - how large are rows ? (smaller log records mean more records for same sized logs), how random were data modifications (random updates will need random IO to check if pages are up to date), number of unflushed pages in innodb buffer pool and its size as well as performance of IO subsystem. As there are so many factors, it is hard to come up with any general guidelines, something like 1GB per 10 minutes of recovery time - instead you would need to apply load which is typical for your application, crash MySQL in the middle and watch it to recover. Doing this several times you should be able to estimate how long recovery time take and adjust your logs apropriately. The good thing is - redo phase is close to be proportional to size of log files, so expect 1GB logs to take twice time to apply compared to 512MB logs.

首先,让我先来解释一下恢复时都发生了什么事情以及为什么设置 innodb_log_file_size 的值太大了会让恢复过程变慢。Innodb 数据表崩溃再次启动时,MySQL 会扫描日志文件来找到那个只应用到内存中并且不存在的表空间的日志记录。那些没有没有放到表空间的修改日志记录就要被加进去。这叫做重做相位恢复。这需要相当长时间,它取决于变量的值 -- 到底有多少行记录?(日志记录的值越小意味着同样大小的日志里可以存储更多的记录),随机数据修改的几率有多高(随机更新需要有更多的随机IO来检查内存页是否更新),innodb 缓冲池中未被刷新的内存页数量并且它也是IO子系统的性能表现。由于有这么多因素,就很难产生通用的准绳,例如每10分钟恢复1GB数据的时长 -- 相反地,应该在典型的应用中来确定负载,在MySQL崩溃的过程中来监查它是怎么恢复的。这么做几次之后,你就应该能大致估算恢复所需的时间了从而更恰当地调整日志大小。好事是 -- 重做相位和日志文件大小成正比,因此预计恢复1GB的日志所需的时间大致是512MB的2倍。

Redo phase is however only one of the phases of recovery. The other important one is undophase - after log file are applied and database is in “physically consistent” state, Innodb will need to roll back certain transactions which Where not commited, but changes from which already made it to the database. Unlike “redo” phase “undo” phase can’t be reduced by sizing your log files. Even more undo phase can be slower with small log files. Undo phase takes considerable time if tranactions are long - Ie if you would delete 10000000 rows in the same transaction and crash in the middle recovery can take quite a long time. The only way you can reduce “undo” phase is size your transactions appropriately - so updates/inserts/deletes can be sized to affect limited number of rows.

然而重做相位是相位恢复的唯一方法。另一个重要的方法是撤销相位 -- 当日志文件应用完之后并且数据库处于 "物理一致性" 状态时,Innodb 会回滚那些没提交的事务,但是已经对数据库所做的修改就不管了。不像 "重做" 相位,"撤销" 相位不会因为日志尺寸变小而变快。甚至撤销相位还可能因为日志较小而变慢。撤销相位所耗时间因事务长短所致 -- 例如,如果需要在一个事务中删除 10000000 行记录,这个事务中途发生错误崩溃了,那么恢复就需要花很长时间了。唯一能减少 "撤销" 相位的方法是设置适当的日志大小值 -- 这样的话,记录更新/插入/删除时就会被限定在有限的数量里了。

Good thing about updo phase however is - it can be done in background as in MySQL 5.0. The rows affected by background rollback however might not be modified until rollback is complete.

不过撤销相位的好处是 -- 在MySQL 5.0中,它可以让在后台来执行。后台回滚的记录直至恢复完之后才能被修改。

One more thing to consider - how large log files do you need at all ? You could run benchmark with 1GB log files and 2GB and see if there is any performance benefit. After certain size increasing log file size do not dramatically increase performance, however this again depends on configuration and workload.

另一个要考虑的事是 -- 到底需要多大的日志?可以运行基准测试来检查 1GB 大小的日志相对 2GB 有什么好处。日志文件增加到一定大小后未必会戏剧性地提高性能,然而这同样依赖于配置以及MySQL的工作负载。

Note at this poing 4GB is maximum combined size allowed for innodb log files, which is however large enough limit for most onfigurations.

  注意,这里举例中的 4GB 是 innodb 日志文件的最大值,不过它明显比常用的配置大得多了。

时间: 2025-01-01 15:35:39

选择合适的innodb_log_file_size的相关文章

选择合适的java脚本语言

脚本 选择合适的java脚本语言--如果你正考虑在java应用中集成脚本解释器,最难得是决定使用那种 摘要:脚本语言已经向java开发者证明了它的价值.它让客户实现应用功能的扩展和界面的个性化,从而程序的价值得以提升.另外,它们可以显著的简化程序开发者的设计任务,通过实现动态定义.装载和评估.对于开发人员,集成一种或多种脚本语言的任务是简单的,从越来越长的可选列表中选出一个确实困难的.本文描述了一些伴随java应用中脚本语言支持的问题,并从不同角度比较了Groovy, JudoScript, P

如何选择合适的用户体验研究方法

注:这篇文章原文发表在可用性大师Jakob Nielsen的网站上,系统介绍了如何选择合适的用户体验研究方法.好的研究方法要在恰当的时间用到恰当的地方才能发挥其应有的效果,切忌手里有把锤子就看什么都像钉子.现在用研组根据我们公司的情况重新编译修改了下,供大家参考. 用户体验研究当前已经可以解答相当广泛的问题.通过在一个3维坐标系以及典型的产品开发阶段中列出各种可用的研究方法,可以了解到什么时候应当使用哪种方法. 用户研究领域有着相当广泛的研究方法,这是件好事(没准也是件坏事).从那些已经广泛验证

选择合适的关键词 让优化排名事半功倍

对于网站关键词的选择,大部分站长无外乎就是使用百度指数和站长类的查询工具.而还有一些心细的站长则是通过搜索引挚下拉框和相关搜索来选择关键词.给网站选择合适的关键词,不但使优化起来更加的容易,而且还可以花小功夫得高排名.关键词的选择是网站优化的第一步,而很多时候第一步则是关系着后期优化的方向和坚持.所以,对于关键词的选择,应该尽量的选合适自己用的.自己有能力优化的.回报率不低的. 首先关键词不要过于专业化.上网的用户学历水平都是参差不齐的,过于专业的关键词本身就针对性强的,除非你的网站是针对高学历

三方面分析站长如何选择合适的长尾关键词

热门关键词竞争过于激烈,致使很多三无站长转而选择合适的长尾关键词,而对于长尾关键词只要做好做足了,效果自然比主关键词实在.例如淘宝客类的,通常情况下,长尾关键词的转化率都非常的高.毕竟主关键词的转化率过于模糊,虽说流量很大,但是也有一些转化率还不及长尾关键词的.所以,对于站长选择关键词,不要先主后长尾,应该根据自己网站所需要的价值来选,如果是做流量的,那么选择流量大的没问题;如果是重视转化率的,自然流量大如果转化率低,那么应该尽早的放弃掉,因为你也不知道有没有把握优化上去.对于分析长尾关键词是否

浅谈站长如何选择合适的友情链接平台

友情链接平台是所有站长做外链的好去处,因为通过友情链接做的外链不但是有质量的,而且还是单向导入的,所以所有站长都愿意收集友情链接平台当做是外链资源.但是是不是所有的友情链接平台都合适做外链呢?其实不然,一些友情链接平台本身的效果排名都不好,做了也等于白忙活的.那么站长应该怎么选择适合当外链资源的友情链接平台呢?今天笔者来分享一下心得: 一.友情链接平台的权重 这个因素有什么作用,大家都知道吧.高权重的单向导入外链是什么含义,我想大家都知道也都喜欢.所以在寻找友情链接平台时,要确保其本身需要一定的

为你的集成需求选择合适的ESB

公司内外的不同应用间需要进行相互通信.企业服务总线(Enterprise Service Bus,ESB)已经被视为支持应用集成的 工具.但是ESB是什么呢?什么时候使用集成套件(integration suite)更为合适呢?下一个项目最合适的产品是什么?本 文将会讲述为什么没有银弹(silver bullet)以及为何有时ESB可能也是错误的选择.对于项目的成功来讲,选择合适的产 品是至关重要的. 术语"企业服务总线"的定义 众多来自不同供应商的产品都包含了"企业服务总线

如何选择合适的导航方式

  此文章列出了目前移动端常用的一些导航方式,并列出了优缺点.希望大家在做产品的时候能有所参考,有所考量.在不同的环境,不同的情况下选择合适的导航方式.让产品更加易用,好用.

机房布线 选择合适的布线产品

对于机房组网,我们要从企业本身的实际需求出发,根据组网经费的多少来务实地规划与设计网络:在采购好网络设备和服务器等设备后,如何对机房.办公地点进行合理的网络布局与布线,对于设计者来说,也是致关重要的. 机房布线系统在施工过程中主要分为两个大的部分,一是前期设计,另一个就是产品选型.一个优秀的机房布线系统,既要设计得极具前瞻性和可扩展性,又要采用最合适的布线产品. 选择合适的机房布线铺设方式 在各类机房中,综合布线系统的铺设位置分上走线和下走线两大类, 即吊顶布线和地板布线.有的用户会问,上走线和

css教程:选择合适的、有意义的元素描述内容

  您应该明白为什么我会说到这个,选择合适的.有意义的元素去描述你的内容,确保您所选择的是富有语义的类class和id特征值.做正确的事情会使你的生活变得容易很多,如果你是某个团队的一分子,对团队其他成员来说也是如此.看一下下面的这条规则: Webjx.Com .l13k { color: #369; } Webjx.Com 如果您是刚接手这个工作,您在CSS文件中看到了上面的内容,您能不能说清楚这个类是什么意思? 大部分情况下您都会说不.这个类的名称可能是个缩写,但是恐怕没有办法去弄清楚他到底