更新时间:2025-08-25 GMT+08:00

内存管理函数

内存管理函数仅25.5.0及以上集群版本支持。

fabricsql_total_memory_detail()

描述:用于查看所有后端actor节点的内存使用情况。

返回值类型:record

函数返回信息如下:

表1 fabricsql_total_memory_detail()输出结果的字段

名称

类型

描述

nodename

text

节点名称。

memorytype

text

内存的名称,包括以下几种:

  • max_process_memory:DataArtsFabric SQL集群实例所占用的内存大小。
  • process_used_memory:DataArtsFabric SQL进程所使用的内存大小。
  • max_dynamic_memory:最大动态内存。
  • dynamic_used_memory:已使用的动态内存。
  • dynamic_peak_memory:内存的动态峰值。
  • dynamic_used_shrctx:最大动态共享内存上下文。
  • dynamic_peak_shrctx:共享内存上下文的动态峰值。
  • max_shared_memory:最大共享内存。
  • shared_used_memory:已使用的共享内存。
  • max_cstore_memory:列存所允许使用的最大内存。
  • cstore_used_memory:列存已使用的内存大小。
  • other_used_memory:其他已使用的内存大小。
  • mmap_used_memory:mmap使用的内存大小。

memorymbytes

integer

内存使用的大小,单位MB。

shared_memory_context(actor_name cstring)

描述:查询指定actor进程中共享内存上下文的统计信息。

参数:actor_name,表示actor名称。

返回值类型:record

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
select * from shared_memory_context('coordinator1') order by totalsize desc limit 10;
             contextname             | level |             parent              | totalsize | freesize | usedsize
-------------------------------------+-------+---------------------------------+-----------+----------+----------
 Query resource track memory context |     2 | Workload manager memory context |  67174520 |    64320 | 67110200
 RawMemory                           |     1 | ProcessMemory                   |  23525840 |        0 | 23525840
 builtin proc name Lookup Table      |     2 | builtin_procGlobalMemoryContext |    425984 |   261152 |   164832
 ProcessMemory                       |     0 |                                 |    196608 |    76992 |   119616
 builtin pro Oid Lookup Table        |     2 | builtin_procGlobalMemoryContext |    196608 |    41664 |   154944
 PoolerMemoryContext                 |     1 | ProcessMemory                   |     73728 |    56832 |    16896
 Node Pool                           |     3 | PoolerCoreContext               |     73640 |    25888 |    47752
 ThreadGroup Hash Table              |     1 | ProcessMemory                   |     65536 |    39936 |    25600
 Aio Sub Memory Context 6            |     2 | Aio Memory Context              |     65536 |    63872 |     1664
 Aio Sub Memory Context 5            |     2 | Aio Memory Context              |     65536 |    63872 |     1664
(10 rows)

shared_memory_context_chunk(actor_name cstring, contextname char(64))

描述:查询指定actor、名字为contextname的共享内存上下文申请的所有chunk信息。

参数:

  • actor_name, 指定actor的名字
  • contextname,表示内存上下文名称。

返回值类型:record

示例:

1
2
3
4
5
6
select * from shared_memory_context_chunk('executor0_es_group', 'StreamInfoContext') ;
    parent     | level |      file_name       | line_number | chunk_size | request_count | total_size
---------------+-------+----------------------+-------------+------------+---------------+------------
 ProcessMemory |     1 | mcxt.cpp             |        1010 |       8192 |             1 |       8192
 ProcessMemory |     1 | streamThreadPool.cpp |          35 |       1024 |             1 |       1024
(2 rows)

fabricsql_session_memory_detail()

描述:用于查看对应actor或者所有后端actor节点的线程内存使用情况,以MemoryContext维度来统计。

其中内存上下文“TempSmallContextGroup”,记录当前线程中所有内存上下文字段“totalsize”小于8192字节的信息汇总,并且内存上下文统计计数记录到“usedsize”字段中。所以在结果中,“TempSmallContextGroup”内存上下文中的“totalsize”和“freesize”是该线程中所有内存上下文“totalsize”小于8192字节的汇总总和,usedsize字段表示统计的内存上下文个数。

参数说明:

  • fabricsql_session_memory_detail(),无参数,查询CN和所有DN进程中所有线程的内存上下文的统计信息。
  • fabricsql_session_memory_detail(actor_name),入参为actor_name,输出指定CN或DN进程中所有线程的内存上下文的统计信息。

返回值类型:record

函数返回信息如下:

表2 fabricsql_session_memory_detail字段

名称

类型

描述

sessid

text

线程启动时间+线程标识(字符串信息为timestamp.threadid)。

sesstype

text

线程名称。

contextname

text

内存上下文名称。

level

smallint

当前上下文在整体内存上下文中的层级。

parent

text

父内存上下文名称。

totalsize

bigint

当前内存上下文的内存总数,单位Byte。

freesize

bigint

当前内存上下文中已释放的内存总数,单位Byte。

usedsize

bigint

当前内存上下文中已使用的内存总数,单位Byte;“TempSmallContextGroup”内存上下文中该字段含义为统计计数。

session_memory_context_chunk(actor_name cstring, tid int64, contextname char(64))

描述:查询指定actor上某个线程创建的某个内存上下文申请的所有chunk信息。

参数说明:

  • actor_name, 表示actor名字。
  • tid,表示线程ID。
  • contextname,表示内存上下文名称。

返回值类型:record

示例:

1
2
3
4
5
6
7
8
select * from session_memory_context_chunk('executor0_es_group', 139736895414560, 'Node Pool') order by total_size desc ;
      parent       | level |  file_name   | line_number | chunk_size | request_count | total_size
-------------------+-------+--------------+-------------+------------+---------------+------------
 PoolerCoreContext |     3 | dynahash.cpp |         147 |       2048 |             1 |       2048
 PoolerCoreContext |     3 | dynahash.cpp |         147 |        256 |             1 |        256
 PoolerCoreContext |     3 | dynahash.cpp |         147 |      32584 |             1 |      32584
 PoolerCoreContext |     3 | dynahash.cpp |         147 |       4096 |             3 |      12288
(4 rows)

jemalloc_heap_stats(actor_name cstring)

描述:查询jemalloc提供的内存统计信息。

参数:actor_name, 表示actor名字。

返回值类型:record

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
select * from jemalloc_heap_stats( 'coordinator1' );
  actor_name  |
  stats
--------------+-------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------
 coordinator1 | ___ Begin jemalloc statistics ___

              | Version: "5.2.1-6-gd04ec97dec5e84ac24f32c29053aa94479402b6d"

              | Build-time option settings

              |   config.cache_oblivious: true

              |   config.debug: false

              |   config.fill: true

              |   config.lazy_lock: false

              |   config.malloc_conf: "tcache:true,background_thread:true,percpu_arena:phycpu,dirty_decay_ms:1000,muzzy_decay_ms:1000"

              |   config.opt_safety_checks: false

              |   config.prof: false

              |   config.prof_libgcc: false

              |   config.prof_libunwind: false

              |   config.stats: true

              |   config.utrace: false

jemalloc_heap_profiling(actor_name cstring, type int)

功能说明:对DataArtsFabric SQL actor进程中malloc等内存分配进行采样,并输出采样结果。

表3 jemalloc_heap_profiling参数的含义

参数

类型

含义

actor_name

字符串

actor名字。

type

整数

1:开启内存trace,记录malloc等调用栈信息。

0:关闭内存trace,返回本次所记录的malloc等调用栈的采样信息。

返回值类型:

  • actor_name:actor名字。
  • profiling:内存分配采样信息。

备注:

  • 如果失败提示信息为“Memory profiling failed, check if $MALLOC_CONF contain 'prof:true'.”,说明未设置环境变量MALLOC_CONF=prof:true,原因是未使用带内存采样功能的jemalloc库。请在使用gov_client启动CN的参数中添加-j选项。
  • 如果失败提示信息为“Type %d is not supported. The valid range is 0-1.”,说明用户输入参数错误,正确数值为0或1。

输出内存调用栈信息

操作步骤:

  1. 输出内存调用栈信息,在DataArtsFabric SQL进程所在目录输出trace文件。

    1
    SELECT profiling FROM jemalloc_heap_profiling('coordinator1', 0);
    

  2. 将查询结果另存为trace文件。
  3. 使用jemalloc中提供的jeprof工具,解析日志信息。

    方式1:以TEXT格式输出。
    jeprof --text --show_bytes $GAUSSHOME/bin/gaussdb trace文件1 >prof.txt

    方式2:以PDF格式输出。

    jeprof --pdf --show_bytes $GAUSSHOME/bin/gaussdb trace文件1 > prof.pdf
    • 解析内存调用栈信息,需要依靠DataArtsFabric SQL源码进行分析,需要将trace文件返回给研发工程师进行分析。
    • 分析trace文件,需要使用jeprof工具,该工具由Jemalloc生成。在常规使用中,需要依赖perl环境,如果需要生成pdf调用图,需要安装与操作系统匹配的GraphViz工具。

示例

使用gov_client -j重新启动数据库。

在数据库运行期间,打开内存trace记录功能:

1
SELECT profiling fromjemalloc_heap_profiling('coordinator1', 1);

在数据库运行期间,关闭内存trace记录功能:

1
SELECT profiling fromjemalloc_heap_profiling('coordinator1', 0);

将查询结果复制到trace文件中,以text格式或PDF格式输出:

1
2
jeprof --text --show_bytes $GAUSSHOME/bin/gaussdb trace文件1 >prof.txt
jeprof --pdf --show_bytes $GAUSSHOME/bin/gaussdb trace文件1 > prof.pdf