我需要一些帮助来理解一些事情。
我们使用 Google Cloud SQL MySQL8.0,今天发生了一起事故,工作原理是实例处于内存压力之下,处理查询的时间比预期的要长。
打开实例视图时,我们目前收到来自 Google 本身的状态通知,建议增加我们的值 table_open_cache
(目前默认值为 4000)。
现在我想增加价值,但我不确定在哪里设置它。谷歌建议在打开表的数量高于时增加它table_open_cache
。对我们来说,这两种价值观似乎总是4000
。
所以我的第一个问题:
SHOW OPEN TABLES
给SHOW GLOBAL STATUS LIKE 'Open_tables'
我不同的价值观。首先是大约 360,后者是 4000。我该如何解释这两个值之间的差异?
第二个问题:如果 open tables 可以高于tables_open_cache
为什么我们的实例看起来它们总是相同的?
编辑:第三个问题:有没有办法让我找出是谁导致开桌?
table_open_cache
控制表缓存中的条目数。因为它是一个“缓存”:太高 = 浪费 RAM(但不多),太低 = 某些查询的额外开销(但不多)。table_open_cache = 4000
对于大多数系统来说是合理的。你有多少内存?您的数据库中有多少张表?SHOW GLOBAL STATUS LIKE 'Table_open_cache%';
提供有关缓存有效性的信息。了解Uptime
也很有用。这些设置最适合判断这个缓存的健康状况。我所有的缓存都有这样的指标。SHOW OPEN TABLES WHERE In_use OR Name_locked;
可能比 . 更有趣SHOW OPEN TABLES;
。前者显示活动;后者显示的条目也可能会从缓存中弹出。information_schema
(如果您的版本查询失败,可能有一种方法可以从或获取信息performance_schema
。)