注册
DM数据库运维监控常用基础命令
培训园地/ 文章详情 /

DM数据库运维监控常用基础命令

神经蛙 2023/08/16 991 1 0

DM数据库运维监控常用基础命令

本文主要内容为Linux操作系统层面,对正在运行的数据库实例和所在服务器的一些基础监控命令
本文不涉及高级运维监控工具的使用
实际上高级工具大部分功能正是基于这些基础命令实现的

熟练掌握基础命令的好处:

  • 适用性广,在没有安装/不可用高级工具的环境下仍能进行监控
  • 可以根据实际情况,选择性监控最关注的几项指标
  • 有助于理解操作系统和数据库较底层的原理

学习掌握这些基础命令并不是要排斥使用高级运维监控工具,而是根据情况综合使用相辅相成,达到运维好整个系统的目的
有很多命令之前已经掌握,本文主要起到一个系统性整理归纳,供自己查漏补缺。如果能对其他同行有所帮助,也算是做成了一件小事

监控是DBA的主要工作内容之一
根据监控对象可以分为对操作系统资源的监控和对数据库实例的监控

1. 操作系统资源监控

主要内容:
CPU、内存、磁盘、网络、I/O

三大硬件简介
CPU:中央处理器,计算机的核心,作用是运算和控制
内存:内存储器,存取速度较快(相比于CPU cache还是很慢),断电数据丢失
磁盘:属于外存储器,存取速度较慢(即使SSD比传统的HDD快了很多,但相比于内存还是很慢),断电数据仍保存

1.1. top

top查看实时CPU、内存、进程等

使用样例

[root@host ~]# top top - 20:47:22 up 33 min, 2 users, load average: 0.00, 0.01, 0.07 Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1882048 total, 746216 free, 426412 used, 709420 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 1289700 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 128144 6384 3772 S 0.0 0.3 0:01.76 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd ...

输出内容简介

top - 20:47:22 当前系统时间 up 33 min 已启动时间, 2 users 当前登录用户数, load average 系统平均负载: 0.00 近1分钟, 0.01 近5分钟, 0.07 近15分钟 Tasks 进程: 95 total 总数, 1 running 正在运行, 94 sleeping 睡眠, 0 stopped 停止, 0 zombie 僵尸 %Cpu(s) CPU状态百分比: 0.0 us user用户(未改变过nice值), 0.0 sy system系统内核, 0.0 ni nice用户(改变过nice值),100.0 id idle空闲, 0.0 wa IO-wait等待输入输出, 0.0 hi hardware interrupts硬中断, 0.0 si software interrupts软中断, 0.0 st stolen虚拟机被hypervisor偷取 KiB Mem 物理内存: 1882048 total 总量, 746216 free 空闲, 426412 used 使用, 709420 buff/cache 缓冲/缓存 KiB Swap 交换区: 2097148 total 总量, 2097148 free 空闲, 0 used 使用. 1289700 avail Mem 可用物理内存 KiB = kibibyte = 1024 bytes MiB = mebibyte = 1024 KiB = 1,048,576 bytes GiB = gibibyte = 1024 MiB = 1,073,741,824 bytes TiB = tebibyte = 1024 GiB = 1,099,511,627,776 bytes PiB = pebibyte = 1024 TiB = 1,125,899,906,842,624 bytes EiB = exbibyte = 1024 PiB = 1,152,921,504,606,846,976 bytes PID 进程号 USER 用户 PR 进程优先级 越小越高 NI nice值 负优先级高 VIRT 虚拟内存 RES 物理内存 SHR 共享内存 S 进程状态 %CPU CPU使用率 %MEM 内存使用率 TIME+ CPU时间 COMMAND 命令 S 进程状态说明 D = uninterruptible sleep R = running S = sleeping T = stopped by job control signal t = stopped by debugger during trace Z = zombie
1.2. free

free查看内存使用情况

使用样例

[root@host ~]# free total used free shared buff/cache available Mem: 1882048 713040 898304 8740 270704 1020744 Swap: 2097148 0 2097148

输出内容简介

Mem 物理内存 Swap 交换区 total 总数 used 已使用 free 空闲 shared 共享 buff/cache 缓冲/缓存 available 可用

有时会有一种情况
free输出 Mem free 为0,但 available 还有余量
之前版本的free没有 available 项,是在 Mem 和 Swap 之间还有一行 -/+ buffers/cache ,此行的 free 还有余量
实际上是操作系统OS将空闲的内存空间作为缓冲/缓存使用了

  • 对于操作系统 这部分内存确实已被使用
  • 对于应用程序 这部分内存可以使用,需要时OS回收缓冲/缓存再分配给应用程序

这种情况并不是可用内存已耗尽,无需过于担心,可以简单理为只需解关注 available 项,或者 -/+ buffers/cache 行的 free 项
需要注意的是,回收buff/cache还是需要消耗资源,此部分内存不完全等同于空闲空间,频繁或大量进行回收还是可能会引起性能问题

显示单位参数

OPTIONS -b, --bytes Display the amount of memory in bytes. -k, --kilo Display the amount of memory in kilobytes. This is the default. -m, --mega Display the amount of memory in megabytes. -g, --giga Display the amount of memory in gigabytes. --tera Display the amount of memory in terabytes. --peta Display the amount of memory in petabytes. -h, --human Show all output fields automatically scaled to shortest three digit unit and display the units of print out. Following units are used. B = bytes K = kilos M = megas G = gigas T = teras P = petas If unit is missing, and you have exabyte of RAM or swap, the number is in terabytes and columns might not be aligned with header.
1.3. df

df查看磁盘和文件系统,常用-h参数df -h

使用样例

[root@host ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 908M 0 908M 0% /dev tmpfs 919M 0 919M 0% /dev/shm tmpfs 919M 8.6M 911M 1% /run tmpfs 919M 0 919M 0% /sys/fs/cgroup /dev/mapper/centos-root 27G 3.7G 24G 14% / /dev/sr0 4.5G 4.5G 0 100% /mnt/centos /dev/sda1 1014M 152M 863M 15% /boot tmpfs 184M 0 184M 0% /run/user/0

输出内容简介

Filesystem 文件系统 Size 大小 Used 已使用 Avail 可用 Use% 使用率 Mounted on 挂载点

在生产环境上,磁盘空间写满会造成严重事故,是非常重要的监控项
一般建议数据、归档、备份分别存放在不同的磁盘上,并且都不在根目录挂载点下

1.4. iostat

iostat查看设备I/O统计信息
iostatsysstat工具包中,安装为yum -y install sysstat
使用样例

[root@host ~]# iostat -xm Linux 3.10.0-1160.71.1.el7.x86_64 (dmtest) MM/DD/2023 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.04 0.00 0.09 0.09 0.00 99.78 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.04 0.80 1.31 0.03 0.01 43.45 0.00 1.28 1.08 1.41 0.94 0.20 dm-0 0.00 0.00 0.55 1.35 0.03 0.01 44.36 0.00 1.45 1.34 1.50 0.99 0.19 dm-1 0.00 0.00 0.01 0.00 0.00 0.00 50.09 0.00 0.53 0.53 0.00 0.34 0.00

输出内容简介

avg-cpu 参考top中信息 Device rrqm/s 每秒合并的读操作次数 wrqm/s 每秒合并的写操作次数 r/s 每秒读次数 w/s 每秒写次数 rMB/s 每秒读数据量MB wMB/s 每秒写数据量MB avgrq-sz 平均扇区大小 avgqu-sz 平均IO队列长度,越小越好 await IO请求平均处理时间ms r_await 读操作平均时间ms w_await 写操作平均时间ms svctm 平均设备操作时间 %util 统计时间内IO处理时间占比

磁盘性能指标

  • IOPS
    r/s + w/s 每秒IO次数
    主要体现随机读写性能
  • 吞吐量
    rMB/s + wMB/s (或其他单位)
    主要体现连续读写性能
    简单分析
  • %iowait 过高,瓶颈在磁盘I/O
  • %idle 持续低于10%,瓶颈在CPU
2. 数据库实例监控

记录了一些常用的数据库管理 SQL
相关 SQL 语句在命令行 disql 或图形界面 DM管理工具 中执行

2.1. 会话
--查询当前所有会话数 SELECT COUNT(*) FROM V$SESSIONS; --查看当前数据库中活动会话 SELECT COUNT(*) FROM V$SESSIONS WHERE STATE='ACTIVE'; --查看当前非活动会话 SELECT COUNT(*) FROM V$SESSIONS WHERE STATE='IDLE'; --结束会话 SP_CLOSE_SESSION(${SESSION_ID});
#基于端口为 5236 的会话数查询 [root@host ~]# lsof -i:5236|grep dmserver|wc -l [root@host ~]# netstat -nat|awk '{print $4}'|grep 5236|wc -l

查看当前活动会话时,若当前活动会话连接数量太大,则说明数据库当前可能存在以下异常情况:

  • 当前业务繁忙,业务量太大;
  • 当前系统中存在慢 SQL;
  • 应用的重连机制存在缺陷。

查看当前非活动会话时,若当前非活动会话连接数量太大,说明数据库可能存在以下情况:

  • 系统当前处于会话空闲期;
  • 连接池会话上线设置过高;
  • 应用释放连接机制存在异常。
2.2. 线程
--监控当前系统中活动线程的信息 SELECT * FROM V$THREADS; --监控当前正在等待的线程信息 SELECT * FROM V$LATCHES;
2.3. 锁
--慢 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; --死锁历史事务信息 SELECT DH.TRX_ID , SH.SESS_ID, WM_CONCAT(TOP_SQL_TEXT) FROM V$DEADLOCK_HISTORY DH, V$SQL_HISTORY SH WHERE DH.TRX_ID =SH.TRX_ID AND DH.SESS_ID=SH.SESS_ID GROUP BY DH.TRX_ID, SH.SESS_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;
2.4. 内存
--内存总量 SELECT (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; --最占用内存的SQL SELECT "SESSID", MAX_MEM_USED||'KB',SQL_TXT FROM V$SQL_STAT ORDER BY MAX_MEM_USED DESC; --内存池使用信息 SELECT NAME, --内存池名称 IS_SHARED, --是否是共享的 IS_OVERFLOW, --是否用到了备份池 ORG_SIZE/1024.0/1024.0, --内存池初始大小 TOTAL_SIZE/1024.0/1024.0, --内存池总大小(包括扩展的) RESERVED_SIZE/1024.0/1024.0, --当前已分配大小(包括扩展的) DATA_SIZE/1024.0/1024.0, --实际有效字节 EXTEND_SIZE, --每次扩展多少 TARGET_SIZE, --目标大小 N_EXTEND_NORMAL , --TARGET范围内累计扩展次数 N_EXTEND_EXCLUSIVE --超过TARGET累计扩展次数 FROM V$MEM_POOL ORDER BY TOTAL_SIZE DESC; --总体内存使用情况 SELECT NAME ,STAT_VAL/1024.0/1024.0 FROM V$SYSSTAT WHERE CLASSID=11; --单个会话内存使用情况 SELECT A.CREATOR , B.SQL_TEXT , SUM(A.TOTAL_SIZE)/1024.0/1024.0 TOTAL_M, --当前总量(包括扩展) SUM(A.DATA_SIZE) /1024.0/1024.0 DATA_SIZE_M --实际使用量 FROM V$MEM_POOL A, V$SESSIONS B WHERE A.CREATOR = B.THRD_ID GROUP BY A.CREATOR, B.SQL_TEXT ORDER BY TOTAL_M DESC; --缓冲区命中率 SELECT NAME 缓冲池名称, SUM(PAGE_SIZE)*SF_GET_PAGE_SIZE 缓冲池大小_G, SUM(RAT_HIT) /COUNT(*) 命中率 FROM V$BUFFERPOOL GROUP BY NAME;
2.5. 表空间
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; --表空间与数据文件对应关系 SELECT TS.NAME, DF.PATH FROM V$TABLESPACE AS TS, V$DATAFILE AS DF WHERE TS.ID = DF.GROUP_ID; --UNDO/ROLL表空间 SELECT * FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='ROLL'; --设置UNDO/ROLL表空间 ALTER TABLESPACE "ROLL" DATAFILE 'ROLL.DBF' AUTOEXTEND ON MAXSIZE 512000; --已使用ROLL表空间 SELECT A.TABLESPACE_NAME SPACE_NAME , TOTAL /1024/1024/1024 "总大小(G)" , FREE /1024/1024/1024 "可使用(G)" , (TOTAL -FREE) /1024/1024/1024 "已使用(G)", ROUND((TOTAL -FREE)/TOTAL, 4)*100 "使用率" FROM ( SELECT TABLESPACE_NAME, SUM(BYTES) FREE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ) A, ( SELECT TABLESPACE_NAME, SUM(BYTES) TOTAL FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME ) B WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME ORDER BY "使用率" DESC; --查看待 PURGE 的事务 SELECT * FROM V$PURGE; --REDO SELECT * FROM V$RLOGFILE; --归档文件是否在持续生成 SELECT * FROM V$ARCHIVED_LOG ORDER BY FIRST_CHANGE# DESC;

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服