查看当前最大数据库连接数

  1. show global variables like "max_connections";
  2. +-----------------+-------+
  3. | Variable_name | Value |
  4. +-----------------+-------+
  5. | max_connections | 64725 |
  6. +-----------------+-------+

查看当前已用最大连接数

show global status like 'Max_used_connections';

+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 92    |
+----------------------+-------+

查看线程状态信息

show global status like "%Threads%";

+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Delayed_insert_threads     | 0     |
| Slow_launch_threads        | 0     |
| Threads_cached             | 0     |
| Threads_connected          | 62    |
| Threads_created            | 80928 |
| Threads_running            | 4     |
| thread_pool_active_threads | 76    |
| thread_pool_big_threads    | 0     |
| thread_pool_dml_threads    | 0     |
| thread_pool_idle_threads   | 5     |
| thread_pool_qry_threads    | 0     |
| thread_pool_total_threads  | 81    |
| thread_pool_trx_threads    | 3     |
| thread_pool_wait_threads   | 72    |
+----------------------------+-------+

总连接数

客户购买的DB连接数是这个。max_connections,允许同时连接DB的客户端的最大线程数。如果客户端的连接数超过了max_connections,应用就会收到“too many connections”的错误。

已经创建的连接数

Threads_created是为处理连接而创建的线程数。再明确一点来说是连接到DB的,客户端的线程数。它包含Threads_running。 如果Threads_created很大,可能需要调整thread_cache_size。
线程cache命中率=Threads_created/Connections,cache命中率当然越大越好,如果命中率较低,可以考虑增加thread_cache_size。

已经连接的连接数

Thread_connected当前打开的连接数。

活跃连接数

Threads_running官方的说法是“没有sleep的线程数”。顾名思义是:在DB端正在执行的客户端线程总数。Server端保持这些连接同时客户端等待回复。有些线程可能消耗CPU或者IO,有些线程可能啥也没做单纯等表锁或行锁释放。当DB执行完这个线程,客户端收到回复,线程的状态就会从”running” 变成 “connected”.

如果发现活跃链接数突然增高,通常是以下原因:

  • 应用缓存失效
  • 突发流量