我遇到了一些问题,比如在processlist. 在我的应用程序中,我使用了一次发送 50 个计数的并行处理,这将执行一些 MySQL 数据库操作(选择和插入),但几分钟后什么也没发生。然后我在数据库中看到 SHOWPROCESSLIST;大部分查询处于 SENDING DATA 状态,有 1001 个线程。我的最大查询大小是 1000。我将大小从 50 减小到 10,但没有运气。谁能建议我如何解决这个问题。
这很简单,即您的服务器没有足够的容量(通常是磁盘 I/O,但有时是内存或 CPU)来处理工作负载。写得不好的查询和索引不足或次优是一个常见的原因,因为过早放弃并重新发送已经运行的相同查询的应用程序以及innodb_buffer_pool_sizeInnoDB大小不正确的应用程序也是如此。
Sending Data是一个非常糟糕的线程状态名称。这并不意味着服务器一定要“发送”任何东西。实际上,服务器可能仍在进行表扫描,并且可能没有任何东西可以发送到任何地方,并且线程仍将处于此状态。状态更合适的名称可能是“准备要发送的数据”。
相比之下,当服务器实际上正在向客户端发送数据时,状态是,Writing to net并且在进程列表中实际上很少看到状态,除非结果集特别大或客户端从网络接受数据特别慢。
发送数据
该线程正在读取和处理 SELECT 语句的行,并将数据发送到客户端。由于在此状态期间发生的操作往往会执行大量磁盘访问(读取),因此它通常是给定查询生命周期中运行时间最长的状态。
写到网络
服务器正在向网络写入数据包。
— http://dev.mysql.com/doc/refman/5.6/en/general-thread-states.html
| 归档时间: |
|
| 查看次数: |
13575 次 |
| 最近记录: |