究竟该如何设置这个值 table_cache=?

lilinew 2010-03-19 03:28:33
发现当前一个配置问题 (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=??

...全文
1315 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmtcolin 2011-11-24
  • 打赏
  • 举报
回复
为什么我是0?

mysql> SHOW STATUS LIKE 'key_read%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Key_read_requests | 0 |
| Key_reads | 0 |
+-------------------+-------+
2 rows in set (0.00 sec)
ACMAIN_CHM 2010-03-19
  • 打赏
  • 举报
回复
Opened_tables 只不过是已经打开过的表统计。 是否正常要看你的数据库中具体情况,如果一切都按照某个比例设置,那也没必要把这个参数让你进行设置了,直接MYSQL自动算出来就行了。
lilinew 2010-03-19
  • 打赏
  • 举报
回复
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 健康状况非常好
lilinew 2010-03-19
  • 打赏
  • 举报
回复
参数优化基于一个前提,就是在我们的数据库中通常都使用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的值应该用处不大。

目前从找的材料看 没有必要修改

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧