如何查看Google CloudSQL实例内各数据库的内存使用情况?
如何查看Google CloudSQL实例内各数据库的内存使用情况?
我之前也被这个问题困扰过——CloudSQL默认的监控面板确实只给实例级的总资源使用,看不到单个数据库的细节。不过试过几个办法,亲测有用,分享给你:
直接用数据库内置查询获取内存相关数据
不同数据库引擎有专属的系统表可以查询,能拿到单库的内存/缓存占用情况:- 对于MySQL/MariaDB:可以通过
INFORMATION_SCHEMA.TABLES统计每个库的表和索引占用的逻辑内存(对应InnoDB缓冲池里的缓存部分),执行这条SQL:
要是想更精准看实时缓冲池使用,还可以查SELECT table_schema AS '数据库名称', SUM(data_length + index_length)/1024/1024 AS '总占用内存(MB)' FROM INFORMATION_SCHEMA.TABLES GROUP BY table_schema;performance_schema:
(注:16是InnoDB默认块大小,单位KB)SELECT object_schema, SUM(number_of_blocks)*16/1024 AS '缓冲池占用(MB)' FROM performance_schema.innodb_buffer_stats_by_table GROUP BY object_schema; - 对于PostgreSQL:结合
pg_buffercache和pg_database能直接拿到每个库在共享缓冲池里的内存占用:SELECT datname AS '数据库名称', COUNT(*) * current_setting('block_size')::bigint / 1024 / 1024 AS '缓冲池占用(MB)' FROM pg_buffercache JOIN pg_database ON pg_buffercache.relfilenode = pg_database.relfilenode GROUP BY datname;
- 对于MySQL/MariaDB:可以通过
启用CloudSQL的性能洞察(Performance Insights)
CloudSQL自带的Performance Insights支持按数据库维度拆分指标,虽然没有直接的“内存占用”数值,但能看到每个数据库的缓冲池命中率、表扫描次数、连接数这些和内存消耗强相关的指标,帮你间接判断哪个库是内存大户。
操作很简单:在CloudSQL控制台找到你的实例,切换到「性能」标签,启用Performance Insights(没开的话直接开启就行),然后在图表的筛选器里选择「Database」维度,就能看到每个库的相关性能数据了。自定义监控指标实现长期追踪
如果需要长期监控每个库的内存趋势,可以用Cloud Monitoring的自定义指标:- 写一个脚本定期执行上面的数据库查询;
- 用Cloud Scheduler定时触发这个脚本(可以部署在Cloud Function或者Cloud Run里);
- 把查询结果推送到Cloud Monitoring的自定义指标中;
- 最后在Cloud Monitoring里创建仪表盘,就能看到每个库内存使用的历史趋势了。
备注:内容来源于stack exchange,提问作者ayaz
相关产品推荐
相关产品推荐

