- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高性能MySQL (一)优化服务器设置
MySQL有大量可以修改的参数——但不应该随便去修改。通常只需要把基本的配置项配置
正确 (大部分情况下只有很少一些参数是真正重要的),应该将更多的时间花在schema 的
优化、索引,以及查询设计上。
确保基本的配置是正确的,如果碰到了问题,并且问题是由于服务器的某部分导致的,而这
恰好可以通过某个配置项解决,那么需要做的就是更改配置。
MySQL基本配置
InnoDB在大多数情况下如果要运行的很好,配置大小合适的缓冲池(Buffer Pool)和日志文
件(Log File)是必须的。默认值都太小了。其他所有的InnoDB设置都是可选的。
我们建议,当配置内存缓冲区的时候,宁可谨慎,而不是把它们配置的过大。如果把缓冲池
配置得比它可设的值少了20%,很可能只会对性能产生小的影响,也许就只影响几个百分
点。如果设置得大了20%,则可能会造成更严重的问题:内存交换、磁盘抖动,甚至内存
耗尽和硬件死机。
配置内存使用
可以按下面的步骤来配置内存:
1、确定可以使用的内存上限。
2、确定每个连接MySQL 需要使用多少内存,例如排序缓冲和临时表。
3、确定操作系统需要多少内存。包括同一台机器上其他程序使用的内存。
4、把剩下的内存全部给MySQL 的缓存,例如InnoDB缓冲池,这样做很有意义。
为缓存分配内存
下面是我们认为大部分情况来说最重要的缓冲:
InnoDB缓冲池(innodb_buffer_pool_size)
InnoDB 日志 文 件 (innodb_log_buffer_size) 和 MyISAM 数 据 的 操 作 系 统 缓 存
(key_buffer_size)
MyISAM键缓存(myisam_block_size)
线程缓存(thread_cache_size)
查询缓存(query_cache_size)
无法手工配置的缓存,例如二进制日志和表定义文件的操作系统缓存
InnoDB缓冲池
如果大部分都是InnoDB表,InnobDB缓冲池或许比其他任何东西更需要内存。
如果数据量不大,并且不会快速增长,就没必要为缓冲池分配过多的内存。
很大的缓冲池也会带来一些挑战,例如,预热和关闭都会花费很长的时间。如果有很多脏页
在缓冲池里,InnoDB关闭时可能会花费较长的时间,因为关闭之前需要把脏页写回数据文
件。也可以强制快速关闭,但是重启时就必须多做更多的恢复工作,也就是说无法同时加速
关闭和重启两个动作。如果事先知道什么时候需要关闭InnoDB,可以在运行时修改
innodb_max_dirty_pages_pct 变量,将值改小,等待刷新线程清理缓冲池,然后在脏页数
量较少时关闭。可以监控innodb_buffer_pool_pages_dirty 状态变量或者SHOW INNODB
STATUS来观察脏页的刷新量。
更小的innodb_max_dirty_pages_pct 变量值并不保证InnoDB将在缓冲池中保持更少的脏
页。他只是控制InnoDB 是否可以“偷懒 (Lazy)”的阈值。InnoDB默认通过一个后台线程
来刷新脏页,并且会合并写入,更高效地顺序写出磁盘。当脏页的百分比超过了这个阈值,
InnoDB将快速地刷写脏页,尝试让脏页的数量更低。当事务日志没有足够的空间剩余时,
InnoDB 也将进入“激烈刷写(Furious Flushing)”模式,这就是大日志可以提升性能的一个原
因。
InnoDB事务日志
InnoDB使用多个文件作为一组循环日志。通常不需要修改默认的日志数量,只修改每个日
志文件的大小即可。
要确定理想的日志文件大小,必须权衡正常数据变更的开销和崩溃需要的时间。如果日志太
小,InnoDB将必须做更多的检查点,导致更多的日志写。在极个别情况下,写语句可能被
拖累,在日志没有空间继续写入前,必须等待变更应用到数据文件。另一方面,如果日志太
大了,在崩溃恢复时InnoDB可能不得不做大量的工作。这可能极大地增加恢复时间。
当InnoDB变更任何数据时,会写一条变更记录到内存日志缓冲区。在缓冲满的时候、事务
提交的时候,或者每一秒钟,InnoDB都会刷写缓冲区的内容到磁盘日志文件。如果有大事
务,增加日志缓冲区 (默认1MB)大小可以帮助减少I/O。变量innodb_log_buffer_size 可
以控制日志缓冲区的大小。
可以通过检查SHOW INNODB STATUS 的输出中LOG 部分来监控InnoDB 的日志和日志
缓冲区的I/O 性能,通过观察Innodb_os_log_writte
文档评论(0)