当前位置:  开发笔记 > 后端 > 正文

MySQL数据库优化最佳实践

如何解决《MySQL数据库优化最佳实践》经验,为你挑选了3个好方法。

在处理更大的表(> 50k记录,每个表总共大约100MB)时,优化MySQL安装以获得最佳性能的最佳实践是什么?我们目前正在考虑重写DelphiFeeds.com(Delphi编程社区的新闻站点)并注意到简单的Update语句可能需要50ms.这似乎很多.是否有任何我们应该启用/设置的配置设置通常在标准MySQL安装上禁用(例如,利用更多RAM来缓存查询和数据等)?

此外,存储引擎的选择对性能有何影响?我们计划使用InnoDB,但如果出于性能原因推荐使用MyISAM,我们可能会使用MyISAM.



1> Bill Karwin..:

"最佳实践"是:

    测量性能,尽可能隔离相关子系统.

    找出瓶颈的根本原因.你受I/O约束吗?CPU绑定?记忆力?等待锁?

    进行更改以减轻您发现的根本原因.

    再次测量,以证明您修复了瓶颈和多少.

    转到步骤2并根据需要重复,直到系统运行得足够快.

订阅http://www.mysqlperformanceblog.com上的RSS源并阅读其历史文章.对于与绩效相关的智慧而言,这是一个非常有用的资源.例如,您询问了InnoDB与MyISAM的关系.他们的结论是:InnoDB的性能平均比MyISAM高约30%.虽然还有一些使用场景,其中MyISAM优于InnoDB.

InnoDB vs. MyISAM vs. Falcon基准 - 第1部分

该博客的作者也是@Andrew Barnett提到的"高性能MySQL"的合着者.


来自@ʞɔıu的评论:如何判断你是否受I/O限制而不是CPU绑定与内存绑定是平台相关的.操作系统可能提供ps,iostat,vmstat或top等工具.或者,如果您的操作系统没有提供第三方工具,您可能需要获得第三方工具.

基本上,无论哪种资源与100%利用率/饱和度挂钩,都可能成为您的瓶颈.如果您的CPU负载较低,但您的硬件的I/O负载达到最大值,那么您将受到I/O限制.

然而,这只是一个数据点.补救措施也可能取决于其他因素.例如,复杂的SQL查询可能正在执行文件排序,这会使I/O忙碌.你应该向它投掷更多/更快的硬件,还是应该重新设计查询以避免文件存储?

在StackOverflow帖子中总结了太多因素,并且关于该主题的许多书籍都支持这一点.保持数据库有效运作并充分利用资源是一项全职工作,需要专业技能和不断学习.


杰夫阿特伍德刚写了一篇关于在系统中找到瓶颈的好文章:

计算机性能外壳游戏



2> Andrew Barne..:

从O'Reilly购买"高性能MySQL".这个主题差不多有700页,所以我怀疑你会在SO上找到一个简洁的答案.



3> staticsan..:

很难广泛宣传,但可以采用适度的高级视图.

您需要评估读取:写入比率.对于比率低于约5:1的表,您可能会受益于InnoDB,因为插入不会阻止选择.但是,如果您不使用事务,则应更改innodb_flush_log_at_trx_commit为1以通过MyISAM获得性能.

查看内存参数.MySQL的默认值非常保守,即使普通硬件也可以将一些内存限制提高10倍或更多.这将有利于SELECT而不是INSERT.

MySQL可以记录诸如不使用索引的查询之类的内容,以及仅花费太长时间(用户可定义)的查询.

查询缓存可能很有用,但您需要对其进行检测(即查看它的使用量).仙人掌可以做到这一点; 就像穆宁一样.

应用程序设计也很重要:

轻微缓存频繁获取但小的数据集将有很大的不同(即几秒钟的缓存寿命).

不要重新获取您已经拥有的数据.

多步存储可以帮助将大量插入到表中,这些表也可以快速读取.基本思想是你可以有一个临时插入表(INSERT DELAYED也可以是有用的),但是有一个批处理过程可以将MySQL中的更新从那里移到所有读取的地方.这有变化.

不要忘记,视角和背景也是重要的:UPDATE如果"长"更新每天只发生一次,那么您可能认为发生的很长时间实际上可能非常微不足道.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有