叶金荣:Linux下的MySQL调优.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
叶金荣:Linux下的MySQL调优

尽量以联合索引为主,去掉不需要的索引,提高数据更新效率;建立索引时需要根据索引的效率,如果基数太小,则考虑是否真的必须 尽量避免全表扫描 测试索引效果时,一定要关闭query cache和key buffer t_char表实例,原先有80个字段,10个text字段,text字段实际最长才2k,拆分成非text字段表+2个text字段表,结果表空间文件大小从40g降到了总合不到8g,IO也快了不少。因此说,尽量把变长类型字段和定长型字段拆分开 * * 例子:一个表几十个字段,其中有将近10个text字段,实际最大长度只有2k,因此把变长字段单独放到几个小表里,表空间文件直接从40g变成总和不到8g,总体读写性能也提高不少 innodb表空间文件以及myisam的索引文件一段时间后,都会产生碎片,可以在维护期间执行optimize,如果一直是在线表,则可以考虑分表,定期倒腾表。在线表=历史表=永久表,避免产生碎片,并可以根据需要随时维护 字符串尽量少用字符集,变长型字段尽量和定长型字段分开存储 When innodb_flush_log_at_trx_commit is set to 0, the log buffer is written out to the log file once per second and the flush to disk operation is performed on the log file, but nothing is done at a transaction commit. When this value is 1 (the default), the log buffer is written out to the log file at each transaction commit and the flush to disk operation is performed on the log file. When set to 2, the log buffer is written out to the file at each commit, but the flush to disk operation is not performed on it. However, the flushing on the log file takes place once per second also when the value is 2. Note that the once-per-second flushing is not 100% guaranteed to happen every second, due to process scheduling issues. * * Presented by, MySQL AB? O’Reilly Media, Inc. 叶金荣 MySQL专家组核心成员 2008-1-9 imysql@imysql.cn Linux 下的MySQL调优 主要内容 需求:为什么要调优 分析:怎么找到软肋 实战:如何调优 总结 为什么要调优 老板要求 客户投诉 机器发飙 自己主动 机器发飙 网站或客户端打开非常慢,而webserver负载低,或打开静态页面很快,那就很可能是数据库的问题 load average = 5 Iowait = 10 vmstat procs(r b) 值较高 top中CPU的idle很小,sys或wait较高 服务器的swap严重 mysql的内存命中率很低,例如 myisam_key_read_hit_ratio或innodb_buffer_hit_ratio较低 瓶颈定位 vmstat,iostat,top等系统级别的工具 explain slow query show status/show processlist/show engine innodb status 其他,如mysqlreport,profiling 瓶颈定位 – vmstat/iostat 瓶颈定位 - Explain Explain 都能提供什么信息呢? 表的读取顺序 每个表都是如何读取的 可能用到哪些索引,实际使用了哪些索引 表是如何引用的 查询优化器从每个表中预计读取的记录数 其他额外信息,例如是否使用了内存表,是否引发排序等 瓶颈定位 - Explain 单表主键检索 2. 两个表主键左连接 3. 三个表主键左连接 瓶颈定位 – 续 将 LONG_QUERY_TIME 设为最小值;建议打补丁,这样单位可以设成微秒,并可查看详细执行计划 执行 SHOW [GLOBAL] STATUS/PROCESSLIST 查看当前运行状态

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档