注册
达梦数据库内存检查方法
培训园地/ 文章详情 /

达梦数据库内存检查方法

llb 2025/06/06 21 0 0

达梦数据库通过缓冲区、内存池和专用内存区实现高效内存管理。合理配置参数(如BUFFER、MEMORY_POOL)、监控高内存SQL(V$LARGE_MEM_SQLS)及定期维护(清理缓存、优化碎片)来保障性能提升关键。遇到内存问题时,结合动态视图与系统内存情况快速定位解决。

一、内存架构概述

SGA(系统全局区):BUFFER_POOL--数据缓冲区(缓存表数据和索引)、SHARED_POOL--共享池(缓存 SQL 语句和执行计划)等参数
PGA(程序全局区):每个会话独立使用、存储游标信息、排序工作区等

二、内存常见现象

典型的数据库内存溢出问题,表现为:
系统层面:物理内存耗尽--频繁Swap--系统响应剧降(I/O瓶颈)
数据库层面:SQL 执行超时--连接拒绝--内存分配失败(错误码 - 8001/-8002)
导致以上问题原因如下:达梦数据库配置的内存参数(如MEMORY_POOL、BUFFER)超过服务器物理内存限制,导致系统级内存争用。

三、内存诊断

查看全局内存分配

    (SELECT SUM(n_pages * page_size)/1024/1024 FROM v$bufferpool) || 'MB' AS BUFFER_SIZE,
    (SELECT SUM(total_size)/1024/1024 FROM v$mem_pool) || 'MB' AS MEM_POOL,
    (SELECT SUM(n_pages * page_size)/1024/1024 FROM v$bufferpool) + 
    (SELECT SUM(total_size)/1024/1024 FROM v$mem_pool) || 'MB' AS TOTAL_SIZE
FROM dual;

image.png
关键指标:BUFFER(数据缓冲区)和MEM_POOL(内存池)的总和应与操作系统监控值一致。
异常判断:若TOTAL_SIZE远高于BUFFER + MEMORY_POOL设置值,可能存在内存泄漏。

四、内存泄漏排查

1.开启内存泄漏检测

ALTER SYSTEM SET 'MEMORY_LEAK_CHECK' = 1; -- 动态开启内存泄漏检测
影响:开启后对性能有一定的影响,建议排查后关闭。
验证状态:SELECT * FROM v$dm_ini WHERE para_name = 'MEMORY_LEAK_CHECK';
image.png

MEMORY_LEAK_CHECK 是排查达梦数据库内存泄漏的重要工具,但不建议在生产环境长期开启;
0-禁用内存泄漏检测(默认值),适合生产环境以减少性能开销。
1-启用内存泄漏检测,适合开发和测试环境,用于排查内存问题。
2-启用增强型检测,记录更详细的内存分配信息(如调用栈),但会显著增加系统开销。

2.V$MEM_REGINFO视图

SELECT REFNUM, fname, lineno, RESERVED_SIZE
FROM V$MEM_REGINFO
ORDER BY REFNUM DESC;
如果REFNUM值很大且长时间没有下降,可能意味着当前由这行代码申请的内存一直没有被释放,此时需要提高警惕,排查系统是否出现内存泄漏。

image.png
REFNUM:未释放的引用次数(>1000需警惕)
RESERVED_SIZE:未释放内存总量(单位字节)

3.V$MEM_POOL视图

SELECT name, org_size/1024/1024 AS org_size_MB, total_size/1024/1024 AS total_size_MB,
reserved_size/1024/1024 AS reserved_size_MB, data_size/1024/1024 AS data_size_MB,
n_extend_exclusive
FROM v$mem_pool
ORDER BY total_size DESC;
重点关注N_EXTEND_EXCLUSIVE字段的值,如果该字段长期大于0,说明长期从池外扩展,可能存在内存泄漏。

image.png

4.定位高内存SQL

ORDER BY mem_used_by_k DESC 
LIMIT 10;

根据以上语句可查出前10的高内存sql,针对sql优化方向分两个:减少ORDER BY、DISTINCT、GROUP BY操作;优化大结果集处理(分页或流式处理)。

5.系统内存监控

free -h 
#查看内存占用前10的进程 
ps aux | grep dmserver | sort -rk 4,4 | head -n 10 
#监控Swap使用情况 
vmstat 1 10 
#每秒输出一次,共10次 
#关注si(从swap读入内存)和so(从内存写入swap) 
#查看内存分配详情 
cat /proc/meminfo
#查看显示系统中各个进程的资源占用情况
top

image.png
image.png
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服