MySQL中table_cache如何优化

网友投稿 384 2023-11-28

MySQL中table_cache如何优化

这篇文章主要介绍了MySQL中table_cache如何优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

MySQL中table_cache如何优化

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 设置的偏小,经常需要将缓存的表清出,将新的表放入缓存,这时可以考虑增加这个参数的大小来改善访问的效率

感谢你能够认真阅读完这篇文章,希望小编分享的“MySQL中table_cache如何优化”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎么用status信息对MySQL服务器进行优化
下一篇:Linux上怎么优化MySQL
相关文章

 发表评论

暂时没有评论,来抢沙发吧~