注册
【与达梦同行】达梦数据库的等待事件
技术分享/ 文章详情 /

【与达梦同行】达梦数据库的等待事件

杨凯同学 2022/12/24 3115 5 1
作为一名oracle DBA 日常运维最关注就是等待事件,
这几天有空就会去分析下达梦的等待事件。
如何分析达梦的等待事件,官方资料基本没有。
网上资料也是太少了,也许分析等待事件对于达梦运维帮助不大。		
不过既然达梦有这个等待事件,一定是有道理的,
只是目前我们在如何采集、分析方面一无所知。所以今天简单的做个测试下。

一、等待事件概念

1.1什么是等待事件

所谓等待事件,是当一个进程连接到数据库之后,进程所经历的种种等待就开始被记录。等待事件主要可以分为两大类,即空闲(idle)等待事件和非空闲(non-idle)等待事件:
◆空闲(idle)等待事件:达梦会话正在等待某种工作,在诊断和优化数据库时,通常无需过多关注这类等待事件。
◆非空闲(non-idle)等待事件:专门针对达梦会话的活动,指数据库任务或应用运行过程中发生的等待,这类等待事件是诊断优化性能问题时必须关注的事件。

在DM8中的等待事件有49个。 
我们可以通过v$event_name 视图来查看等待事件的相关信息。
select * from V$EVENT_NAME
EVENT#	EVENT	WAIT_CLASS#	WAIT_CLASS
0	dbfile read	0	User I/O
1	dbfile multi read	0	User I/O
2	dbfile read wait	0	User I/O
3	dbfile flush wait	0	User I/O
4	dbfile remote read	1	System I/O
5	instance recovery read	1	System I/O
6	dbfile remote write	1	System I/O
7	dbfile discard write	1	System I/O
8	dbfile ckpt write	1	System I/O
9	dbfile extend	1	System I/O
10	shared memory pool busy	2	Concurrency
11	buffer busy wait	2	Concurrency
12	dict cache busy	2	Concurrency
13	plan cache busy	2	Concurrency
14	redo log system busy	2	Concurrency
15	redo log buffer busy	2	Concurrency
16	kernel busy	2	Concurrency
17	table lock busy	2	Concurrency
18	tid lock busy	2	Concurrency
19	parallel bdta pool busy	2	Concurrency
20	iid system busy	2	Concurrency
21	session system busy	2	Concurrency
22	public vpool busy	2	Concurrency
23	pseg queue busy	2	Concurrency
24	pseg stack busy	2	Concurrency
25	bp latch wait	2	Concurrency
26	page s latch wait	2	Concurrency
27	page x latch wait	2	Concurrency
28	rlog flush wait	3	Rlog
29	commit wait	4	Transaction
30	table lock wait	4	Transaction
31	trxid lock wait	4	Transaction
32	dead lock	4	Transaction
33	transaction system busy	2	Concurrency
34	transaction view busy	2	Concurrency
35	purge system busy	2	Concurrency
36	file system busy	2	Concurrency
37	asm system busy	2	Concurrency
38	lbs ctl busy	2	Concurrency
39	gtv system busy	2	Concurrency
40	aud system busy	2	Concurrency
41	dict system busy	2	Concurrency
42	fback system busy	2	Concurrency
43	out of share mem pool	5	Memory
44	out of share coldata pool	5	Memory
45	network send wait	6	Network
46	network recv wait	6	Network
47	preload wait	7	Preload
48	preload IO wait	7	Preload

dbfile read:读用户数据文件;

dbfile multi read:批量读用户数据文件;

dbfile read wait:写用户数据文件;

dbfile remote read:DSC引起的读磁盘;

instance recovery read:recorvery引起的读磁盘;

dbfile remote write:DSC引起的写磁盘;

dbfile discard write:buf不够引起的写磁盘;

dbfile ckpt write:ckpt引起的写磁盘;

dbfile extend:扩库文件引起的写磁盘;

shared memory pool busy:共享内存并发使用冲突;

buffer busy wait:buffer并发使用冲突;

dict cache busy:字典cache并发使用冲突;

plan cache busy:计划cache并发使用冲突;

redo log system busy:redo log系统并发冲突;

redo log buffer busy:redo log缓冲区并发冲突;

kernel busy:kernel并发冲突;

table lock busy:表锁系统并发冲突;

tid lock busy:行锁系统并发冲突;

parallel bdta pool busy:并行bdta pool并发冲突;

iid system busy:iid系统并发冲突;

session system busy:session系统并发冲突;

public vpool busy:公共vpool并发冲突;

pseg queue busy:pseg队列并发冲突;

pseg stack busy:pseg堆栈并发冲突;

page busy wait:数据页并发冲突;

table lock wait:事务间表锁等待发生;

trxid lock wait:事务间行锁等待发生;

dead lock:事务间产生死锁;

transaction system busy:事务系统并发冲突;

transaction view busy:事务可见性视图并发冲突;

purge system busy:purge系统并发冲突;

file system busy:文件系统并发冲突;

asm system busy:ASM系统并发冲突;

out of share mem pool:共享内存池不足;

out of share coldata pool:共享coldata池不足:

network send wait:网络发送等待;

network recv wait:网络接收等待。

1.2 查看DM8等待事件的分类

SELECT   wait_class#,
        wait_class,
       COUNT ( * ) AS "count"
  FROM   v$event_name
GROUP BY   wait_class#, wait_class
ORDER BY   wait_class#;
WAIT_CLASS#	WAIT_CLASS	count
7	Preload	2
6	Network	2
5	Memory	2
4	Transaction	4
3	Rlog	1
2	Concurrency	28  --并发
1	System I/O	6 
0	User I/O	4

1.3 相关的视图

V$SESSION 代表数据库活动的开始,视为起源,连接断开后消失。
V$WAIT_HISTORY  通过该视图可以查询等待事件的具体信息,如等待的线程id,会话id等。可以查看具体等待事件的信息,如果某个事务等待时间过长,则可以查询到具体事务信息以及所在的线程和所牵涉的对象,分析原因进行优化等操作。
V$EVENT_NAME  显示当前系统所支持的等待事件的类型汇总信息。
V$SYSTEM_EVENT  显示自系统启动以来所有等待事件的详细信息。
V$SESSION_EVENT  显示当前会话等待事件的所有信息。
V$SESSION_WAIT_HISTORY  显示会话等待事件的历史信息

二、实践证明

尝试用等待事件定位达梦数据库的性能问题
oracle:Buffer busy waits:等待事件在数据库中存在热块的时候,当多个用户频繁地读取或者修改同样的数据块时,这个等待事件就会产生。
达梦:buffer busy wait:buffer并发使用冲突。

下面我们用实验模模拟oracle:Buffer busy waits等待事件,看看达梦的等待事件对应的是不是buffer busy wait

2.1 实验环境(同时在达梦和oracle数据库操作)

创建表
image.png
模拟多个事务同时访问同一个对象

image.png
image.png

2.2在oracle里查看对应的等待事件

image.png

2.3 在达梦里查看对应的等待事件

image.png

三、总结

通过等待事件定位达梦的系统问题,从理论上可行,但是现实是残酷。因为对于oracle的等待事件有2000多个,达梦的等待事件只有80多个,达梦的等待事件的数量不到1/20,相当来说还是比较简单的。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服