发现当前一个配置问题  (mysql +linux 在线系统)show global status like 'open%tables%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables   | 966   |
| Opened_tables | 2919  |
+---------------+-------+
2 rows in set根据这些天潜心研究  (下面是有关知识)
 table_cache指示表高速缓存的大小。当Mysql访问一个表时,如果在Mysql表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区,这样做的好处是可以更快速地访问表中的内容。一般来说,可以通过查看数据库运行峰值时间的状态值Open_tables和Opened_tables,用以判断是否需要增加table_cache的值
show global status like 'open%tables%';查看打开表的情况
Open_tables表示打开表的数量,Opened_tables表示打开过的表数量,如果Opened_tables数量过大,说明配置中table_cache(5.1.3之后这个值叫做table_open_cache)值可能太小。
比较适合的值:
Open_tables / Opened_tables * 100% >= 85%
  Open_tables / table_cache * 100% <= 95%当前我设置这个在线db的 table_cache=1024 
由此引发一个问题 
966/2919 仅仅为33%  这个是明显有问题的。   (这个系统是主机 有从机器从他那里取数据)请问我究竟该如何设置这个值 table_cache=??

解决方案 »

  1.   

    参数优化基于一个前提,就是在我们的数据库中通常都使用InnoDB表,而不使用MyISAM表。在优化MySQL时,有两个配置参数是最重要的,即table_cache和key_buffer_size。
    table_cache
    table_cache指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现 open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失table_cache – 64
    open_tables – 64
    opened-tables – 431
    uptime – 1662790 (measured in seconds)
    虽然open_tables已经等于table_cache,但是相对于服务器运行时间来说,opened_tables的值也非常低。因此,增加table_cache的值应该用处不大。目前从找的材料看 没有必要修改
      

  2.   

    mysql> SHOW STATUS LIKE 'key_read%';
    +-------------------+------------+
    | Variable_name     | Value      |
    +-------------------+------------+
    | Key_read_requests | 1430416782 |
    | Key_reads         | 269031     |
    +-------------------+------------+
    2 rows in set
    [3:42:39 PM] bruce: 总的内存需求公式是:global buffer + connections* buffer per connection.global buffer包括:key_buffer_size & innodb_buffer_size
    buffer per connection:一般按照4M计算(最差情况),包括:read_buffer, sort_buffer, thread stack,等等。
    [3:47:04 PM] bruce: key_buffer_size只对MyISAM表起作用,key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般我们设为 16M,实际上稍微大一点的站点 这个数字是远远不够的,通过检查状态值Key_read_requests和 Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。 或者如果你装了phpmyadmin 可以通过服务器运行状态看到,笔者推荐用phpmyadmin管理mysql,以下的状态值都是本人通过phpmyadmin获得的实例分析:这个服务器已经运行了20天 key_buffer_size – 128M
                key_read_requests – 650759289
                key_reads - 79112
     比例接近1:8000 健康状况非常好 
      

  3.   

    Opened_tables  只不过是已经打开过的表统计。 是否正常要看你的数据库中具体情况,如果一切都按照某个比例设置,那也没必要把这个参数让你进行设置了,直接MYSQL自动算出来就行了。
      

  4.   

    为什么我是0?mysql> SHOW STATUS LIKE 'key_read%';
    +-------------------+-------+
    | Variable_name     | Value |
    +-------------------+-------+
    | Key_read_requests | 0     |
    | Key_reads         | 0     |
    +-------------------+-------+
    2 rows in set (0.00 sec)