MySQL应用程序性能问题

时间:2017-01-25 10:40:35

标签: php mysql optimization

我们希望通过基于MySQL和PHP的应用程序获得更好的性能。

目前的情况是一个电子学习系统,它根据一周中的某天和/或一天中的小时接收一些“突发”的查询。 (例如,数百名学生同时从不同的学校开始训练)

正如您可能猜到的,这些系统一直需要实时计算。

我们一般只有很少的慢查询,当我们在日志中出现时,我们会尝试改进它们。

硬件是自托管的,它目前是VPS而不是我们的硬件,但我们将硬件升级作为解决方案的一部分。

我们有一个特定的读/写密集表。我们认为它涉及对该表的磁盘访问。 (研究日志)

我们正试图找出可以提高性能的硬件和/或软件设置,尤其是在需要该日志表时。

我们正在考虑的一个解决方案是使用复制来平衡“写”和“读”查询。 (proxySQL +复制) 如果主人不可用,我们对这种设置的恐惧就会发生......

我们目前正在开发的一种软件可能性是创建一个“摘要”表,每天只计算一次。这应该至少在应用程序的两个屏幕上释放一些压力。在这种情况下,瓶颈似乎与创建临时表和连接表的数量有关。

我可以根据需要添加详细信息,请不要犹豫。

编辑:重新制定

有哪些可用的MySQL设置可以获得更好的性能?复制,集群,其他?

非常感谢你的时间。

1 个答案:

答案 0 :(得分:0)

由于您没有为您的问题提供任何代码,我只能回答您:

  1. memory_get_usage()计算内存使用量。 将其放在代码的最后一行

  2. sys_getloadavg()检查加载平均值。 将其放在代码的最后一行

  3. microtime()检查运行时间。 Accurate way to measure execution times of php scripts

  4. 通过以下方式检查您的查询费用:select * from sys.x$statement_analysis

  5. 仅按一次运行计算性能,并尝试使其更好。

  6. 查找散列的位置。例如,找到您使用crypt的位置。一些哈希方法可能会花费你太多。找到你真正不需要的地方,在那个地方你可以使用sha1md5这样的低成本散列。例如,如果您在公共文件夹中隐藏用户头像,则可以使用md5之类的内容来降低成本。 但是你永远不会去追求安全问题的表现。例如密码哈希永远不会用于表现。

  7. 您可以缓存一些可以缓存的地方。它可以真正帮助您获得整体性能。阅读PHP Cache Dynamic Pages To Speed Up Load Times。您也可以使用Apache How To Configure Content Caching Using Apache Modules On A VPS和nginx A Guide to Caching with NGINX and NGINX Plus缓存。

  8. 在您的查询中,不要使用不使用索引的内容(您不能一直这样做,但要尽可能地执行此操作)。例如,find_in_set对性能产生很大影响。特别是当您处理大型档案时。

  9. 如果您真的认为使Log可以影响您的性能,请将日志保存在另一台服务器中。您可以使用IP从当前服务器连接到另一台服务器上的MySQL。你也可以为此制作API。

  10. 始终考虑更好的架构。有时候,通过审核代码,您可以看到某些内容可以删除或替换为更好的主意。