转:MySQL性能优化配置参数之thread_cache和table_cache详解

  

  <强> http://www.jb51.net/article/51828.htm
  一,THREAD_CACHE   

  

  MySQL里面为了提高客户端请求创建连接过程的性能,提供了一个连接池也就是Thread_Cache池,将空闲的连接线程放在连接池中,而不是立即销毁。这样的好处就是,当又有一个新的请求的时候,mysql不会立即去创建连接线程,而是先去Thread_Cache中去查找空闲的连接线程,如果存在则直接使用,不存在才创建新的连接线程。   

  

  有关Thread_Cache在MySQL有几个重要的参数,简单介绍如下:   

  

  <强> thread_cache_size   

  

  Thread_Cache中存放的最大连接线程数。在短连接的应用中Thread_Cache的功效非常明显,因为在应用中数据库的连接和创建是非常频繁的,如果不使用Thread_Cache那么消耗的资源是非常可观的!在长连接中虽然带来的改善没有短连接的那么明显,但是好处是显而易见的。但并不是越大越好大了反而浪费资源这个的确定一般认为和物理内存有一定关系,如下:   

     代码如下:         
  1 g→8
  2 g→16
  3 g→32
  在3 g→64年
     
     

  
  

  

  <强> thread_stack   

  

  每个连接被创建的时候,mysql分配给它的内存。这个值一般认为默认就可以应用于大部分场景了,除非必要非则不要动它。   

  

  <强> thread_handing   

  

  运用Thread_Cache处理连接的方式,5.1.19添加的新特性。有两个值可选(没有线程|每个连接一个线程)看字面意思大家也该猜出八九分了,呵呵,没有线程服务器使用一个线程,每个连接一个线程的服务器为每个客户端请求使用一个线程。原手册中提到,没有线程是在Linux下调试用的。   

     代码如下:         
  mysql>显示变量如线程%的;
  + - - - - - - - - - - - - - - - - - - - +
  | Variable_name ,,,| Value ,,,,,,,,,,,,,,,,,,,|
  + - - - - - - - - - - - - - - - - - - - +
  | thread_cache_size | 32个,,,,,,,,,,,,,,,,,,,,,,,|
  | thread_handling ,|每个连接一个线程|
  | thread_stack ,,,,| 196608,,,,,,,,,,,,,,,,,,,|
  + - - - - - - - - - - - - - - - - - - - +
  3行集(0.01秒)   

  
  

  

  mysql>显示状态像“% %连接”,
  + - - - - - - - - - - + - - - +
  | Variable_name ,,,,,,| Value |
  + - - - - - - - - - - + - - - +
  | Connections ,,,,,,,,| 199156 |
  | Max_used_connections | 31日,,,,|
  + - - - - - - - - - - + - - - +
  2行集(0.00秒)   

  

  mysql>显示状态像“%线程%”;
  + - - - - - - - - - - + - - - +
  | Variable_name ,,,,,,,,| Value |
  + - - - - - - - - - - + - - - +
  | Delayed_insert_threads | 0,,,,,|
  | Slow_launch_threads ,,| 0,,,,,|
  | Threads_cached ,,,,,,,| 3,,,,,|
  | Threads_connected ,,,,| 6,,,,,|
  | Threads_created ,,,,,,| 8689年,,|
  | Threads_running ,,,,,,| 5,,,,,|
  + - - - - - - - - - - + - - - +
  6行集(0.00秒)   

     
     

  
  

  

  服务器总共有199156次连接,最大并发连接数为31日当前在thread_cashe池中的连接数为3个,连接数为6个,处于活跃状态的有5个,共创建了8689次连接。显然这里以短连接为主。可以算出thread_cache命中率,公式为:   

  

  
  

     代码如下:         
  Thread_Cache_Hit=(Connections-Thread_created)/连接* 100%
     

  
  

  

  当前服务器的Thread_cache命中率约为95.6%,这个结果我还是比较满意的。但是可以看出thread_cache_size有点多余改成16或8更合理一些。   

  

  <强>二,TABLE_CACHE (5.1.3及以后版本又名TABLE_OPEN_CACHE)   

  

  由于MySQL是多线程的机制,为了提高性能,每个线程都是独自打开自己需要的表的文件描述符,而不是通过共享已经打开的。针对不同存储引擎处理的方法当然也不一样。   

  

  在myisam表引擎中,数据文件的描述符(描述符)是不共享的,但是索引文件的描述符却是所有线程共享的。Innodb中和使用表空间类型有关,假如是共享表空间那么实际就一个数据文件,当然占用的数据文件描述符就会比独立表空间少。   

转:MySQL性能优化配置参数之thread_cache和table_cache详解