【问题标题】:How to efficiently handle MySQL connections with PHP如何使用 PHP 有效地处理 MySQL 连接
【发布时间】:2020-07-12 15:34:41
【问题描述】:

我正在运行一个使用本机 Mysql PDO 与 mysql 数据库交互的应用程序,我没有使用 laravel 或任何框架。 所以大部分 API 逻辑是从数据库中获取和/或插入。

在生产中运行时,我可以看到 mysql 任务的内存使用率很高,请检查以下内容:

我有几个问题。

  1. 如此高的内存使用量正常吗?在多线程生产级应用程序中管理适当的 PHP-Mysql 连接的最佳做法是什么?
  2. 在运行密集查询(获取历史数据以绘制图表)时,CPU 使用率会跃升至 100%,直到查询执行完成,它会返回到 2-3%。但在此期间系统完全暂停。

我正在考虑基于硬件的解决方案,例如将数据库服务器与应用服务器分开(目前它们都在同一个节点上运行)以及管理集群和使用只读节点。

但我想知道是否还有其他选择,以及处理 PHP-MySQL 连接的最有效方法是什么。

【问题讨论】:

  • 1cpu 和 1gb 的内存,没有交换,当然,它会挂起。对我来说看起来很正常,mysql本质上使用大量的ram,这就是为什么web、db、缓存服务通常是分开的,而不是放在一个micro vps上

标签: php mysql multithreading performance cpu-usage


【解决方案1】:

你也可以检查写的查询是否有充分优化,不使用时关闭连接。

您还可以通过将一些工作平衡到 php 来减少 mysql 服务器上的负载。

还要查看 my.cnf 中的 query_cache_size、innodb_io_capacity、innodb_buffer_pool_size 和 max_connection 设置。

有时升级 php 并在你的 apache 上做一些缓存可以帮助减少 ram 的使用。

https://phoenixnap.com/kb/improve-mysql-performance-tuning-optimization

【讨论】:

    【解决方案2】:

    通常,innodb_buffer_pool_size 设置为大约 70% 的可用 RAM,MySQL 将消耗它以及它需要的其他空间。从头开始;你只有 1GB 的内存? buffer_pool 需要较小的百分比。看来现在的值还不错。

    top 显示 MySQL 仅使用了 37.2% 的 RAM —— 许多线程共享相同的内存。

    按内存排序(在top 中,使用<>)。其他东西正在消耗大量 RAM。

    query_cache_size 应该为零。

    max_connections 应该是 10 或 20。

    CPU -- 你只有一个核心?因此,预计会出现占用 CPU 的大查询。它还说 I/O 不是问题。您可以向我们展示查询,加上SHOW CREATE TABLEEXPLAIN SELECT...;也许我们可以建议如何加快速度。

    【讨论】:

      猜你喜欢
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多