GaussDB内存:问题分析

GaussDB内存:问题分析

GaussDB内存:分析手段

GaussDB内存:分析手段

  • 集中式

    首先查看节点整体内存使用情况,执行以下SQL:

    SELECT * FROM gs_total_memory_detail;
    复制

    字段含义:

    根据memorytype字段信息,分为以下几种情况,进一步分析:

    1. 如果是dynamic_used_memory较高,接近max_dynamic_memory,说明动态内存使用较多,下一步可以查询动态内存使用情况,执行以下SQL查询,根据具体占用内存较高的内存上下文处理:
    2. SELECT sum(totalsize)/1024/1024 as "totalsize MB", contextname, count(1) as count FROM gs_session_memory_detail GROUP BY contextname ORDER BY 1 DESC LIMIT 10;
    3. 复制
    4. 如果是shared_used_memory较高,接近max_shared_memory,说明共享内存使用较多,类似的可以执行以下SQL查询,根据具体占用内存较高的内存上下文处理:
    5. SELECT sum(totalsize)/1024/1024 as "totalsize MB",contextname, count(1)  as count FROM gs_shared_memory_detail GROUP BY contextname ORDER BY 1 DESC LIMIT 10;
    6. 复制
    7. 查询占用动态内存较高的会话
    8. SELECT sum(totalsize)/1024/1024 as "totalsize MB", sessid, count(1) as count FROM GS_SESSION_MEMORY_CONTEXT GROUP BY sessid ORDER BY 1 DESC LIMIT 10;
    9. 复制
    10. 查询占用动态内存较高的线程
    11. SELECT sum(totalsize)/1024/1024 as "totalsize MB", sessid, count(1) as count FROM GS_SESSION_MEMORY_DETAIL GROUP BY sessid ORDER BY 1 DESC LIMIT 10;


GaussDB内存:结束会话

GaussDB内存:结束会话

  • 常见内存上下文使用内存高的处理手段

    根据前面查询的会话信息,通过执行pg_terminate_session结束相应会话:

    SELECT pg_terminate_session(pid, sessionid);
    复制

    pg_terminate_session函数说明:

    描述:终止一个后台session。

    入参:第一个为线程号,第二个为会话id,均为int64类型。

    返回值类型:Boolean

    备注:如果成功,函数返回true,否则返回false。具有SYSADMIN权限的用户,会话所连接的数据库的属主,会话的属主或者继承了内置角色gs_role_signal_backend权限的用户有权使用该函数。