注册
简单运维管理
专栏/技术分享/ 文章详情 /

简单运维管理

DM_738629 2026/08/28 110 0 0
摘要

运维监控

实例状态监控

实例状态监控是指对数据库实例资源活动状态进行监控,一旦发现相关风险或资源不足时,应当及时采取相应的解决措施,消除隐患。达梦数据库的实例状态监控主要包含以下内容:

  • 会话监控
  • 线程监控
  • SQL 监控
  • 内存资源监控
  • 表空间监控
  • 集群状态监控
  • 检查点监控
  • 作业运行状态监控
  • 日志监控与分析

会话监控

SQL 方法查询会话数

--查询当前所有会话情况
select sess_id,state,appname,sql_id,create_time from v$sessions;

--结束会话
sp_close_session(sess_id);

image.png

操作系统命令查询会话数

--基于端口为 5234 的会话数查询
lsof -i:5234|grep dmserver|wc -l
netstat -nat|awk '{print $4}'|grep 5234|wc -l

image.png

线程监控

使用桌面窗口连接,方便查看表

cd /home/dmdba/dmdbms/tool
./manager

监控当前系统中活动线程的信息

SELECT * FROM V$THREADS;

image.png

监控当前正在等待的线程信息。

SELECT * FROM V$LATCHES;

image.png

SQL 监控

SQL 监控主要包括慢 SQL 及阻塞、死锁、有事务未提交的表等。

慢 SQL 及阻塞监控

通过以下语句检查当前数据库中包含的慢 SQL 及阻塞语句

SELECT
        DS.SESS_ID "被阻塞的会话ID",
        DS.SQL_TEXT "被阻塞的SQL",
        DS.TRX_ID "被阻塞的事务ID",
        (CASE L.LTYPE WHEN 'OBJECT' THEN '对象锁' WHEN 'TID' THEN '事务锁' END CASE ) "被阻塞的锁类型",
        DS.CREATE_TIME "开始阻塞时间",
        SS.SESS_ID "占用锁的会话ID",
        SS.SQL_TEXT "占用锁的SQL",
        SS.CLNT_IP "占用锁的IP",
        L.TID "占用锁的事务ID"
FROM
        V$LOCK L
LEFT JOIN V$SESSIONS DS
ON
        DS.TRX_ID = L.TRX_ID
LEFT JOIN V$SESSIONS SS
ON
        SS.TRX_ID = L.TID
WHERE
        L.BLOCKED = 1

image.png

上述 SQL 语句中,“占用锁的会话 ID ”表示该会话占用这个对象的锁,且事务一直没有提交。导致“被阻塞的会话 ID ”无法对该对象上锁。

-- 方式一:杀掉占用锁的会话,释放锁。
SP_CLOSE_SESSION ( 占用锁的会话 ID );
-- 方式二:杀掉被阻塞的会话。
SP_CLOSE_SESSION ( 被阻塞的会话 ID );

有事务未提交的表查询

SELECT b.object_name, c.sess_id, a.*
FROM v$lock a, dba_objects b, v$sessions c
WHERE a.table_id = b.object_id AND ltype = 'OBJECT' AND a.trx_id = c.trx_id;

image.png

内存资源监控

内存资源监控主要监控 DM 数据库所占内存情况。DM 数据库使用的内存大致等于 BUFFER + MPOOL,在进行内存资源监控时,一般需关注 v$bufferpoolv$mem_pool 相关信息。

查询内存总量

select
(select sum(n_pages) * page()/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()/1024/1024 from v$bufferpool)+(select sum(total_size)/1024/1024 from v$mem_pool)||'MB' as TOTAL_SIZE
from  dual;

--字段含义
BUFFER_SIZE:系统缓冲区大小,以 M 为单位。推荐值:系统缓冲区大小为可用物理内存的 60%~80%
MEM_POOL:共享内存池大小,以 M 为单位。共享内存池是由 DM 管理的内存
TOTAL_SIZE:BUFFER_SIZE 和 MEM_POOL 的总和

image.png
内存不足常见原因有如下两种情况:

memory_target 设置为 0,导致会话使用的内存未释放,可以考虑修改 memory_target 参数。
会话执行的 sql 消耗大量的内存,可以根据以下 sql 找到最占用内存的 sql,再进行 sql 优化。

SELECT "SESSID", MAX_MEM_USED||'KB',SQL_TXT FROM V$SQL_STAT 
order by MAX_MEM_USED DESC;

image.png
内存增长过快分析

1.查询内存总量,使用上一节所示命令

2.打开 MEMORY_LEAK_CHECK ,开启内存追踪,记录内存申请释放、引用计数信息
alter system set 'MEMORY_LEAK_CHECK'=1 ;

3.查询内存注册信息视图
select  * from V$MEM_REGINFO  ORDER BY  REFNUM  DESC;

4.关注REFNUM字段
内存引用计数,核心判断字段
数值持续很大、持续上涨,代表内存没有被释放,存在内存堆积 / 泄漏嫌疑

image.png

查看缓存信息

SELECT * FROM V$SCP_CACHE;

image.png

查询缓冲区命中率

数据缓冲区是 DMSERVER 在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。

数据缓冲区设定得太小,会导致缓冲页命中率低,磁盘 IO 频繁;将其设定得太大,又会导致操作系统内存本身不够用。

select
      name 缓冲池名称,
      sum(page_size)*sf_get_page_size 缓冲池大小_G,
      sum(rat_hit) /count(*) 命中率
from
      v$bufferpool
group by name;

image.png

表空间监控

查看表空间的使用情况

临时表空间经常过大,说明内存设置过小或存在大量中间结果集存放,需要视情况进行优化。

SELECT Upper(F.TABLESPACE_NAME)         "表空间名",
       D.TOT_GROOTTE_MB                 "表空间大小(M)",
       D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
       To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')
       || '%'                           "使用比",
       F.TOTAL_BYTES                    "空闲空间(M)",
       F.MAX_BYTES                      "最大块(M)"
FROM   (SELECT TABLESPACE_NAME,
               Round(Sum(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES,
               Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES
        FROM   SYS.DBA_FREE_SPACE
        GROUP  BY TABLESPACE_NAME) F,
       (SELECT DD.TABLESPACE_NAME,
               Round(Sum(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MB
        FROM   SYS.DBA_DATA_FILES DD
        GROUP  BY DD.TABLESPACE_NAME) D
WHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER  BY 2 desc;

image.png

查看表空间与数据文件对应关系

SELECT TS.NAME, DF.PATH FROM V$TABLESPACE AS TS, V$DATAFILE AS DF WHERE TS.ID = DF.GROUP_ID;

image.png

日志监控与分析

日志中信息记录分类

  • INFO(正常):用于打印程序应该出现的正常状态信息, 便于追踪定位;
  • WARNING(告警):表明系统出现轻微的不合理,一般不影响运行和使用;
  • ERROR(错误):表明出现了系统错误和异常,无法正常完成目标操作;
  • FATAL(致命):表明发生了严重的错误,会导致数据库宕机,服务停止。

一般在进行数据库日志监控时,主要关注以下内容:

  • WARNING、ERROR 和 FATAL 类信息监控。
  • INFO 类信息中涉及实例重启的信息。

在 Linux 环境中查看相关信息,可参考如下命令:数据库日志监控实现方法:通过 cat 命令进行数据库日志定期检查,过滤日志当中包含 ERROR、WARNING 信息的记录,并输出信息至前台监控显示界面,命令如下

cd $DM_HOME
cd log
ls -ltr *.log
##检查日志中是否有错误信息
cat xxxx.log |grep 'ERROR' 
##检查日志中是否有警告信息
cat xxxx.log |grep 'WARNING'   
##检查数据库是否重启过
cat xxxx.log |grep 'SYSTEM READY '

实例运行日志

实例运行日志记录了数据库服务启动,刷检查点,写归档、刷盘等一系列实例的运行过程,按月生成

cd /home/dmdba/dmdbms/log
cat dm_DMOA_202608.log | grep ‘ERROR’
cat dm_DMOA_202608.log | grep 'WARNING'  
cat dm_DMOA_202608.log | grep 'SYSTEM READY '

image.png
SQL 日志

SQL日志概述

SQL 日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息等。SQL 跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态有一个分析,比如,可以挑出系统现在执行速度较慢的 SQL 语句,进而对其进行优化。

打开 SQL 日志会对系统的性能会有较大影响,一般用于查错和调优的时候才会打开,默认情况下系统是关闭 SQL 跟踪日志的。

1.开启 SQL 日志

-- 创建 SQL 日志存放目录。
su - dmdba
mkdir -p /home/dmdba/dmdbms/log/logcommit

-- 检查 SVR_LOG 参数
select * from v$parameter where name like 'SVR_LOG%';

image.png

修改实例路径下 sqllog.ini 文件如下:设置 sql 日志为异步,按照文件大小进行切换,每个 1024M,20 个文件循环写。如果内存充足(≥32G),参数 BUF_TOTAL_SIZ、BUF_SIZE 和 BUF_KEEP_CNT 建议做如下调整。
  (1)参数 BUF_TOTAL_SIZE 值由 10240 修改为 1024000;

  (2)参数 BUF_SIZE 值由 1024 修改为 10240;

  (3)参数 BUF_KEEP_CNT 值由 6 修改为 20。

image.png

-- 执行调用存储过程生效配置文件,并开启 SQL LOG 日志

SP_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

可在目录下看到生成的sql日志
监控完成后,关闭sql日志功能

image.png

开源性能监控工具 NMON

工具介绍

nmon 是一种在 AIX 与各种 Linux 操作系统上广泛使用的监控与分析工具。相对于其它系统资源监控工具来说,nmon 所记录的信息较为全面,它能在系统运行过程中实时地捕捉系统资源使用情况,输出结果文件,并通过 nmon_analyzer 工具产生数据文件与图形化结果。一般 nmon 监控系统资源包括 cpu 占用率、内存使用情况、磁盘 I/O 速度、传输和读写比率、文件系统的使用率、网络 I/O 速度、传输和读写比率、错误统计率与传输包的大小、消耗资源最多的进程、计算机详细信息和资源等相关信息。

NMON 部署

1.工具获取,下载监控工具nmon,数据分析工具nmon_analyser

2.将 nmon 文件上传至自定义目录下例如 /opt/tool/nom 目录下

mv nmon_x86_64_centos7 nmon
./nmon

-- 命令参数
# c
查看CPU相关信息
# m
查看内存相关信息
# d          
查看磁盘相关信息
# n          
查看网络相关信息
# t

image.png

3.设定定时计划实时监控系统资源

##使用 root 用户执行
crontab -e

##添加以下脚本内容,实时监控系统资源并生成 NMON 日志文件。-s20 表示 20s 采集一次,-c4320 表示一天 24 小时采集 4320 次
0 0 * * * /opt/tool/nmon/nmon -s20 -c4320 -fT -m /opt/tool/nmon/nmon_log > /dev/null 2>&1

##添加以下脚本内容,设定定时删除计划,保留某时间段内的日志,防止空间占满。+365 为保留时间,日志具保存时长,需根据系统实际情况而定
0 0 * * * find /opt/tool/nmon_log  -type f -mtime +365  -name "*.nmon" -exec rm -f {} \;

image.png

4.使用nmon_analyser分析nmon数据

导入待分析数据,生成分析后的结果

image.png

image.png

达梦数据库技术社区:https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服