注册
探究DEM所监控动态视图以及查询视图执行效率
培训园地/ 文章详情 /

探究DEM所监控动态视图以及查询视图执行效率

anon 2025/09/13 47 0 0

一.引言

在数据库运维工作中,DEM(达梦数据库企业管理器)作为一款强大的监控工具,能帮助我们实时掌握数据库的运行状态。DEM主要是通过查询数据库的动态试图的方式来获取监控数据,这些视图与内容紧密相关。

二.探究DEM访问的动态视图

1.通过SQL日志的方式查询DEM所使用的动态视图

DEM的官方文档中并没有说明DEM进行监控时具体访问了那些视图。所以我们得自己通过分析SQL日志的方法,查看在通过DEM监控的过程中,访问了哪些视图,各个视图的访问频次是多少。

首先我们需要开启SQL日志功能。

开启SQL日志

  • 创建SQL日志存放目录
cd /dm8
mkdir -p /data/dmdbms/log/logcommit
  • 检查SVR_LOG 参数。
select * from v$parameter where name like ‘SVR_LOG%’;

image.png

这里显示SQL日志功能还未开启。

  • 修改实例路径下 sqllog.ini 文件如下:设置 sql 日志为异步,按照文件大小进行切换,每个 1024M,20 个文件循环写。
Copycd /data/dmdata/DAMENG
vi sqllog.ini
BUF_TOTAL_SIZE = 10240 #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE = 1024 #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT = 6 #SQLs Log buffer keeped count(1~100)

[SLOG_ALL]
FILE_PATH = /data/dmdbms/log/logcommit  #sql 日志生成路径
PART_STOR = 0
SWITCH_MODE = 2
SWITCH_LIMIT = 1024  #每个日志文件 1024M
ASYNC_FLUSH = 1
FILE_NUM = 20  #循环收集 20 个可以根据实际情况做调整
ITEMS = 0
SQL_TRACE_MASK = 1
MIN_EXEC_TIME = 0
USER_MODE = 0
USERS =
  • 执行调用存储过程生效配置文件,并开启 SQLLOG 日志。
CopySP_REFRESH_SVR_LOG_CONFIG();
sp_set_para_value(1,'SVR_LOG',1);

--检查 SVR_LOG 参数。
select * from v$parameter where name like ‘SVR_LOG’;

image.png

此处即表示sqllog开启完成

  • 检查日志生成情况。
Copyls  /data /logcommit

然后我们打开DEM,我们可以看到在DEM的监控模块中有三个子模块,分别是主机监控,数据库监控和进程监控。接下来将分别探究这三种监控所访问的动态视图。

image.png

我们开启SQL日志后,可以在对应的日志生成目录下看到生成的sqllog。但是log日志条数众多难以看懂,所以我们此时借助DMLOG达梦 SQL 日志分析工具来分析达梦数据库的SQL日志,来统计日志中最长执行时间和执行最高频次的 SQL 语句。

使用DMLOG分析日志

我们首先确保服务器上存在着JAVA环境使用以下命令查看服务器JAVA环境

java -version

image.png

然后将安装包解压到服务器上,解压完成后,修改其中dmlog.properties的参数

image.png

配置文件修改完成后,运行jar命令

java -jar Dmlog_DM_8.**.jar

image.png

等待执行完成即可,执行完成之后,会生成一个文件夹,文件夹下文件如下所示:

image.png

有根据配置的执行时间和执行次数上限值命名的 excel 文件(xls)、报错的 SQL 文件(txt)、长度超过 30000 的 SQL 文件 (txt),echart 散点图及 90% 平均次数和平均耗时的 SQL 统计图 (html)。

more_than_0_ms_log_result.xls 工作表按照最大执行时间降序排序,more_than_0_times_log_result.xls 工作表按照执行次数降序排序。我们查看DEM访问了哪些动态视图,关注这两个文件即可。
image.png

我们在生成的excel表中对SQL语句列进行筛选,选出DEM访问的含有V$的sql语句,即为DEM运行时,访问的动态视图SQL语句。然后对其进行分析。得到DEM访问最多的视图如第二部分所示。

2.统计DEM使用的动态视图和其查询频率

查询频率统计方法

在这里我们统计DEM使用到的动态视图的查询频率使用到的方法是通过sqllogSQL日志。SQL 日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息等。SQL 跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态有一个分析。

DMLOG是一个实例级 SQL 日志分析工具,DMLOG 工具是一款简单易用的达梦数据库 SQL 日志分析工具,通过分析数据库的 SQL 日志文件(达梦数据库可通过开启 SVR_LOG 捕捉数据库中运行的所有 SQL,并生成 SQL 日志文件),来统计日志中最长执行时间和执行最高频次的 SQL 语句,直观地反映 SQL 执行情况,对于 SQL 的优化工作提供了极大的便利。

在这里我截取了时间为14:57——15:27之间的半个小时内的SQL日志来进行统计。

V$ARCH_FILE和V$ARCH_QUEUE

V$ARCH_FILE这个视图的作用是查询本地已经归档的日志信息。V$ARCH_QUEUE这个视图的作用是显示档期按归档任务队列信息,他们对应的应该是数据库监控的这块位置:

image.png

这里我还未配置归档,所以显示的信息为空。

image.png

****V$ARCH_FILE的查询频率

通过输出的excel表可以看到DEM查询视图V$ARCH_FILE在30分钟内的次数为58次,平均频率在1分钟内两次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DMAgent//*+ enable_monitor(0) /select status, len, free, to_char(close_time, 'YYYY-MM-DD HH24:MI:SS'), path from v$arch_file where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() 28.0 0.0 1.0 3.0 58 0 /DMAgent//*+ enable_monitor(0) /select status, len, free, to_char(close_time, 'YYYY-MM-DD HH24:MI:SS'), path from v$arch_file where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() DEMTEST

V$ARCH_QUEUE的查询频率

通过DMLOG输出的excel表可以看到,DEM查询视图V$ARCH_QUEUE在30分钟内查询了29次,平均每分钟查询一次该视图。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DMAgent//*+ enable_monitor(0) /select arch_type, waiting, cur_wait_time, max_wait_time, total_wait_time, average_wait_time from v$arch_queue where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() 6.0 0.0 1.0 1.0 29 0 /DMAgent//*+ enable_monitor(0) /select arch_type, waiting, cur_wait_time, max_wait_time, total_wait_time, average_wait_time from v$arch_queue where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() DEMTEST

V$DANGER_EVENT

记录数据库重要事件或行为信息视图。重要的事件或行为是指 ALTER_DATABASE、创建表空间、重命名表空间、重命名数据文件和增加数据文件。对应的区域是这一块:

image.png

V$DANGER_EVENT 的查询频率

通过输出的excel表可以看出,DEM查询视图V$DANGER_EVENT的频率在30分钟内29次,平均每分钟1次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DMAgent//*+ enable_monitor(0) /select optime, operation, opuser from v$danger_event where true and /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() and optime is not null and bigdatediff(ms, ?, optime) >= 0 and bigdatediff(ms, ?, optime) < 0 order by optime desc 10.0 0.0 1.0 2.0 29 0 /参数已替换/ /DMAgent//*+ enable_monitor(0) /select optime, operation, opuser from v$danger_event where true and /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() and optime is not null and bigdatediff(ms, '2025-08-13 15:11:45.891000', optime) >= 0 and bigdatediff(ms, '2025-08-13 15:12:45.943000', optime) < 0 order by optime desc DEMTEST

V$DATABASE和V$SYSTEMINFO

V$DATABASE该动态视图显示数据库信息,V$SYSTEMINFO该动态视图显示系统信息,他们所对应的区域为这一块展示数据库总览信息:

image.png

V$DATABASE的查询频率

通过输出的excel表可以看出,DEM查询视图V$DATABASE的频率在30分钟内29次,平均每分钟1次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DMAgent//*+ enable_monitor(0) /(select 'gather_open_counts', startup_count, create_time from v$database where /+ MPP_LOCAL / sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno()) union (select 'gather_switch_counts', switch_count, null from v$dmwatcher where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno()) 31.0 0.0 1.0 2.0 29 1 /DMAgent//*+ enable_monitor(0) /(select 'gather_open_counts', startup_count, create_time from v$database where /+ MPP_LOCAL / sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno()) union (select 'gather_switch_counts', switch_count, null from v$dmwatcher where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno()) DEMTEST

V$SYSTEMINFO的查询频率

通过输出的excel表可以看出,DEM查询视图V$DATABASE的频率在30分钟内42次,平均每分钟1.4次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DEM/select top 1 'page_size', page_size from v$datafile where sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'sess_total', count(1) from v$sessions where clnt_type != 'UNKNOWN' and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'sess_active', count(1) from v$sessions where state = 'ACTIVE' and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select name, stat_val from v$sysstat where name in ('os DM database cpu rate', 'os total cpu rate', 'bytes allocated from os') and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'mem_total', total_phy_size from v$systeminfo where total_phy_size is not null and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'mem_idle', free_phy_size from v$systeminfo where total_phy_size is not null and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() 248.0 203.0 215.0 218.0 42 8 /DEM/select top 1 'page_size', page_size from v$datafile where sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'sess_total', count(1) from v$sessions where clnt_type != 'UNKNOWN' and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'sess_active', count(1) from v$sessions where state = 'ACTIVE' and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select name, stat_val from v$sysstat where name in ('os DM database cpu rate', 'os total cpu rate', 'bytes allocated from os') and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'mem_total', total_phy_size from v$systeminfo where total_phy_size is not null and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'mem_idle', free_phy_size from v$systeminfo where total_phy_size is not null and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() DEMTEST

V$SYSSTAT

显示系统中统计对象的信息,可统计对象如下:

image.png

在DEM中,此模块的大多统计数据是通过V$SYSSTAT统计出来的:

image.png

V$SYSSTAT的查询频率

输出的excel表可以看出,DEM查询视图V$SYSSTAT的频率在30分钟内84次,平均每分钟接近3次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DEM/select name, stat_val, to_char(cast (now() as datetime(3)), 'YYYY-MM-DD HH24:MI:SS.FF3') from v$sysstat where name in ('transaction total count', 'transaction commit count', 'transaction rollback count', 'ddl statements', 'insert statements', 'delete statements', 'update statements', 'select statements', 'select statements in pl/sql', 'insert statements in pl/sql', 'update statements in pl/sql', 'delete statements in pl/sql', 'DDL in pl/sql count', 'dynamic exec in pl/sql', 'physical read count', 'physical write count', 'total bytes received from client', 'total bytes sent to client') and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() 286.0 201.0 207.0 209.0 84 18 /DEM/select name, stat_val, to_char(cast (now() as datetime(3)), 'YYYY-MM-DD HH24:MI:SS.FF3') from v$sysstat where name in ('transaction total count', 'transaction commit count', 'transaction rollback count', 'ddl statements', 'insert statements', 'delete statements', 'update statements', 'select statements', 'select statements in pl/sql', 'insert statements in pl/sql', 'update statements in pl/sql', 'delete statements in pl/sql', 'DDL in pl/sql count', 'dynamic exec in pl/sql', 'physical read count', 'physical write count', 'total bytes received from client', 'total bytes sent to client') and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() DEMTEST

V$SESSIONS

该视图显示当前对话的具体信息,如执行的sql语句、主机名、当前会话状态、用户名等等。

在DEM中,负载分析的会话模块使用的就是此视图:
image.png

V$SESSIONS的查询频率

输出的excel表可以看出,DEM查询视图V$SESSIONS的频率在30分钟内42次,平均每分钟接1.4次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DEM/select top 1 'page_size', page_size from v$datafile where sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'sess_total', count(1) from v$sessions where clnt_type != 'UNKNOWN' and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'sess_active', count(1) from v$sessions where state = 'ACTIVE' and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select name, stat_val from v$sysstat where name in ('os DM database cpu rate', 'os total cpu rate', 'bytes allocated from os') and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'mem_total', total_phy_size from v$systeminfo where total_phy_size is not null and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'mem_idle', free_phy_size from v$systeminfo where total_phy_size is not null and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() 248.0 203.0 215.0 218.0 42 8 /DEM/select top 1 'page_size', page_size from v$datafile where sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'sess_total', count(1) from v$sessions where clnt_type != 'UNKNOWN' and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'sess_active', count(1) from v$sessions where state = 'ACTIVE' and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select name, stat_val from v$sysstat where name in ('os DM database cpu rate', 'os total cpu rate', 'bytes allocated from os') and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'mem_total', total_phy_size from v$systeminfo where total_phy_size is not null and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() union select 'mem_idle', free_phy_size from v$systeminfo where total_phy_size is not null and sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() DEMTEST

V$DEADLOCK_HISTORY

该视图的作用主要是记录死锁的历史信息,主要统计死锁的发生时间。在DEM的数据库监控负载分析的事务模块的死锁统计使用到了它:

image.png

V$DEADLOCK_HISTORY的查询频率

输出的excel表可以看出,DEM查询视图V$DEADLOCK_HISTORY的频率在30分钟内30次,平均每分钟接1次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DMAgent//*+ enable_monitor(0) /select a.trx_id, a.sess_id, a.sess_seq, a.sql_text, a.happen_time, b.user_name, b.appname, b.clnt_ip from v$deadlock_history a left join v$session_history b on a.sess_id = b.sess_id and a.sess_seq = b.sess_seq where /+ MPP_LOCAL */ sf_get_ep_seqno(a.rowid) = sf_get_self_ep_seqno() and a.happen_time is not null and bigdatediff(MS, ?, a.happen_time) >= 0 and bigdatediff(MS, ?, a.happen_time) < 0 order by a.happen_time asc 12.0 0.0 1.0 1.0 30 0 /参数已替换/ /DMAgent//*+ enable_monitor(0) /select a.trx_id, a.sess_id, a.sess_seq, a.sql_text, a.happen_time, b.user_name, b.appname, b.clnt_ip from v$deadlock_history a left join v$session_history b on a.sess_id = b.sess_id and a.sess_seq = b.sess_seq where /+ MPP_LOCAL */ sf_get_ep_seqno(a.rowid) = sf_get_self_ep_seqno() and a.happen_time is not null and bigdatediff(MS, '2025-08-13 15:25:41.688000', a.happen_time) >= 0 and bigdatediff(MS, '2025-08-13 15:26:41.729000', a.happen_time) < 0 order by a.happen_time asc DEMTEST

V$TRXWAIT

该视图的作用主要是显示事物的等待信息,如事务id等待时间等,在负载分析的事务的等待事务模块使用到了它:

image.png

V$TRXWAIT的查询频率

输出的excel表可以看出,DEM查询视图V$TRXWAIT的频率在30分钟内30次,平均每分钟接1次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DMAgent//*+ enable_monitor(0) /select trx_wait.wait_time, trx_wait.id, trx_wait.wait_for_id, sess_wait.sess_id, sess_wait.clnt_ip, sess_wait.appname, sess_wait.sql_text, sess_wait.state, sess_wait_for.wait_time, sess_wait_for.state, sess_wait_for.sess_id, sess_wait_for.clnt_ip, sess_wait_for.appname, sess_wait_for.sql_text from (select id, wait_for_id, wait_time from v$trxwait where /+ MPP_LOCAL / sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() union select trx_id, wait_trx_id, wait_time from v$dsc_trxwait where ep_seqno=sf_get_self_ep_seqno())trx_wait left join (select id, sess_id, sess_seq from v$trx where /+ MPP_LOCAL / sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno()) trx_sess_wait on trx_wait.id = trx_sess_wait.id left join (select trx_id, sess_id, sess_seq, clnt_ip, appname, sql_text, state from v$sessions where /+ MPP_LOCAL / sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno())sess_wait on trx_sess_wait.sess_id = sess_wait.sess_id and trx_sess_wait.sess_seq = sess_wait.sess_seq left join (select id, sess_id, sess_seq from v$trx where /+ MPP_LOCAL / sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno())trx_sess_wait_for on trx_wait.wait_for_id = trx_sess_wait_for.id left join (select case when state = 'ACTIVE' then bigdatediff(ms, last_recv_time, now) else bigdatediff(ms, last_recv_time, last_send_time) end wait_time, state, trx_id, sess_id, sess_seq, clnt_ip, appname, sql_text from v$sessions where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno())sess_wait_for on trx_sess_wait_for.sess_id = sess_wait_for.sess_id and trx_sess_wait_for.sess_seq = sess_wait_for.sess_seq 78.0 0.0 3.0 7.0 30 0 /DMAgent//*+ enable_monitor(0) /select trx_wait.wait_time, trx_wait.id, trx_wait.wait_for_id, sess_wait.sess_id, sess_wait.clnt_ip, sess_wait.appname, sess_wait.sql_text, sess_wait.state, sess_wait_for.wait_time, sess_wait_for.state, sess_wait_for.sess_id, sess_wait_for.clnt_ip, sess_wait_for.appname, sess_wait_for.sql_text from (select id, wait_for_id, wait_time from v$trxwait where /+ MPP_LOCAL / sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() union select trx_id, wait_trx_id, wait_time from v$dsc_trxwait where ep_seqno=sf_get_self_ep_seqno())trx_wait left join (select id, sess_id, sess_seq from v$trx where /+ MPP_LOCAL / sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno()) trx_sess_wait on trx_wait.id = trx_sess_wait.id left join (select trx_id, sess_id, sess_seq, clnt_ip, appname, sql_text, state from v$sessions where /+ MPP_LOCAL / sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno())sess_wait on trx_sess_wait.sess_id = sess_wait.sess_id and trx_sess_wait.sess_seq = sess_wait.sess_seq left join (select id, sess_id, sess_seq from v$trx where /+ MPP_LOCAL / sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno())trx_sess_wait_for on trx_wait.wait_for_id = trx_sess_wait_for.id left join (select case when state = 'ACTIVE' then bigdatediff(ms, last_recv_time, now) else bigdatediff(ms, last_recv_time, last_send_time) end wait_time, state, trx_id, sess_id, sess_seq, clnt_ip, appname, sql_text from v$sessions where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno())sess_wait_for on trx_sess_wait_for.sess_id = sess_wait_for.sess_id and trx_sess_wait_for.sess_seq = sess_wait_for.sess_seq DEMTEST

V$LOCK

该视图的作用是显示活动的事务锁信息,如阻塞锁地址,事务ID,类型等,在负载分析的事务模块使用到了这个视图进行查询:

image.png

V$LOCK的查询频率

输出的excel表可以看出,DEM查询视图V$LOCK的频率在30分钟内30次,平均每分钟接1次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DMAgent//*+ enable_monitor(0) /select * from v$lock where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() and blocked = 1 31.0 0.0 3.0 4.0 30 0 /DMAgent//*+ enable_monitor(0) /select * from v$lock where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() and blocked = 1 DEMTEST

V$INSTANCE_LOG_HISTORY

用于查询服务器实例运行期间生成的最近 1 万条事件日志。

统计日志的生成时间级别,日志详细信息等。在负载分析的运行日志模块使用到了这个视图:

image.png

V$INSTANCE_LOG_HISTORY的查询频率

输出的excel表可以看出,DEM查询视图V$INSTANCE_LOG_HISTORY的频率在30分钟内29次,平均每分钟接1次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DMAgent//*+ enable_monitor(0) /select level$, log_time, txt from v$instance_log_history where true and /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() and level$ != 'INFO' and log_time is not null and bigdatediff(ms, ?, log_time) > 0 and bigdatediff(ms, ?, log_time) <= 0 144.0 6.0 38.0 45.0 29 0 /参数已替换/ /DMAgent//*+ enable_monitor(0) /select level$, log_time, txt from v$instance_log_history where true and /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() and level$ != 'INFO' and log_time is not null and bigdatediff(ms, '2025-08-13 15:23:29.646000', log_time) > 0 and bigdatediff(ms, '2025-08-13 15:24:29.820000', log_time) <= 0 DEMTEST

V$TABLESPACE

显示表空间信息,但不包括RLOG表信息。在集群环境中,V$TABLESPACE 会汇总所有站点的表空间信息。

在负载分析的表空间模块使用到了这个视图:

image.png

V$TABLESPACE的查询频率

输出的excel表可以看出,DEM查询视图V$TABLESPACE的频率在30分钟内42次,平均每分钟接1.4次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DEM/select page, id, name, type$, status$, max_size, total_size, file_num from sys.v$tablespace where sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() order by id asc; 20.0 0.0 1.0 2.0 42 4 /DEM/select page, id, name, type$, status$, max_size, total_size, file_num from sys.v$tablespace where sf_get_ep_seqno(rowid)=sf_get_self_ep_seqno() order by id asc; DEMTEST

V$RLOG

显示日志的总体信息。通过该视图可以了解系统当前日志事务号 LSN 的情况、归档日志情况、检查点的执行情况等。在负载分析的联机日志模块使用到了这个视图:

image.png

V$RLOG的查询频率

输出的excel表可以看出,DEM查询视图V$RLOG的频率在30分钟内29次,平均每分钟接1次。

image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DMAgent//*+ enable_monitor(0) /select top 1 rlog.ckpt_lsn, rlog.file_lsn, rlog.flush_lsn, rlog.cur_lsn from sys.v$rlog rlog where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() 15.0 0.0 1.0 1.0 29 1 /DMAgent//*+ enable_monitor(0) /select top 1 rlog.ckpt_lsn, rlog.file_lsn, rlog.flush_lsn, rlog.cur_lsn from sys.v$rlog rlog where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() DEMTEST

V$BACKUPSET

该视图主要用来查看备份记录,备份名等。该视图用在负载分析的备份集模块里面(此处由于我尚未备份所以没有备份记录显示):

image.png

V$BACKUPSET的查询频率

输出的excel表可以看出,DEM查询视图V$BACKUPSET的频率在30分钟内29次,平均每分钟接1次。
image.png

SQL语句 最大执行时间 最小执行时间 90%平均执行时间 平均执行时间 执行次数 结果行数 替换参数后SQL 等待时间 执行用户
/DMAgent//+ enable_monitor(0) /SELECT b., h.end_time, h.start_time FROM (select ?, * from v$backupset where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() and backup_time <= from_unixtime(?) and locate(?,backup_path)=1) b left join v$backup_history h on b.backup_id = h.bakset_magic and b.backup_path=h.path 1212.0 56.0 404.0 449.0 29 0 /参数已替换/ /DMAgent//+ enable_monitor(0) /SELECT b., h.end_time, h.start_time FROM (select '/dm8/dmdba/data/DEMTest/bak', * from v$backupset where /+ MPP_LOCAL */ sf_get_ep_seqno(rowid) = sf_get_self_ep_seqno() and backup_time <= from_unixtime(1755069351) and locate('/dm8/dmdba/data/DEMTest/bak',backup_path)=1) b left join v$backup_history h on b.backup_id = h.bakset_magic and b.backup_path=h.path DEMTEST

三.探究DEM查询视图对数据库性能的影响

1.测试背景

为更贴合实际业务场景中数据库的运行状态,本次压测采用 TPCC方案。TPCC 是衡量联机交易处理性能的行业标准,模拟了零售行业的多仓库环境,包含新订单、支付、订单状态查询、发货和库存查询等五种交易类型,能够全面反映数据库在高并发、多事务场景下的性能表现,以此评估 DEM 查询动态视图对数据库性能的影响更具参考价值。

2.测试环境

**系统:**Kylin-Server-10-SP2-x86-Release-Build09-20210524

CPU: 12th Gen Intel(R) Core(TM) i7-12800HX (2.00 GHz)

服务器内存:6GB

服务器硬盘: 40GB

**数据库:**DM8

**仓库数:**统一设置为10个

3.压测指标

压测过程中需要监控的核心指标有:

  • 数据库性能:TPCC 专用指标 tpmC(每分钟完成的新订单交易数)、每秒事务数(TPS)、平均响应时间。

  • 每分钟所有类型事务总量:tpmTOTAL

  • 测试市场

  • 资源消耗:内存使用率

4.压测对比

1.基准压测

首先我们先对没有运行DEM的数据库进行tpcc压测,查看其指标情况。

为了方便起见,tpcc的脚本部署与数据准备工作省略。

下面直接查看tpcc压测结果

image.png

我们可以看到在基准测试不运行DEM的情况下,压测的出来结果如下:

**tpmc(每分钟完成的新订单交易数):**1396.3,

**tpmTOTAL(每分钟的所有类型事务总数):**3134.45

压测时长: 10分3秒(14:18:55--14:28:58)

总事务量: 31467

内存峰值消耗: 87MB

完成基准测试后,我们清楚数据,然后在运行DEM的情况下进行tpcc压测。

2.DEM运行压测

然后我们对运行DEM的数据库进行tpcc压测,查看其指标情况。

为了方便起见,tpcc的脚本部署与数据准备工作省略。

下面时在运行DEM时,压测出的结果

image.png

**tpmc(每分钟完成的新订单交易数):**1210.98,

**tpmTOTAL(每分钟的所有类型事务总数):**2722.75

压测时长: 10分4秒(15:27:22--14:37:26)

总事务量: 27409

内存峰值消耗: 134MB

3.压测结论

指标 运行 DEM 时(图 1) 未运行 DEM 时(图 2) 变化率
tpmC(新订单处理能力,核心指标) 1210.98 1396.3 下降 13.3%
tpmTOTAL(总事务处理能力) 2722.75 3134.45 下降 13.1%
事务计数 27409 31467 下降 13.0%

通过上表,我们可以看出,当运行DEM时,上述三个指标均下降了13%,说明DEM的监控行为显著拖累了数据库的事务处理效率。

并且两者的内存消耗也有着显差距。运行DEM时对资源消耗更大。

原因主要是DEM 通过周期性查询动态视图(如V$SESSIONV$SQLV$LOCK等)获取监控数据,这些查询会与 TPCC 的业务事务 竞争 CPU、内存和磁盘 I/O 资源

DEM 监控本质是 “以资源换可见性” 的过程,需在 监控全面性业务性能 之间找到平衡。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服