MySQL性能优化配置参数之thread_cache和table_cache详解
一、THREAD_CACHE
MySQL里面为了提高客户端请求创建连接过程的性能,提供了一个连接池也就是Thread_Cache池,将空闲的连接线程放在连接池中,而不是立即销毁.这样的好处就是,当又有一个新的请求的时候,mysql不会立即去创建连接线程,而是先去Thread_Cache中去查找空闲的连接线程,如果存在则直接使用,不存在才创建新的连接线程.
有关Thread_Cache在MySQL有几个重要的参数,简单介绍如下:
thread_cache_size
Thread_Cache中存放的最大连接线程数.在短连接的应用中Thread_Cache的功效非常明显,因为在应用中数据库的连接和创建是非常频繁的,如果不使用Thread_Cache那么消耗的资源是非常可观的!在长连接中虽然带来的改善没有短连接的那么明显,但是好处是显而易见的.但并不是越大越好大了反而浪费资源这个的确定一般认为和物理内存有一定关系,如下:
1G—>8 2G—>16 3G—>32 >3G—>64
如果短连接多的话可以适当加大.
thread_stack
每个连接被创建的时候,mysql分配给它的内存.这个值一般认为默认就可以应用于大部分场景了,除非必要非则不要动它.
thread_handing
运用Thread_Cache处理连接的方式,5.1.19添加的新特性.有两个值可选[no-threads|one-thread-per-connection]看字面意思大家也该猜出八九分了,呵呵,no-threads服务器使用一个线程,one-thread-per-connection服务器为每个客户端请求使用一个线程.原手册中提到,no-threads是在Linux下调试用的.
mysql>showvariableslike'thread%'; +——————-+—————————+ |Variable_name |Value | +——————-+—————————+ |thread_cache_size|32 | |thread_handling |one-thread-per-connection| |thread_stack |196608 | +——————-+—————————+ 3rowsinset(0.01sec)
mysql>showstatuslike'%connections%'; +———————-+——–+ |Variable_name |Value | +———————-+——–+ |Connections |199156| |Max_used_connections|31 | +———————-+——–+ 2rowsinset(0.00sec)
mysql>showstatuslike'%thread%'; +————————+——–+ |Variable_name |Value | +————————+——–+ |Delayed_insert_threads|0 | |Slow_launch_threads |0 | |Threads_cached |3 | |Threads_connected |6 | |Threads_created |8689 | |Threads_running |5 | +————————+——–+ 6rowsinset(0.00sec)