onstat 运维常见统计命令
onstat 命令读取共享内存结构,并提供有关数据库服务器在该命令执行时的统计信息。onstat命令不在共享内存上放置任何锁,因此运行该命令不会影响数据库性能。
1.监控实例状态(onstat -)
onstat -命令显示数据库实例的当前状态,正常情况数据库应处于On-Line模式,如以下输出:
GBase Database Server Version 12.10.FC4G1AEE -- On-Line -- Up 00:11:54 -- 833360 Kbytes
On-Line -- Up 00:00:35 -- 336528 Kbytes
如出现以下输出,则该数据库实例未启动或已关闭,需使用 gserver start 启动
shared memory not initialized for GBASEDBTSERVER 'gbase01'
具体输出格式解释如下:
Version--Mode (Type)--(Checkpnt)--Up Uptime--Sh_mem Kbytes
输出说明:
参数名 | 说明 | 格式 |
---|---|---|
Version | 产品版本 | 字符 |
Mode | 当前数据库运行模式,可能包括以下几种模式,数据库正常对外提供服务应为On-Line模式 Initialization 实例启动过程 Shutting Down 实例关闭过程 Quiescent 静默模式,数据库不可连接 On-Line 多用户模式,数据库正常运行状态模式 Fast Recovery 数据库启动或故障恢复过程 Single-User 管理员单用户模式 | 字符 |
(Type) | 如果数据库为高可用集群,该处显示为主节点(Prim)或辅节点(Sec) ,如果数据库不是高可用集群,此处不显示 | 字符 |
(Checkpnt) | 检查点标志,可能会显示以下两个值 (CKPT REQ) 数据库服务器需要执行检查点 (CKPT INP) 数据库服务器正在执行检查点 | 字符 |
Uptime | 数据库启动以来运行的时间 | 字符 |
Sh_mem | 数据库服务器使用共享内存的大小 | 十进制数字 |
2.监控空间(onstat -d)
onstat -d命令用于检查数据库空间的使用情况,重点需要关注是否存在空间chunk down的情况:
检查是否存在空间down不可用的情况:
gstat -d |grep PD
检查空间使用情况:
gstat -d
要具体统计各空间的详细使用情况,建议使用SMI监控中的相关sql监控。
onstat -d示例输出:
On-Line -- Up 00:04:26 -- 336528 Kbytes
Dbspaces
address number flags fchunk nchunks pgsize flags owner name
44fba028 1 0x70001 1 1 2048 N BA gbasedbt rootdbs
450f1328 2 0x70001 2 1 2048 N BA gbasedbt plogdbs
450f1558 3 0x60001 3 1 2048 N BA gbasedbt llogdbs
450f1788 4 0x42001 4 1 16384 N TBA gbasedbt tempdbs01
450f19b8 5 0x68001 5 1 2048 N SBA gbasedbt sbspace01
450f1be8 6 0x60001 6 1 16384 N BA gbasedbt datadbs01
6 active, 2047 maximum
Chunks
address chunk/dbs offset size free bpages flags pathname
44fba258 1 1 0 350000 332935 PO-B-- /data/gbase/rootchk
460c0028 2 2 0 256000 5947 PO-B-- /data/gbase/plogchk
460c1028 3 3 0 256000 5947 PO-B-- /data/gbase/llogchk
460c2028 4 4 0 6400 6347 PO-B-- /data/gbase/tempchk01
46109028 5 5 0 51200 47678 47678 POSB-- /data/gbase/sbspace01
Metadata 3469 2581 3469
4610a028 6 6 0 12800 12205 PO-B-- /data/gbase/datachk01
6 active, 32766 maximum
NOTE: The values in the "size" and "free" columns for DBspace chunks are
displayed in terms of "pgsize" of the DBspace to which they belong.
Expanded chunk capacity mode: always
以下为onstat -d输出解释:
第一部分输出为空间信息:
列名 | 说明 | 格式 |
---|---|---|
address | 共享内存中存储的空间地址 | 十进制数字 |
number | 空间唯一标志号 | 十进制数字 |
flags | 0x0001不允许镜像且数据库空间上未镜像的 0x0002允许镜像且数据库空间上未镜像的 0x0004允许镜像且数据库空间上镜像的 0x0008 新镜像的 0x0010 Blob空间 0x0200 正在恢复空间 0x0400 空间已完全恢复 0x0800 正在恢复逻辑日志 0x2000 临时空间 0x4000 正在备份的Blob空间 0x8000 智能大对象空间 0x10000 物理或逻辑日志已更改 0x20000 数据库空间或块表已更改 0x040000 包含大块的Blob空间 0x080000 有重命名Chunk的空间 0x00100000 SDS备机上SDS_TEMPDBS参数指定的SDS专用的临时空间 0x00200000 SDS备机上参数DBSPACETEMP指定的临时空间 0x00400000 执行了外部备份的数据库空间 0x00800000 空间正在进行碎片整理 0x01000000 物理日志空间 | 十六进制数字 |
fchunk | 数据库空间中的主chunk | 十进制数字 |
nchunks | 数据库空间的chunk数量 | 十进制数字 |
pagesize | 数据库空间的页大小 | 十进制数字 |
flags | Position 1: M 镜像 N 未镜像 Position 2: X 新镜像 D Down,不可用chunk P 物理恢复完成,等待逻辑恢复 L 正在逻辑恢复 R 正在恢复 Position 3: B BLOB空间 P 物理日志空间 S 智能大对象空间 T 临时空间 U 临时智能大对象空间 W SDS主节点的临时空间,只在SDS备节点显示 Position 4: B 空间可包含大于2G的chunk Position 5: A 空间自动扩展 | 字符 |
owner | 空间属主 | 字符 |
name | 空间名 | 字符 |
3.监控逻辑日志(onstat -l)
onstat -l命令用于监控物理日志及逻辑日志的使用情况,需关注已使用的逻辑日志是否及时备份。
如以下命令检查是否存在未备份的逻辑日志:
gstat -l |grep "U--" |grep -v C
如没有输出,则所有逻辑日志已正常备份,如有输出,表示存在未及时备份的逻辑日志,需要及时备份,避免因逻辑日志未及时备份导致数据库挂起。
以下为onstat -l输出的flags列标志说明:
标志 | 说明 | 格式 |
---|---|---|
A------ | 日志文件已添加且可用,但尚未使用 | 字符 |
D------ | 如果您删除具有状态U-B的日志文件,那么它会标记为已删除。该日志文件被删除,其空间得以释放,可在您为所有存储空间进行0级备份时重新使用。 | 字符 |
F------ | 日志文件是空闲的且可供使用。逻辑日志文件在备份后得以释放,逻辑日志文件中的所有事务均关闭,存储在该文件中的最旧更新将会清仓到磁盘 | 字符 |
U | 日志文件已使用但尚未备份。 | 字符 |
U-B---- | 日志文件已备份但仍是恢复所需。(当恢复不再需要该日志文件时就释放) | 字符 |
U—C | 数据库服务器当前正在填充日志文件。 | 字符 |
U—C-L | 当前日志文件包含最近检查点记录。 | 字符 |
4.监控运行信息(onstat -p)
onstat -p命令用于监控数据库运行以来数据库各指标的统计情况。
onstat -p
如以下示例输出:
On-Line -- Up 1 days 15:40:15 -- 857260 Kbytes
Profile
dskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached
4991 9808 1011086 99.52 14709 18053 93931 84.34
isamtot open start read write rewrite delete commit rollbk
1082785 116872 123376 369966 17752 14036 2693 10794 0
gp_read gp_write gp_rewrt gp_del gp_alloc gp_free gp_curs
0 0 0 0 0 0 0
ovlock ovuserthread ovbuff usercpu syscpu numckpts flushes
0 0 0 11.78 18.31 26 52
bufwaits lokwaits lockreqs deadlks dltouts ckpwaits compress seqscans
114 0 770920 0 0 0 2074 2911
ixda-RA idx-RA da-RA logrec-RA RA-pgsused lchwaits
0 1534 1388 2 1383 2
gstat –p命令输出的第一部分描述读取和写入。
- %cached(bufreads)
%cached值衡量从缓冲区的读取数与从磁盘的读取数之比,即读取共享内存相对于磁盘读取之比。其值通过公式“100 *(bufreads- dskreads)/ bufreads”获取。若此值偏低表示缓冲区配置太少,正常值应该大于95%。
- %cached(bufwrits)
%cached值衡量写入缓冲区的数量与写入磁盘的数量之比,即共享内存相对于磁盘写入百分比。此值一般应大于80%,然而,低百分比值缓存的写入可能只是表明,没有多少实际写入发生。LRU和CKPTINVL影响本写入百分比值。
gstat –p命令输出的第二部分显示已执行不同类 ISAM (索引顺序访问方法,Indexed Sequential Access Methed)调用的次数的制表。这些调用发生在操作的最底层,并且不必与 SQL 语句一对一对应执行。单个查询可能产生多个 ISAM 调用。这些统计信息通过数据库服务器产生并且不能用来监视单个数据库上的活动,除非只有一个数据库是活动的或只存在一个数据库。
- isamtot
显示调用ISAM的总数,表明服务器如何的繁忙。
- open
ISAM打开tblspace的次数。
- start
ISAM增加索引中的指数。
- read
ISAM读取调用的数量(select)。
- write
ISAM写入调用的数量(insert)。
- rewrite
ISAM更新调用的数量(update)。
- delete
ISAM删除调用的数量(delete)。
- commit & rollbk
回滚和提交之间的比例应小于1%,否则需要检查应用程序,看看为什么有很多的回滚。
gstat -p 命令输出的第三部分显示有关一般页的信息。一般页管理提供一个 API 让 GBase 8s 来管理数据库服务器缓冲池中的非标准页。以下描述了 gstat -p 命令输出中的 Generic Page Manager 。
gstat -p 命令输出的第四部分显示了请求资源时没有可用资源的次数。
- ovlock
超过locks次数的值。
- ovuserthread
当userthreads最大数量超过相对于nettype设置增量。
- ovbuff
数据库服务器无法找到可用共享内存缓冲区的次数。从缓冲池(buffer pool)中请求缓冲区(buffer)的次数,但是没有空的缓冲区。
以上信息显示被要求提供资源时,没资源可供使用的次数。
- usercpu & syscpu
所有用户线程使用的用户CPU和系统CPU时间,(以秒为单位)。这两条目每15秒更新一次。用户的时间应始终明显高于系统时间,如果没有,需检查操作系统。
- numckpts
从开机时间起累积的检查点数目。如果高得离谱,通过使用gstat -g ckp打印历史记录和配置建议信息,寻找检查点发生的原因。
- flushes
缓冲池已被刷新到磁盘的次数。次数并非均是由检查点来驱动的。
gstat -p 命令输出的第五部分包含杂项信息。
- bufwaits
每次用户线程必须等待缓冲区时增加,即用户线程数等待缓冲区的次数 (从缓冲池中)。如果过多或页面被刷新到磁盘过于频繁(LRU_MIN设置为0),可以表明某个单一的页面被修改多次。
依赖(Dependency):RA_PAGES,RA_THRESHOLD,LRUS,在BUFFERPOOL缓冲区。
效率(Efficiency):Bufwaits比率=(bufwaits/(bufwrits+ pagreads))*100%。
- lokwaits & lockreqs
lokwaits是每次用户线程必须等待锁时增加, lockreqs是每次请求锁时增加。锁请求(lock request)的次数用于锁定表/页/行。如果之间lokwaits/ lockreqs比例> 1%,那么应用程序可能单线程;若lokwaits值大需检查隔离级别。
- deadlks
每次检测到潜在死锁并阻止时增加。这个会显示遇到潜在的死锁的一些情况,如果> 10,需要审查应用程序。
- dltouts
每次用户线程等待锁时已超过分布式死锁超时时增加。此量增加是当分布式死锁(distributed lock)超时(time out) 标准已经达到,而用户线程正在等待锁。
- ckpwaits
Checkpoint 等待数。一个线程使检查点必须等待发生的次数,然后再继续。如果userthread中的一个关键部分中间(critical section),检查点是不能发生。
- compress
每次压缩数据页时增加。递增时,DELETE的动作使数据页中发生行数减少而某一数据页被压缩。压缩实际上是在页面上重新定位其余的行,这样使其余的行连续。
- seqscans
对每个顺序扫描增加,即对已发生的顺序扫描的数量。如果seqscans和isamtot之间比大于1%,请检查索引的使用。SeqScanRatio=(seqscans/ isamtot)*100.00。
gstat -p 命令输出的最后一部分关于预读页和预读阈值等信息。
- ixda-RA
索引页到数据页的预先读取计数。
- idx-RA
遍历索引页的预先读取计数。
- da-RA
仅数据路径扫描的计数。
- logrec-RA
数据库服务器预先读取的日志记录。
- RA-pgsused
数据库服务器预先读取所使用的页数。
有需要时从磁盘扫描多个连续页面,预读(Read aheads)让系统执行更高效的I/O。若预计页太多,可能读进了不需要的数据页,而占去太多缓冲区。此时高速缓冲区等待(bufwaits)也可能表明预计页和预计阈值之间的差异太小。
- lchwaits
存储线程需要等待共享存储锁存器的次数。大的锁存器等待数通常是由大量处理活动引起,数据库服务器正在此活动中记录大多数事务。
递增时用户线程必须等待获取共享内存资源(闩锁),大值表示工作量繁重的事务。
5.监控日志(onstat -m)
查看online日志的最新信息。在输出信息中,也包含了online日志的路径信息,可以根据该日志路径,查看online日志的完整内容。
onstat -m输出数据库日志文件路径及最后20行日志,需要重点关注日志中是否出现assert、err、fail关键字。
如以下命令检查日志文件最后一万行是否存在错误:
gstat -c MSGPATH |awk '{print "tail -10000 " $1}' |sh |egrep -i 'assert|err|fail'
6.监控配置参数(onstat -c)
onstat -c输出数据库参数配置文件 $GBASEDBTDIR/etc/ONCONFIG。
如以下命令检查数据库配置参数LTAPEDEV:
gstat -c LTAPEDEV
7.监控实例监听(onstat -g ntt)
onstat -g ntt输出当前实例监听IP端口及session连接信息。
onstat -g ntt示例输出:
On-Line -- Up 00:31:12 -- 336528 Kbytes
global network information:
#netscb connects read write q-free q-limits q-exceed alloc/max
2/ 2 0 0 0 0/ 0 135/ 10 0/ 0 0/ -1
Individual thread network information (times):
netscb thread name sid open read write address
45a2fb90 soctcplst 3 15:06:39 192.168.249.130|9088|soctcp
45a2bbe0 soctcppoll 2 15:06:39
输出说明:
以soctcp结尾的行,显示当前实例的监听IP及端口,以上输出表示监听IP为192.168.249.130,端口为9088,如无此行输出,则数据库实例未正常启动监听。
8.监控备份情况(onstat -g arc)
onstat -g arc检查数据库备份情况,根据输出的备份信息检查数据库是否及时备份。
onstat -g arc示例输出:
On-Line -- Up 00:17:38 -- 833360 Kbytes
num DBSpace Q Size Q Len Buffer partnum size scanner
Dbspaces - Archive Status
name number level date log log-position
rootdbs 1 0 07/28/2020.10:04 7 0x25ed018
1 07/27/2020.18:00 7 0x7c1018
2 07/28/2020.06:00 7 0x180e018
plogdbs 2 0 07/28/2020.10:04 7 0x25ed018
1 07/27/2020.18:00 7 0x7c1018
2 07/28/2020.06:00 7 0x180e018
llogdbs 3 0 07/28/2020.10:04 7 0x25ed018
1 07/27/2020.18:00 7 0x7c1018
2 07/28/2020.06:00 7 0x180e018
sbspace01 5 0 07/28/2020.10:04 7 0x25ed018
datadbs01 6 0 07/28/2020.10:04 7 0x25ed018
onstat -g arc输出解释:
列名 | 说明 | 格式 |
---|---|---|
name | 空间名称 | 字符 |
number | 空间编号 | 十进制数字 |
level | 备份的级别,可能值为0、1、2 | 十进制数字 |
date | 备份时间 | 字符 |
log | 记录备份的逻辑日志 | 十进制数字 |
log-position | 记录备份的逻辑日志位置 | 十六进制数字 |
9.监控正在运行的sql(onstat -g sql)
onstat -g sql检查数据库正在运行的sql,要检查某个session正在运行的sql,可使用onstat -g sql 检查某个会话正在运行的sql语句。
onstat -g sql示例输出:
On-Line -- Up 00:26:18 -- 833360 Kbytes
Sess SQL Current Iso Lock SQL ISAM F.E.
Id Stmt type Database Lvl Mode ERR ERR Vers Explain
26 sysadmin DR Wait 5 0 0 - Off
25 sysadmin DR Wait 5 0 0 - Off
24 sysadmin DR Wait 5 0 0 - Off
23 sysadmin CR Not Wait 0 0 - Off
输出解释:
列名 | 说明 | 格式 |
---|---|---|
Sess ID | session ID | 十进制数字 |
SQL Stmt type | 当前执行的sql类型,可能为select、update、delete等 | 字符 |
Current Database | 当前连接的数据库 | 字符 |
Iso Lvl | 会话使用的隔离级别 DR Dirty Read CR Committed Read CS Cursor Stability RR Repeatable Read LC Committed Read Last Committed | 字符 |
Lock Mode | 锁等待时间 | 字符 |
SQL ERR | 出错的错误号 | 十进制数字 |
ISAM ERR | 出错的ISAM号 | 十进制数字 |
F.E. Vers | sqli协议版本 | 字符 |
Explain | 是否打开执行计划,可能为on、off | 字符 |
10.监控所有实例配置(onstat -g dis)
onstat -g dis检查本台服务器上配置的所有数据库实例,显示实例的配置文件及运行状况。
onstat -g dis示例输出:
On-Line -- Up 00:00:54 -- 336528 Kbytes
There are 1 servers found
Server : gbase01
Server Number : 1
Server Type : IDS
Server Status : Up
Server Version: GBase Database Server Version 12.10.FC4G1TL
Shared Memory : 0x44000000
GBASEDBTDIR : /opt/gbase
ONCONFIG : /opt/gbase/etc/onconfig.gbase01
SQLHOSTS : /opt/gbase/etc/sqlhosts.gbase01
Host : node01
11.监控服务器配置(onstat -g osi)
onstat -g osi检查本台服务器的操作系统资源配置情况。
onstat -g osi示例输出:
On-Line -- Up 01:15:50 -- 336528 Kbytes
Machine Configuration....
OS Name Linux
OS Release 3.10.0-957.el7.x86_64
OS Node Name node01
OS Version #1 SMP Thu Nov 8 23:39:32 UTC 2018
OS Machine x86_64
Number of processors 2
Number of online processors 2
System memory page size 4096 bytes
System memory 3771 MB
System free memory 3262 MB
Number of open files per process 1024
shmmax 9223372036854775807
shmmin 1
shmids 4096
shmNumSegs 9223372036854775807
semmap << UnSupported >>
semids 128
semnum 32000
semundo << UnSupported >>
semNumPerID 250
semops 32
semUndoPerProc << UnSupported >>
semUndoSize 20
semMaxValue 32767
12.监控实例进程(onstat -g glo)
数据库的一个VP在操作系统中是一个oninit进程,onstat -g glo输出当前实例的所有VP信息,可通过pid列与操作系统进程号对应,在多实例环境下,可检查哪些进程为当前实例的进程,如果需要kill进程,可有效避免误杀了别的实例的oninit进程。
onstat -g glo示例输出:
GBase Database Server Version 12.10.FC4G1AEE -- On-Line -- Up 00:26:56 -- 833360 Kbytes
MT global info:
sessions threads vps lngspins time
0 40 19 1 1616
sched calls thread switches yield 0 yield n yield forever
total: 93435 62497 31867 24025 14324
per sec: 48 46 2 43 0
Virtual processor summary:
class vps usercpu syscpu total
cpu 1 2.08 1.02 3.10
aio 12 0.09 3.12 3.21
lio 1 0.01 0.10 0.11
pio 1 0.01 0.03 0.04
adm 1 0.04 0.09 0.13
soc 1 0.43 0.55 0.98
msc 1 0.00 0.00 0.00
fifo 1 0.00 0.01 0.01
total 19 2.66 4.92 7.58
Individual virtual processors:
vp pid class usercpu syscpu total Thread Eff
1 19858 cpu 2.08 1.02 3.10 14.60 21%
2 19861 adm 0.04 0.09 0.13 0.00 0%
3 19862 lio 0.01 0.10 0.11 0.85 12%
4 19864 pio 0.01 0.03 0.04 0.08 50%
5 19866 aio 0.06 1.60 1.66 17.54 9%
6 19869 msc 0.00 0.00 0.00 0.01 0%
7 19872 fifo 0.00 0.01 0.01 0.01 100%
8 19874 soc 0.43 0.55 0.98 NA NA
9 19875 aio 0.02 1.30 1.32 15.48 8%
10 19876 aio 0.00 0.05 0.05 0.54 9%
11 19878 aio 0.00 0.01 0.01 0.03 34%
12 19879 aio 0.00 0.02 0.02 0.03 70%
13 19880 aio 0.01 0.03 0.04 0.04 100%
14 19881 aio 0.00 0.01 0.01 0.01 100%
15 19882 aio 0.00 0.01 0.01 0.01 100%
16 19884 aio 0.00 0.02 0.02 0.02 100%
17 19886 aio 0.00 0.02 0.02 0.02 100%
18 19887 aio 0.00 0.02 0.02 0.02 100%
19 19889 aio 0.00 0.03 0.03 0.03 100%
tot 2.66 4.92 7.58
13.监控实例内存(onstat -g seg)
onstat -g seg输出当前实例的所有共享内存段的信息。
onstat -g seg示例输出:
GBase Database Server Version 12.10.FC4G1AEE -- On-Line -- Up 00:27:13 -- 833360 Kbytes
Segment Summary:
id key addr size ovhd class blkused blkfree
589824 52564801 44000000 14401536 601928 R 3516 0
622593 52564802 44dbc000 393216000 4609704 V 80338 15662
655362 52564803 5c4bc000 113287168 1 B 27658 0
688131 52564804 630c6000 332455936 1 B 81166 0
Total: - - 853360640 - - 192678 15662
(* segment locked in memory)
No reserve memory is allocated
输出说明:
列名 | 说明 | 格式 |
---|---|---|
id | 共享内存段在系统中的id号,与操作系统命令ipcs -m的输出的shmid对应 | 十进制 |
key | 通过SERVERNUM计算出来的内存段键值 | 十进制 |
addr | 内存段在内存中的地址 | 十六进制 |
size | 内存段大小,单位为字节 | 十进制 |
ovhd | 跟踪该内存段的页头大小 | 十进制 |
class | 内存段的类型,包括以下类型: R 常驻段 V 虚拟段 B 缓冲池 M 消息段 | 字符 |
blkused | 已用blk数,blk在linux上为4k | Dec |
blkfree | 未使用blk数,blk在linux上为4k | Dec |
14.监控队列情况(onstat -g rea)
onstat -g rea检查数据库队列情况,正常情况如数据库服务器配置能满足当前业务压力需求,不会出现队列。
onstat -g rea示例输出:
On-Line -- Up 00:25:42 -- 833360 Kbytes
Ready threads:
tid tcb rstcb prty status vp-class name
类似以上输出表示数据库没有等待队列,数据库运行无压力。