mysql table_cache设置_MySQL table_cache优化

http://www.7dtest.com/site/thread-5951-1-1.html

table_cache 参数设置表高速缓存的数目。每个连接进来,都会至少打开一个表缓存。因此, table_cache 的大小应与 max_connections 的设置有关。例如,对于 200 个并行运行的连接,应该让表的缓存至少有 200 × N ,这里 N 是应用可以执行的查询的一个联接中表的最大数量。此外,还需要为临时表和文件保留一些额外的文件描述符。

当 Mysql 访问一个表时,如果该表在缓存中已经被打开,则可以直接访问缓存;如果还没有被缓存,但是在 Mysql 表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区;如果表缓存满了,则会按照一定的规则将当前未用的表释放,或者临时扩大表缓存来存放,使用表缓存的好处是可以更快速地访问表中的内容。

执行 flush tables 会清空缓存的内容。一般来说,可以通过查看运行峰值时间的状态值 Open_tables 和 Opened_tables ,判断是否需要增加 table_cache 的值。其中 open_tables 是当前打开的表的数量, Opened_tables 则是已经打开的表的数量。下面我们的例子显示了这两个状态值的变化情况:

首先,清空表缓存:

> flush tables;

Query OK, 0 rows affected (0.00 sec)

察看当前的表缓存情况:

mysql> show global status like open%_tables;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| Open_tables | 0 |

| Opened_tables | 543 |

+---------------+-------+

2 rows in set (0.00 sec)

在当前连接访问一个表:

mysql> select count(*) from t1;

+----------+

| count(*) |

+----------+

| 4 |

+----------+

1 row in set (0.03 sec)

mysql> show global status like open%_tables;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| Open_tables | 1 |

| Opened_tables | 544 |

+---------------+-------+

2 rows in set (0.00 sec)

Open_tables和opened_tables都增加1。

再访问一个其他表,可以看到两个参数都增加。

mysql> select count(*) from t2;

+----------+

| count(*) |

+----------+

| 1 |

+----------+

1 row in set (0.06 sec)

mysql> show global status like open%_tables;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| Open_tables | 2 |

| Opened_tables | 545 |

+---------------+-------+

2 rows in set (0.00 sec)

再访问表t1的时候:

mysql> select * from t1;

+------+

| id |

+------+

| 2 |

| 1 |

| 1 |

| 3 |

+------+

4 rows in set (0.02 sec)

mysql> show global status like open%_tables;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| Open_tables | 2 |

| Opened_tables | 545 |

+---------------+-------+

2 rows in set (0.00 sec)

两个参数都没有变化,因为该表已经在表缓存中打开了,没有重复打开。

如果发现 open_tables 接近 table_cache 的时候,并且 Opened_tables 这个值在逐步增加,那就说明可能 table_cache 设置的偏小,经常需要将缓存的表清出,将新的表放入缓存,这时可以考虑增加这个参数的大小来改善访问的效率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值