Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL服务器未充分利用;正在运行的线程数小于2_Mysql_Database_Database Performance_Sqlperformance - Fatal编程技术网

MySQL服务器未充分利用;正在运行的线程数小于2

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

我运行的是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 | grep Threads_running

    我注意到,运行的线程从不跨越3,有时会变成-1

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

    我注意到,尽管thread\u cache\u大小为50,但Threads\u Cached为0

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

    更新:

    我将前端服务器从undertow升级到Jetty。我现在使用c3p0进行连接池。我已经配置了50个打开的连接,现在我可以注意到正在运行的线程和正在运行的线程增加到50个

    然而,我的mysql进程的CPU利用率仍然没有超过60%

    机器详细信息:AWS m1.1大型实例,2核(4个VCPU),7.5GB RAM MySQL版本:5.6 引擎:MyISAM 行数:8500万 查询类型:只读
    查询:从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。