【问题标题】:When I use the MOT feature of the openGauss database,how can I manually release the numa_node node?使用openGauss数据库的MOT特性时,如何手动释放numa_node节点?
【发布时间】:2022-07-19 17:15:46
【问题描述】:

我在使用openGauss数据库的MOT特性时,numa_node节点满了,很长时间没有释放。我怎样才能手动释放它?有什么快速的方法吗?

【问题讨论】:

    标签: open-gauss


    【解决方案1】:

    这个问题很有趣,虽然答案很简短,但需要解释一下。

    简答:

    1. 手动关闭/终止会话可能会释放 MOT 本地内存,以防有大量事务或大量插入或更新(尽管通常会话的内存非常小)。大部分 MOT 内存(即 MOT 全局内存)不会受到影响。
    2. Vacuum command 可以帮忙:VACUUM FULL [MOT_table1]; 仅当 MOT 表大小显着减小(可能是周期性地)并且预计在不久的将来不会增长到原来的大小时,这才有用。
    3. 服务器重启

    说明: openGauss MOT具有高度优化的内存管理,欢迎阅读这里关于它的NUMA awareness allocation and affinity和关于MOT Memory Planning的信息。

    首先,为了方便快速操作和高效利用NUMA节点,MOT为每个表的行和每个索引的节点分配一个指定的内存池。每个这样的池由 2 MB 卡盘组成。指定的 API 从本地 NUMA 节点、来自所有节点的页面或以循环方式分配这些块,其中每个块都分配在下一个节点上。默认情况下,共享数据池以循环方式分配以平衡访问,而不是在不同的 NUMA 节点之间拆分行。但是,线程专用内存是从本地节点分配的。还必须验证一个线程始终在同一个 NUMA 节点中运行。

    其次,MOT 设计期望数据增长,因此一旦将内存块添加到内存池并使用(插入数据),那么在删除行时,内部内存部分将标记为空闲并准备好重新使用,并且不会释放回操作系统。

    手动激活的 VACUUM 命令可以优化内存块内和内存块之间的行分布,将它们移动到密集的内存块中,并将剩余的内存块释放给操作系统。

    【讨论】:

      猜你喜欢
      • 2022-07-19
      • 2022-07-19
      • 2022-07-19
      • 2019-09-28
      • 1970-01-01
      • 2023-03-29
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多