gpt4 book ai didi

MySQL 服务器未充分利用; threads_running 小于 2

转载 作者:搜寻专家 更新时间:2023-10-30 20:26:52 25 4
gpt4 key购买 nike

我正在运行 MySql 5.6,当我对服务器进行基准测试(在一段时间内并行执行数百个查询)时,我注意到 m1.large aws 实例的 CPU 使用率从未超过 50%。

我已将 thread_cache 变量设置为 50,将 max_connections 设置为 500。当我从 shell 执行以下命令时,

  1. mysqladmin -u root -ppassword -r -i 1 ext | grep Threads_created

    我注意到创建的线程永远不会超过 3

  2. mysqladmin -u root -ppassword -r -i 1 ext | grep Threads_running

    我注意到 Threads running 永远不会超过 3,有时会变成 -1。

  3. 显示状态; (从 MySql 控制台运行)

    我注意到 Threads_Cached 为 0,尽管 thread_cache_size 为 50。

我正在运行一个前端服务器来连接以将请求转发到 mysql。我正在使用大小为 50 的连接池。不应该在这里将 threads_created 更改为 50 吗?我的理解对吗?

更新:

我将前端服务器从 undertow 更新为 Jetty。我现在使用 c3p0 来做连接池。我已配置为打开 50 个连接,现在我可以注意到 threads_running 和 threads_running 上升到 50。

但是,我的 mysql 进程的 CPU 使用率仍然没有超过 60%。

机器详细信息:AWS m1.large 实例,2 个内核(4 个 vCPU),7.5GB RAMMySQL版本:5.6引擎:MyISAM行数:8500 万查询类型:只读查询:SELECT a,b,c FROM table WHERE text = ?和日期>=? AND 日期 <= ?;我在文本、日期字段上有一个复合索引,当我对此查询运行 EXPLAIN 时,我能够看到正在使用该索引。

谢谢,V

最佳答案

多少个核心?当您看到 50% 时,有多少连接正在积极做事?我猜你有 2 个核心,并且有一个连接处于事件状态。由于 MySQL 每个连接使用的核心不超过一个,因此为 50%。

您提到的“Thread”值是可以的。详情...

“Thread_cache”是一个容易混淆的概念。事情是这样的:当一个新的客户端尝试连接时,mysqld(服务器)在它的“线程缓存”中查找是否有线程缓存。如果不是,它将为该连接创建一个新的操作系统“进程”。这是一项中等耗时的任务,因此需要缓存。

当连接断开时(并且没有“连接池”),进程被放入线程缓存中。但线程缓存的上限为 thread_cache_size。此 VARIABLE 的值对于 Windows 应为 0,对于 unix 通常为 10。但值(value)并不重要。

max_connections 控制可以同时连接的客户端数量。通常他们正忙于做其他事情,所以 SHOW PROCESSLIST 说“Sleep”。 wait_timeout 将强制断开 sleep 时间超过该设置的用户(如果他们尚未自愿断开连接)。

STATUSThreads_created 表示自 MySQL 启动以来发生了多少新连接。 Threads_running 表示当前连接了多少线程,但不是“ sleep ”。 (-1 似乎是“错误的”。)Threads_cached = 0 可能意味着,例如,3 个客户端已连接并且它们仍然连接,而且您从未连接过超过 3 个。

因为你有一个“连接池”,连接将永远不会消失。

您没有达到 50,因为您没有足够的客户需要 50。

连接池和 Thread_cache 服务于相同的缓存目的,但方式不同。两者兼有是可以的,但两者都不会让你获益太多。

关于MySQL 服务器未充分利用; threads_running 小于 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29587322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com