目录
一、环境信息
二、介绍
三、数据字典表
1、V$MEM_POOL
2、V$SQL_STAT
3、V$SQL_STAT_HISTORY
4、V$LARGE_MEM_SQLS
5、V$SYSTEM_LARGE_MEM_SQLS
四、总结
一、环境信息
名称 | 值 |
CPU | 12th Gen Intel(R) Core(TM) i7-12700H |
操作系统 | CentOS Linux release 7.9.2009 (Core) |
内存 | 4G |
逻辑核数 | 2 |
DM版本 | 1 DM Database Server 64 V8 2 DB Version: 0x7000c 3 03134284194-20240703-234060-20108 4 Msg Version: 12 5 Gsu level(5) cnt: 0 |
二、介绍
在工作中我们经常会遇到一些客户询问达梦进程占用了很多内存,该如何排查和降低,这种情况我们一般可以从大内存SQL、内存泄漏、数据库参数配置三层去考虑这个问题。我们这次就只讲大内存SQL的定位和监测的相关视图。
三、数据字典表
1、V$MEM_POOL
显示所有的内存池信息。
序号 | 列 | 说明 |
1 | ADDR | 内存结构地址 |
2 | NAME | 内存池名称 |
3 | IS_SHARED | 是否是共享的 |
4 | CHK_MAGIC | 是否打开了内存校验 |
5 | CHK_LEAK | 是否打开了泄漏检查 |
6 | IS_OVERFLOW | 是否已经触发 BAK_POOL 的分配 |
7 | IS_DSA_ITEM | 是否是 DSA(Dameng Share Area)项目, 目前一律 为 N |
8 | ORG_SIZE | 初始大小,单位为字节数 |
9 | TOTAL_SIZE | 当前总大小,单位为字节数 |
10 | RESERVED_SIZE | 当前分配出去的大小,单位为字节数 |
11 | DATA_SIZE | 当前分配出去的数据占用大小,单位为字节数 |
12 | EXTEND_SIZE | 每次扩展的块大小,单位为字节数 |
13 | TARGET_SIZE | 可以扩展到的大小,单位为字节数。当 TARGET_SIZE 为 0 时,不限制此内存池的扩展; 对于共享内存池, 即使 TARGET_SIZE 不为 0,也不限制其扩展, TARGET_SIZE 用于提示系统尽快把内存占用释放到 TARGET_SIZE 以下 |
14 | EXTEND_LEN | 扩展链长度 |
15 | N_ALLOC | 累计分配了几次 |
16 | N_EXTEND_NORMAL | TARGET 范围内累计扩展次数 |
17 | N_EXTEND_EXCLUSIVE | 超过 TARGET 累计扩展次数 |
18 | N_FREE | 累计释放次数 |
19 | MAX_EXTEND_SIZE | 保留字段,始终返回 NULL |
20 | MIN_EXTEND_SIZE | 保留字段,始终返回 NULL |
21 | FILE_NAME | 本池创建点所在的源文件名 |
22 | FILE_LINE | 创建点所在的代码行 |
23 | CREATOR | 创建者线程号 |
24 | EXTEND_MODE | 内存池的扩展模式 O:扩展时从操作系统(OS)申 请扩展块; S:扩展时从共享池(Share Pool)申请扩 展块 |
常用SQL:
SELECTA.CREATOR ,B.SQL_TEXT ,SUM(A.TOTAL_SIZE)/1024/1024||'M' ALL_SIZE,SUM(A.DATA_SIZE) /1024/1024||'M' ACTUAL_SIZE
FROMV$MEM_POOL A,V$SESSIONS B
WHEREA.CREATOR = B.THRD_ID
GROUP BYA.CREATOR,B.SQL_TEXT
ORDER BYALL_SIZE DESC;
2、V$SQL_STAT
语 句 级 资 源 监 控 内 容 。 记 录 当 前 正 在 执 行 的 SQL 语 句 的 资 源 开 销 。 需 要 ENABLE_MONITOR=1 才 开 始 监 控 。 针 对 63~68 列 中 的 监 控 项 , 还 需 开 启 参 数 MONITOR_SQL_EXEC=1、ENABLE_MONITOR_DMSQL=1 才开始监控。
序号 | 列 | 说明 |
1 | SESSID | 会话 ID,系统内部标识 |
2 | SESS_SEQ | 会话序列号,每创建一个会话,系统自动为其生成一个全局递增的序列号 |
3 | SQL_TXT | 语句 |
4 | SQL_ID | 语句编号 |
5 | EXEC_TIME | 以系统时间统计的执行时间,单位毫秒 |
6 | PARSE_CNT | 解析次数 |
7 | PARSE_TIME | 以系统时间统计的解析时间,单位毫秒 |
8 | HARD_PARSE_CNT | 硬解析次数 |
9 | HARD_PARSE_TIME | 硬解析时间,单位毫秒 |
10 | SEL_SQL_CNT | 执行的查询语句总数 |
11 | INS_SQL_CNT | 执行的插入语句总数 |
12 | DEL_SQL_CNT | 执行的删除语句总数 |
13 | UPD_SQL_CNT | 执行的更新语句总数 |
14 | DDL_SQL_CNT | 执行的 DDL 语句总数 |
15 | SEL_IN_PL_CNT | 执行的语句块中的查询语句总数 |
16 | INS_IN_PL_CNT | 执行的语句块中的插入语句总数 |
17 | DEL_IN_PL_CNT | 执行的语句块中的删除语句总数 |
18 | UPD_IN_PL_CNT | 执行的语句块中的更新语句总数 |
19 | DYN_EXEC_CNT | 执行的语句块中的动态执行语句总数 |
20 | DDL_EVT_TRG_CNT | DDL 事件触发器触发次数 |
21 | STMT_BF_TRG_CNT | 语句级 BEFORE 触发器触发次数 |
22 | STMT_AF_TRG_CNT | 语句级 AFTER 触发器触发次数 |
23 | ROW_BF_TRG_CNT | 行级 BEFORE 触发器触发次数 |
24 | ROW_AF_TRG_CNT | 行级 AFTER 触发器触发次数 |
25 | INSTEAD_OF_TRG_CNT | INSTEAD OF 触发器触发次数 |
26 | OPTIMIZED_SORT_CNT | 最优排序次数 |
27 | ONE_WAY_SORT_CNT | 单路排序次数 |
28 | MULTI_WAY_SORT_CNT | 多路排序次数 |
29 | RUNTIME_OBJ_ALLOC_CNT | 运行时对象创建次数 |
30 | RUNTIME_OBJ_SIZE_CNT | 运行时对象占用空间大小,单位 BYTE |
31 | RUNTIME_OBJ_RECLAIM_CNT | 运行时对象回收次数 |
32 | LONG_ROW_CVT_CNT | 超长记录字段压缩次数 |
33 | LOGIC_READ_CNT | 逻辑读页次数 |
34 | PHY_READ_CNT | 物理读页次数 |
35 | PHY_MULTI_READ_CNT | 物理读多页次数 |
36 | RECYCLE_LOGIC_READ_CNT | 临时表空间逻辑读次数 |
37 | RECYCLE_PHY_READ_CNT | 临时表空间物理读次数 |
38 | HBUF_LOGIC_READ_CNT | HBUF 逻辑读次数 |
39 | HBUF_PHY_READ_CNT | HBUF 物理读次数 |
40 | HBUF_PHY_WRITE_CNT | HBUF 物理写次数 |
41 | HBUF_PHY_READ_SIZE | HBUF 物理读总大小,单位 BYTE |
42 | HBUF_PHY_WRITE_SIZE | HBUF 物理写总大小,单位 BYTE |
43 | UNDO_PAGE_CHANGES_CNT | undo 页变化次数 |
44 | RECYCLE_PAGE_CHANGES_CNT | 临时页变化次数 |
45 | DATA_PAGE_CHANGES_CNT | 数据页变化次数 |
46 | IO_WAIT_TIME | I/O 等待时间(MS) |
47 | TAB_SCAN_CNT | 统计全表扫描次数 |
48 | HASH_JOIN_CNT | 统计哈希连接的次数 |
49 | BTR_SPLIT_CNT | B 树分裂次数 |
50 | BTR_PAGE_DISCARD_CNT | 数据页丢弃次数 |
51 | BTR_LEVEL_DISCARD_CNT | B 树层丢弃次数 |
52 | BTR_LEFT_TRY_CNT | B 树左移次数 |
53 | BTR_DIRECT_UPDATE_CNT | B 树直接更新次数 |
54 | BTR_INSDEL_UPDATE_CNT | B 树插入删除更新次数 |
55 | BTR_UPDATE_2ND_CONFLICT_C NT | 二级索引更新冲突次数 |
56 | UPDATE_MVCC_RETRY_CNT | 多版本更新重试次数 |
57 | DELETE_MVCC_RETRY_CNT | 多版本删除重试次数 |
58 | MAX_MEM_USED | 内存使用峰值(KB) |
59 | VIS_RECS_CNT | 可见数据获取次数 |
60 | VIS_RECS_TIME | 可见数据获取时间,单位微秒 |
61 | INVIS_RECS_CNT | 不可见数据获取次数 |
62 | INVIS_RECS_TIME | 不可见数据获取时间,单位微秒 |
63 | NET_BYTES_RECV | 从客户端接收的数据字节数 |
64 | NET_BYTES_SEND | 向客户端发送的数据字节数 |
65 | NET_ROUNDTRIPS | 和客户端之间的数据往返传送次数 |
66 | REDO_SIZE | REDO 日志大小,单位字节 |
67 | PARSE_ELAPSD | 以 CPU 时钟统计的解析时间,单位毫秒 |
68 | EXEC_CPU | 以 CPU 时钟统计的执行时间,单位毫秒 |
69 | PLN_ADDR | 执行计划地址,与 V$CACHEPLN 的 CACHE_ITEM 列对应 |
3、V$SQL_STAT_HISTORY
语句级资源监控内容。记录历史SQL语句(不含存储过程中的SQL)执行的资源开销。需要ENABLE_MONITOR=1才开始监控。单机最大行数为10000。其中5~62、64和66列中的监控项,可以通过SP_SET_SQL_STAT_THRESHOLD()设置监控阈值,当资源超过设置的阈值才开始统计并记录该项。
当前已设置的监控阈值内容,可以通过查询视图V$SQL_STAT_THRESHOLD进行查看。
序号 | 列 | 说明 |
1 | SESSID | 会话 ID,系统内部标识 |
2 | SESS_SEQ | 会话序列号,每创建一个会话,系统自动为其生成一个全局递增的序列号 |
3 | SQL_TXT | 语句 |
4 | SQL_ID | 语句编号 |
5 | EXEC_TIME | 以系统时间统计的执行时间,单位毫秒 |
6 | PARSE_CNT | 解析次数 |
7 | PARSE_TIME | 以系统时间统计的解析时间,单位毫秒 |
8 | HARD_PARSE_CNT | 硬解析次数 |
9 | HARD_PARSE_TIME | 硬解析时间,单位毫秒 |
10 | SEL_SQL_CNT | 执行的查询语句总数 |
11 | INS_SQL_CNT | 执行的插入语句总数 |
12 | DEL_SQL_CNT | 执行的删除语句总数 |
13 | UPD_SQL_CNT | 执行的更新语句总数 |
14 | DDL_SQL_CNT | 执行的 DDL 语句总数 |
15 | SEL_IN_PL_CNT | 执行的语句块中的查询语句总数 |
16 | INS_IN_PL_CNT | 执行的语句块中的插入语句总数 |
17 | DEL_IN_PL_CNT | 执行的语句块中的删除语句总数 |
18 | UPD_IN_PL_CNT | 执行的语句块中的更新语句总数 |
19 | DYN_EXEC_CNT | 执行的语句块中的动态执行语句总数 |
20 | DDL_EVT_TRG_CNT | DDL 事件触发器触发次数 |
21 | STMT_BF_TRG_CNT | 语句级 BEFORE 触发器触发次数 |
22 | STMT_AF_TRG_CNT | 语句级 AFTER 触发器触发次数 |
23 | ROW_BF_TRG_CNT | 行级 BEFORE 触发器触发次数 |
24 | ROW_AF_TRG_CNT | 行级 AFTER 触发器触发次数 |
25 | INSTEAD_OF_TRG_CNT | INSTEAD OF 触发器触发次数 |
26 | OPTIMIZED_SORT_CNT | 最优排序次数 |
27 | ONE_WAY_SORT_CNT | 单路排序次数 |
28 | MULTI_WAY_SORT_CNT | 多路排序次数 |
29 | RUNTIME_OBJ_ALLOC_CNT | 运行时对象创建次数 |
30 | RUNTIME_OBJ_SIZE_CNT | 运行时对象占用空间大小,单位 BYTE |
31 | RUNTIME_OBJ_RECLAIM_CNT | 运行时对象回收次数 |
32 | LONG_ROW_CVT_CNT | 超长记录字段压缩次数 |
33 | LOGIC_READ_CNT | 逻辑读页次数 |
34 | PHY_READ_CNT | 物理读页次数 |
35 | PHY_MULTI_READ_CNT | 物理读多页次数 |
36 | RECYCLE_LOGIC_READ_CNT | 临时表空间逻辑读次数 |
37 | RECYCLE_PHY_READ_CNT | 临时表空间物理读次数 |
38 | HBUF_LOGIC_READ_CNT | HBUF 逻辑读次数 |
39 | HBUF_PHY_READ_CNT | HBUF 物理读次数 |
40 | HBUF_PHY_WRITE_CNT | HBUF 物理写次数 |
41 | HBUF_PHY_READ_SIZE | HBUF 物理读总大小,单位 BYTE |
42 | HBUF_PHY_WRITE_SIZE | HBUF 物理写总大小,单位 BYTE |
43 | UNDO_PAGE_CHANGES_CNT | undo 页变化次数 |
44 | RECYCLE_PAGE_CHANGES_CNT | 临时页变化次数 |
45 | DATA_PAGE_CHANGES_CNT | 数据页变化次数 |
46 | IO_WAIT_TIME | I/O 等待时间(MS) |
47 | TAB_SCAN_CNT | 统计全表扫描次数 |
48 | HASH_JOIN_CNT | 统计哈希连接的次数 |
49 | BTR_SPLIT_CNT | B 树分裂次数 |
50 | BTR_PAGE_DISCARD_CNT | 数据页丢弃次数 |
51 | BTR_LEVEL_DISCARD_CNT | B 树层丢弃次数 |
52 | BTR_LEFT_TRY_CNT | B 树左移次数 |
53 | BTR_DIRECT_UPDATE_CNT | B 树直接更新次数 |
54 | BTR_INSDEL_UPDATE_CNT | B 树插入删除更新次数 |
55 | BTR_UPDATE_2ND_CONFLICT_C NT | 二级索引更新冲突次数 |
56 | UPDATE_MVCC_RETRY_CNT | 多版本更新重试次数 |
57 | DELETE_MVCC_RETRY_CNT | 多版本删除重试次数 |
58 | MAX_MEM_USED | 内存使用峰值(KB) |
59 | VIS_RECS_CNT | 可见数据获取次数 |
60 | VIS_RECS_TIME | 可见数据获取时间,单位微秒 |
61 | INVIS_RECS_CNT | 不可见数据获取次数 |
62 | INVIS_RECS_TIME | 不可见数据获取时间,单位微秒 |
63 | NET_BYTES_RECV | 从客户端接收的数据字节数 |
64 | NET_BYTES_SEND | 向客户端发送的数据字节数 |
65 | NET_ROUNDTRIPS | 和客户端之间的数据往返传送次数 |
66 | REDO_SIZE | REDO 日志大小,单位字节 |
67 | PARSE_ELAPSD | 以 CPU 时钟统计的解析时间,单位毫秒 |
68 | EXEC_CPU | 以 CPU 时钟统计的执行时间,单位毫秒 |
69 | PLN_ADDR | 执行计划地址,与V$CACHEPLN 的CACHE_ITEM 列对应 |
70 | START_TIME | SQL 执行的开始时间 |
71 | END_TIME | SQL 执行的结束时间 |
4、V$LARGE_MEM_SQLS
最近 1000 条使用大内存的 sql 语句。一条 sql 语句使用的内存值超过 ini 参数LARGE_MEM_THRESHOLD,就认为使用了大内存。
参数名 | 默认值 | 级别 | 描述 |
LARGE_MEM_THRESHOLD | 10000 | 动态, 系统级 | 大内存监控阈值。单位 KB,取值范围 0~10000000。其中 0~100 关闭统计,100 以上才统计。 一条 SQL 语句使用的内存值超过这个值,就认为是使用了大内存,此时开启大内存监控。 使用了大内存的 SQL 语句记 录在 V$LARGE_MEM_SQLS, V$SYSTEM_LARGE_MEM_SQLS 视图中 |
序号 | 列 | 说明 |
1 | SESS_ID | 会话 ID,系统内部标识 |
2 | SQL_ID | 语句的 SQL ID |
3 | SQL_TEXT | SQL 文本 |
4 | MEM_USED_BY_K | 使用的内存数,单位 KB |
5 | FINISH_TIME | 执行结束时间 |
6 | N_RUNS | 执行次数 |
7 | SEQNO | 编号 |
8 | TRX_ID | 事务号 |
9 | SESS_SEQ | 会话序列号,每创建一个会话,系统自动为其生成一个全 局递增的序列号 |
5、V$SYSTEM_LARGE_MEM_SQLS
系统中使用大内存最多的 20 条 sql 语句。字段定义与 v$large_mem_sqls 相同。
四、总结
情况 | 推荐使用 |
当下SQL内存占用情况 | V$MEM_POOL |
历史或当下SQL各种资源使用情况 | V$SQL_STAT_HISTORY V$SQL_STAT |
历史或当下大内存SQL使用情况 | V$SYSTEM_LARGE_MEM_SQLS V$LARGE_MEM_SQLS |