Oracle12c新特性大全 IO资源隔离

发布于:2023-01-17 ⋅ 阅读:(451) ⋅ 点赞:(0)

       12cR2中,引入了两个参数MAX_IOPS和MAX_MBPS来限制PDB的物理IO。这两个参数只作用于PDB,不对CDB和非多租户环境生效。另外,这两个参数不限制redo log的写入(LGWR进程)和buffer cache脏块写入磁盘(DBWR进程)。

    IO对数据库性能至关重要。如果某个PDB产生了大量的IO,那可能导致CDB中的其它PDB也受影响。MAX_IOPS参数限制每秒IO操作次数,MAX_MBPS参数限制每秒IO吞吐,如果这两个参数同时在pdb中设置,都会生效起作用。如果在CDB$ROOT中设置这两个值,那么当前CDB中每个PDB都采取此作为默认值。

    默认情况下,这两个参数都为0。如果在PDB中这两个参数为0,CDB$ROOT中也为0,那对于PDB来讲,没有IO限制。

有些情况下,虽然物理IO限制已经达到,但是一些关键IO仍然允许,比如:对控制文件的访问或对口令文件的访问,但是这些关键IO也是计入到IO数统计里的。

    可以使用DBA_HIST_RSRC_PDB_METRIC来计算一个PDB合理的IO限制。当计算IO限制值时,可以参考以下列:IOPS、IOMBPS、IOPS_THROTTLE_EXEMPT和IOMBPS_THROTTLE_EXEMPT。不推荐设置MAX_IOPS的值小于100,MAX_MBPS的值小于25。

set linesize 400

col PDB_NAME for a10

col BEGIN_TIME for a30

col END_TIME for a30

SELECT R.SNAP_ID,

       R.CON_ID,

       P.PDB_NAME,

       TO_CHAR(R.BEGIN_TIME, 'YYYY-MM-D HH24:MI') AS BEGIN_TIME,

       TO_CHAR(END_TIME, 'YYYY-MM-D HH24:MI') AS END_TIME,

       R.IOPS,

       R.IOMBPS,

       R.IOPS_THROTTLE_EXEMPT,

       R.IOMBPS_THROTTLE_EXEMPT,

       R.AVG_IO_THROTTLE

  FROM DBA_HIST_RSRC_PDB_METRIC R, CDB_PDBS P

 WHERE R.CON_ID = P.CON_ID

 ORDER BY R.BEGIN_TIME;

ALTER SYSTEM SET MAX_IOPS = 1000 SCOPE = BOTH;

ALTER SYSTEM SET MAX_MBPS = 50 SCOPE = BOTH;

    下面在同一数据库中,设置不同的max_iops和max_mbps查询相同的语句所需要的时间,可以看出max_iops和max_mbps对IO的限制是起作用的。

MAX_IOPS

MAX_MBPS

Elapsed(1)

Elapsed(2)

Elapsed(3)

Avg elapsed time

0

0

00:27.16

00:27.55

00:26.94

27.22

100

0

00:26.87

00:26.90

00:27.25

27.01

10

0

00:37.13

00:34.23

00:36.43

35.93

8

0

00:46.24

00:44.99

00:48.33

46.52

6

0

01:13.92

01:11.29

01:01.08

01:08.75

4

0

01:39.16

01:41.31

01:38.91

01:39:80

2

0

03:53.82

03:41.95

03:52.01

03:49:26

1

0

08:04.78

08:38.85

10:07.79

08::57:14

0

1

05:50.68

05:54.03

05:52.32

05:52:34

0

10

00:33.51

00:33.38

00:33.48

00:33.46

0

20

00:29.71

00:27.06

00:28.37

00:28.38

    当系统出现resmgr: I/O rate limit等待事件时,可以通过如下视图查询当前IO过载影响到的sql,p1值标示当前pdb_id出现此等待事件就需要调整max_iops 和max_mbps合理值,避免影响到关键性业务。

SELECT H.EVENT,

       H.P1 AS PDB_ID,

       C.PDB_NAME,

       H.SQL_ID,

       TO_CHAR(H.SAMPLE_TIME, 'YYYY-MM-D HH24:MI') AS SAMPLE_TIME,

       H.INSTANCE_NUMBER

  FROM DBA_HIST_ACTIVE_SESS_HISTORY H

  JOIN CDB_PDBS C

    ON C.PDB_ID = H.P1

   AND H.EVENT = 'resmgr: I/O rate limit'

 ORDER BY 4;

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到