MySQL服务器未充分利用;正在运行的线程数小于2
我运行的是MySql 5.6,我注意到,当我对服务器进行基准测试时(在一段时间内并行执行几百个查询),m1.1大型aws实例的CPU利用率从未超过50% 我已经将thread\u cache变量设置为50,max\u connections设置为500。当我从shell执行以下命令时MySQL服务器未充分利用;正在运行的线程数小于2,mysql,database,database-performance,sqlperformance,Mysql,Database,Database Performance,Sqlperformance,我运行的是MySql 5.6,我注意到,当我对服务器进行基准测试时(在一段时间内并行执行几百个查询),m1.1大型aws实例的CPU利用率从未超过50% 我已经将thread\u cache变量设置为50,max\u connections设置为500。当我从shell执行以下命令时 mysqladmin-u root-ppassword-r-i1 ext | grep Threads_已创建 我注意到创建的线程从不跨越3 mysqladmin-u root-ppassword-r-i1 ext
查询:从text=?日期>=?和日期有多少核?当您看到50%时,有多少连接正在积极地进行操作?我猜您有两个核心,一个连接处于活动状态。由于MySQL在每个连接中使用的核心不超过一个,所以这是50% 您提到的“线程”值是可以的。细节 “线程缓存”是一个令人困惑的概念。事情是这样的:当一个新的客户端尝试连接时,mysqld(服务器)会查看它的“线程缓存”中是否有线程。如果没有,它将为该连接创建一个新的操作系统“进程”。这是一项相当耗时的任务,因此需要缓存 当连接断开(并且没有“连接池”)时,进程被放入线程缓存。但是线程缓存的上限是
线程缓存大小
。对于Windows,此变量的值应为0,对于unix,该值通常为10。但价值并不重要
max_connections
控制可以同时连接多少个客户端。通常他们忙于做其他事情,所以showProcessList
说“睡眠”wait_timeout
将强制断开睡眠时间超过该设置的人的连接(如果他们尚未自愿断开连接)
创建的STATUS
值Threads\u
表示自MySQL启动以来发生了多少新连接Threads\u running
表示当前连接的线程数,但不表示“Sleep”。(-1似乎是“错误的”。Threads\u cached
=0可能意味着,例如,有3个客户端已连接,但它们仍在连接,而且连接的客户端从未超过3个
由于您有一个“连接池”,连接将永远不会消失
你没有达到50岁,因为你没有足够的客户需要50岁
连接池和线程缓存用于相同的缓存目的,但方式不同。这是我第一次发帖,我想知道我哪里出错了,这样我就可以纠正自己,而不是只投反对票。如果你是基准测试,你是如何运行并行mysql线程或查询的?您是否禁用了查询缓存?最大螺纹是上盖,不需要始终运行。我使用的是JMeter。。。现在我有了一个自定义程序,可以生成“n”个指定线程。运行“k”的每个线程都指定了查询数。。我没有禁用查询缓存!我应该吗?谢谢你的解释,瑞克!我有一台2核机器(4台VCPU、AWS、Xen虚拟化)。我将前端服务器从Undertow更改为Jetty,并使用c3p0进行连接池。我现在可以看到更多的线程在运行。当连接的客户端断开连接时也是如此。。缓存的线程将上升!然而,mysql进程的CPU利用率仍然没有超过60%。I/O和其他问题通常是瓶颈。当一个表的索引不好时,MySQL有时会消耗大量CPU。