本次场景是MySQL问题,有人问我监控显示,表缓存使用率99%,当前为100.0%。这是为什么?
这个需要执行下面的命令来检查。可以看到参数table_open_cache定义了缓存4000个,实际达到的Open_tables是4000.这两个一个是variable,另外一个是状态status
一般来说,连接数据库以后use database以后会打开表(结构)缓存,Opened_tables(当前会话)新会话是0.use某个database以后,这个值会增加,目前是从0变到212
有了这个认识以后,那么假设连接会话对相应的database进行use的话,那么缓存的表就是连接数乘以表的数量。只要关注连接数多的user以及他对应的database就行。
最多的连接用户分别是15和20,对应的表的数量分别是89和136.所以两个加起来基本是就是4000左右的样子。
其实数据库的连接数不是越多越好,很多都是闲置的浪费。其实数据库的连接数适当就好。(SQL质量低下,依靠连接数多是不能彻底解决的)。当然这里可以调整参数比如4000改到40000,让他多缓存一点。
案例主要还是说明他的原理。也告诉我们如果连接数很多,那么表的数量就不能多。通常MySQL的一个database下我个人建议不要超过50个表。
如果有人说我业务复杂要上千个表呢?那么你的场景不适合MySQL。