数据库元数据会持久占用内存,如果表很多,可以通过参数限制其占用的大小。
这里的元数据,不是数据库的表,列这些元数据表,而是指智能索引等常驻内存的数据,(metadata), 相对于数据(sys_tablespace)。 一张表一旦被使用,其部分元数据就将常驻内存的heap_temp_buffer堆。如果系统的保存周期长,表数据量大,其占用的内存将越来越大,简单评估占用数据的0.1-0.5%。
目录导航
参考
GBase 8a调整内存参数降低内存使用解决内存占用高的现象
涉及到的参数:
1 限制表实例数量
参数名:_gbase_express_table_limit
数值范围:最小值 16,最大值 10241024,默认值 16*1024
说明:当引擎层打开表数量达到参数设定的值时,不会立即触发清理动 作。而是由后台线程每 5 秒检测一次,如果达到上限才会触发清理动作。
2 限制表实例元数据总大小
参数名:_gbase_express_table_metadata_limit
数值范围:gnode 下默认值为 temp 堆大小一半,gcluster 下默认值为 1GB,最小值最大值不限,配置文件中可使用 K/M/G
方式设置 说明:当引擎层打开表实例的元数据大小之和达到参数设定的值时,不会 立即触发清理动作。而是由后台线程每 5 秒检测一次,如果达到上限才会触发 清理动作。
3 超出限制后对 m_tables 清理比例
参数名:_gbase_express_table_clear_rate
数值范围:最大值 100(表示 100%),最小值 1(表示 1%),默认值 10(表 示 10%)
说明: 1) 表数量淘汰机制:当触发清理动作时每次清理多少比例的表对象实 例。此比例是当前内存中表实例总数的比例。 2) 元数据大小淘汰机制:每次清理多少比例的元数据大小。此比例是当前内存中所有表实例的元数据大小之和的比例。
查看当前情况
有两个状态信息可以查询:
express_cached_tables 表示当前内存中有多少个表实例。 express_cached_metadata 表示当前内存中所有表实例的元数据大小。
备注:
该参数对gnode有效。为了避免使用者无解,建议gcluster和gnode都修改。