我将table_open_cache变为1
set global table_open_cache=1; 
mysql> show global variables like 'table_open_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| table_open_cache | 1     | 
+------------------+-------+
结果显示也确实改为1了,但好像不管用,并没有因为打开了很多表而导致系统报错...还有一个问题,我在my.cnf中设置table_open_cache=1
但启动后其值还是为512,为什么在my.cnf更改这个值毫无效果呢?

解决方案 »

  1.   

    如何让set global table_open_cache=1; 立时生效
    --------------------------
    改完马上对新连接生效,直到重新启动为止
      

  2.   

    嗯,情况是这样的:
    自从把数据库分了区之后,就出现了无法打开数据表的情况。
    我增加了linux文件描述符上限,ulimit -n 100000
    又修改了mysql的open_files_limit参数,也使之达到100000,
    正常了许多天。可是今天还是出现了这样的情况:
    090831  9:53:40 [ERROR] /usr/local/mysql/libexec/mysqld: Can't open file: './xxx/yyy' (errno: 24)
    090831  9:55:40 [ERROR] Error in accept: Too many open files文件描述符依然够多了,正常情况下我们的系统不会存在那么多的连接,所以,我怀疑是table_open_cache这个值设置的太小了,所以我便把该参数的值设为1,用一个涉及到2个表的sql语句来测试!
    但是没问题,没出现Too many open files的情况!
      

  3.   


    数据表不是在sql语句查询完成后就关闭的吗?
      

  4.   

    重启当然解决问题啦
    但我想mysqj不至于这么“笨”吧,每次出问题都重起?假如系统是要7*24小时的,那怎么可能老重起呢?
    我估计是你里面的连接打开没关闭而引起的你结果下面2个分析下:show processlist;
    show open tables from db_name;
      

  5.   

    打开链接一定要close如果有异常的话 一定要走个finally