共计 2007 个字符,预计需要花费 6 分钟才能阅读完成。
客户端发起连接到 MySQL server,mysql server 监听进程,监听到新的请求,然后 mysql 为其分配一个新的 thread,去处理此请求。从建立连接之开始,CPU 要给它划分一定的 thread stack,然后进行用户身份认证,建立上下文信息,最后请求完成,关闭连接,同时释放资源。在高并发的情况下,将给系统带来巨大的压力,不能保证性能。MySQL 服务器的线程数需要在一个合理的范围之内,这样才能保证 MySQL 服务器健康平稳地运行。
查看线程池的状态:
mysql> show variables like 'thread%';
+--------------------+---------------------------+
| Variable_name | Value |
+--------------------+---------------------------+
| thread_cache_size | 64 |
| thread_concurrency | 10 |
| thread_handling | one-thread-per-connection |
| thread_stack | 262144 |
+--------------------+---------------------------+
- thread_cache_size
Threads_cached 中存放的最大连接线程数。在短连接的应用中 Threads_cached 的功效非常明显,因为在应用中数据库的连接和创建是非常频繁的。如果不使用 Threads_cached 那么消耗的资源是非常可观的。在长连接中虽然带来的改善没有短连接的那么明显,但是好处是显而易见的。但并不是越大越好,大了反而浪费资源,这个的确定一般认为和物理内存有一定关系。Mysql 默认值为 9。
1G —> 8
2G —> 16
3G —> 32
>3G —> 64
设置方法:
mysql> set global thread_cache_size=64;
- thread_concurrency
thread_concurrency 应设为 CPU 核数的 2 倍,比如有一个双核的 CPU,,那么 thread_concurrency 的应该为 4。这个变量是针对 Solaris 系统的,如果设置这个变量的话,mysqld 就会调用 thr_setconcurrency()。这个函数使应用程序给同一时间运行的线程系统提供期望的线程数目。但是在 5.7 以后就已经抛弃了。
- thread_handling
运用 Thread_Cache 处理连接的方式,5.1.19 添加的新特性。有两个值可选 [no-threads|one-thread-per-connection]。
no-threads:服务器使用一个线程
one-thread-per-connection:服务器为每个客户端请求使用一个线程
-
thread_stack
每个连接被创建的时候,mysql 分配给它的内存。这个值一般认为默认就可以应用于大部分场景了,除非必要非则不要动它。上面表示是 256kb。
查看线程使用情况:
mysql> show global status like 'Thread%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 41 |
| Threads_connected | 53 |
| Threads_created | 541 |
| Threads_running | 4 |
+-------------------+-------+
- Threads_cached
MySQL 里面为了提高客户端请求创建连接过程的性能,提供了一个连接池也就是 Thread_cache 池(大小是 thread_cache_size), 将空闲的连接线程放在连接池中,而不是立即销毁。这样的好处就是, 当又有一个新的请求的时候,mysql 不会立即去创建连接 线程,而是先去 Thread_Cache 中去查找空闲的连接线程,如果存在则直接使用,不存在才创建新的连接线程。Thread_cache 值表示已经被线程缓存池缓存的线程个数。
- Threads_connected
当前处于连接状态的线程个数,等于 show processlist
- Threads_created
Threads_created 表示创建过的线程数,如果发现 Threads_created 值过大的话,表明 MySQL 服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中 thread_cache_size 值。
- Threads_running
处于激活状态的线程的个数,这个一般都是远小于 Threads_connected 的。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-01/140052.htm