在可插拔數(shù)據(jù)庫上如何監(jiān)控進(jìn)程內(nèi)存的使用

      網(wǎng)友投稿 739 2025-04-01

      適用于:

      Oracle Database - Enterprise Edition - 版本 12.1.0.1 和更高版本

      Oracle Database Cloud Schema Service - 版本 N/A 和更高版本

      Oracle Database Exadata Express Cloud Service - 版本 N/A 和更高版本

      Oracle Database Exadata Cloud Machine - 版本 N/A 和更高版本

      Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本

      本文檔所含信息適用于所有平臺

      解決方案

      容器數(shù)據(jù)庫(CDB)和所有的可插拔數(shù)據(jù)庫(PDBs)共享一個單一數(shù)據(jù)庫實(shí)例,這個實(shí)例由一個系統(tǒng)全局區(qū)(SGA)和一些后臺進(jìn)程組成。因?yàn)檫@種共享內(nèi)存資源的特性,使得你可能非常想要去區(qū)分共享該實(shí)例的各個數(shù)據(jù)庫,究竟各自都使用了多少資源。如果可能的話,我們還將提供一個查詢,將各個每個可插拔數(shù)據(jù)庫所使用的進(jìn)程內(nèi)存(PGA)也區(qū)分開。

      使用了 ROUND 函數(shù)使得查詢結(jié)果更容易用 MB 形式來展現(xiàn);因?yàn)榈玫绞撬纳嵛迦氲闹担缘玫降慕Y(jié)果和直接查詢 V$PROCESS 和 V$SESSTAT 得到的結(jié)果不能精確匹配。

      set linesize 150

      在可插拔數(shù)據(jù)庫上如何監(jiān)控進(jìn)程內(nèi)存的使用

      set pagesize 3000

      set NUMWIDTH 15

      col Parameter format a30

      col component format a28

      COLUMN DEFAULT_ATTR FORMAT A7

      COLUMN OWNER FORMAT A15

      COLUMN OBJECT_NAME FORMAT A15

      COLUMN ALL_CONTAINERS FORMAT A3

      COLUMN CONTAINER_NAME FORMAT A10

      COLUMN CON_ID FORMAT 999

      COLUMN pdb_name FORMAT A20

      COLUMN memory Format A25

      COLUMN spid HEADING 'OSpid' FORMAT a8

      COLUMN pid HEADING 'Orapid' FORMAT 999999

      COLUMN sid HEADING 'Sess id' FORMAT 99999

      COLUMN serial# HEADING 'Serial#' FORMAT 999999

      COLUMN status HEADING 'Status' FORMAT a8

      COLUMN pga_alloc_mem HEADING 'PGA alloc' FORMAT 999,999,999

      COLUMN pga_used_mem HEADING 'PGA used' FORMAT 999,999,999

      COLUMN pga_max_mem HEADING 'PGA Max' FORMAT 999,999,999

      COLUMN username HEADING 'oracleuser' FORMAT a12

      COLUMN osuser HEADING 'OS user' FORMAT a12

      COLUMN program HEADING 'Program' FORMAT a24

      COLUMN Mbytes Heading 'Mbytes' FORMAT 999,999,999

      COLUMN name FORMAT A22

      -- 設(shè)置 session 的日期格式

      alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS';

      -- 腳本運(yùn)行的日期

      select sysdate from dual;

      這個查詢將識別腳本是否是運(yùn)行在根容器數(shù)據(jù)庫(CDB)。

      通過查看變量 con_name 的值可以表明容器的名字是 CDB$ROOT,看 con_id 的值可以知道容器ID是1。

      “show pdbs”這個命令顯示了 CDB 下所有可插拔數(shù)據(jù)庫的狀態(tài)(是否打開,是否以受限制的模式打開)。這個命令也被用于識別 PDB 名和容器ID的聯(lián)系(con_id:用于許多查詢分解內(nèi)存使用到指定的容器)。

      如果在非容器數(shù)據(jù)庫執(zhí)行的,這些命令將返回 NULL 值。

      這些例子結(jié)果如下展示了關(guān)聯(lián)到當(dāng)前 CDB 的除種子 PDB 外的四個額外的 PDBs。PDB( ID:5,名:PDB_COPY)沒有被打開,其他所有的 PDBs 是打開的狀態(tài)。

      show con_name

      show con_id

      show pdbs

      CON_NAME

      ------------------------------

      CDB$ROOT

      CON_ID

      ------------------------------

      1

      CON_ID CON_NAME?????????????????????? OPEN MODE? RESTRICTED

      --------------- ------------------------------ ---------- ----------

      2 PDB$SEED?????????????????????? READ ONLY? NO

      3 PDB_SS???????????????????????? READ WRITE NO

      4 PDB1?????????????????????????? READ WRITE NO

      5 PDB_COPY?????????????????????? MOUNTED

      6 PDB2?????????????????????????? READ WRITE NO

      下面的查詢提供了根容器數(shù)據(jù)庫(CDB)的名字。例如:CDB1。

      select name, cdb, con_id from v$database;

      NAME?????????????????? CDB CON_ID

      ---------------------- --- ------

      CDB1?????????????????? YES????? 0

      下面的查詢展示了關(guān)于每個容器其他的ID信息和數(shù)據(jù)庫狀態(tài)。

      --Information About Each Container

      SELECT NAME, CON_ID, OPEN_MODE, RESTRICTED, DBID, CON_UID, GUID FROM V$CONTAINERS ORDER BY CON_ID;

      NAME?????????????????? CON_ID OPEN_MODE? RES??????????? DBID???????? CON_UID GUID

      ---------------------- ------ ---------- --- --------------- --------------- --------------------------------

      CDB$ROOT??????????????????? 1 READ WRITE NO?????? ?? ?????

      PDB$SEED??????????????????? 2 READ ONLY? NO????? ? ? ? ??

      PDB_SS????????????????????? 3 READ WRITE NO?? ? ?? ? ?????

      PDB1??????????????????????? 4 READ WRITE NO??? ? ? ? ?????

      PDB_COPY??????????????????? 5 MOUNTED????????? ? ? ? ?????

      PDB2??????????????????????? 6 READ WRITE NO????????? ?????

      這個基于視圖 V$SESSTAT 的查詢同時展現(xiàn)了用 “session pga memory” 標(biāo)識當(dāng)前進(jìn)程的大小和用 “session pga memory max” 標(biāo)識在進(jìn)程生命周期中進(jìn)程的最大內(nèi)存大小。

      AND 子句"s.value > 20000000"用于排除內(nèi)存小于 20MB 的進(jìn)程,如果您想要看到所有的進(jìn)程,請刪除這個子句或者修改當(dāng)前值成其他的值。

      下面例子的結(jié)果展示了容器 4 有一個 OS PID 4356 的進(jìn)程曾經(jīng)達(dá)到 1163MB;容器 6 有一個 OS pid 8367 的進(jìn)程曾經(jīng)達(dá)到 1,386MB。容器 DB 有一個 OS pid 7303 的進(jìn)程曾經(jīng)達(dá)到 940MB。當(dāng)前,在這個實(shí)例上只有一個進(jìn)程大于 20MB,所有其他的進(jìn)程都小于 20MB,不過在他們的生命周期里曾經(jīng)使用了非常大的內(nèi)存(“session pga memory max”指明了這一點(diǎn))。

      REM v$sesstat pga memory over 20MB size

      break on spid skip 1

      SELECT p.spid, s.sid, p.con_id, substr(n.name,1,25) memory, ROUND(s.value/1024/1024) as MBytes

      FROM v$sesstat s, v$statname n, v$process p, v$session vs

      WHERE s.statistic# = n.statistic#

      AND n.name LIKE '%pga memory%'

      AND s.sid=vs.sid

      AND vs.paddr=p.addr

      AND s.value > 20000000 /* --remove this line to view all process size */

      order by spid,memory;

      break on off

      OSpid??? Sess id CON_ID MEMORY????????????????????????? Mbytes

      -------- ------- ------ ------------------------- ------------

      3727???????? 246????? 0 session pga memory????????????????? 20

      246????? 0 session pga memory max????????????? 30

      4356????????? 22????? 4 session pga memory max?????????? 1,163

      7303???????? 257????? 1 session pga memory max???????????? 940

      8367???????? 237????? 6 session pga memory max?????????? 1,386

      這個基于 v$process 的查詢展示了當(dāng)前使用內(nèi)存最大的進(jìn)程和對應(yīng)的容器 ID。

      下面例子的結(jié)果展示了,通過查看字段 PGA_alloc 當(dāng)前最大的進(jìn)程分配了 11MB PGA,而字段 PGA_MAX 顯示在進(jìn)程的生命周期曾最多分配 PGA 內(nèi)存達(dá)到 16MB。

      List largest process based on v$process:

      /* Do NOT eliminate all background process because certain background processes do need to be monitored at times */

      SELECT pid, spid, con_id, substr(username,1,13) username, program, ROUND(pga_used_mem/1024/1024) pga_used, ROUND(pga_alloc_mem/1024/1024) pga_alloc, ROUND(pga_freeable_mem/1024/1024) pga_freeable, ROUND(pga_max_mem/1024/1024) pga_max

      FROM v$process

      WHERE pga_alloc_mem = (SELECT max(pga_alloc_mem)

      FROM v$process

      WHERE program NOT LIKE '%LGWR%');

      Orapid OSpid??? CON_ID oracleuser?? Program???????????????????????? PGA_USED?????? PGA_ALLOC??? PGA_FREEABLE???????? PGA_MAX

      ------- -------- ------ ------------ ------------------------ --------------- --------------- --------------- ---------------

      19 3724????????? 0 oracle?????? oracle@localhost.localdo?????????????? 4????????????? 11?????????????? 7????????????? 16

      main (MMON)

      這個基于 v$process 的查詢合計(jì)了實(shí)例或 CDB 所有進(jìn)程的當(dāng)前分配的 PGA。這個值包含了 CDB 和所有 PDBs 的所有后臺和前臺進(jìn)程。這個值很好的標(biāo)識了 CDB 和所有 PDBs 使用的私有內(nèi)存。

      --Summation of ALL PGA based on v$process:

      REM allocated includes free PGA memory not yet released to the operating system by the server process

      SELECT ROUND(SUM(pga_alloc_mem)/1024/1024) AS "Mbytes allocated", ROUND(SUM(PGA_USED_MEM)/1024/1024) AS "Mbytes used"

      FROM v$process;

      Mbytes allocated???? Mbytes used

      ---------------- ---------------

      83????????????? 58

      這個基于 v$process 的查詢合計(jì)了當(dāng)前所有已分配 PGA 并且按各個容器的使用進(jìn)行了劃分。這個值包含了 CDB 和所有 PDBs 的所有后臺和前臺進(jìn)程。PGA 內(nèi)存的使用通過容器 id 進(jìn)行標(biāo)識。

      這個例子展示了 CDB id 0和 1 使用了 76MB, 可插拔 DB id 4 使用了 3MB,且可插拔 DB id 6 使用了 3MB。

      --Summation of each container PGA based on v$process:

      REM allocated includes free PGA memory not yet released to the operating system by the server process

      compute sum of "Mbytes allocated" on report

      break on report

      SELECT con_id, ROUND(SUM(pga_alloc_mem)/1024/1024) AS "Mbytes allocated", ROUND(SUM(PGA_USED_MEM)/1024/1024) AS "Mbytes used"

      FROM v$process

      group by con_id

      order by con_id;

      break on off

      CON_ID Mbytes allocated???? Mbytes used

      ------ ---------------- ---------------

      0?????????????? 72????????????? 51

      1??????????????? 4?????????????? 2

      4??????????????? 3?????????????? 2

      6??????????????? 3?????????????? 2

      ----------------

      sum????????????????? 82

      這個基于 V$SESSTAT 的查詢合計(jì)了合計(jì)了實(shí)例或 CDB 所有進(jìn)程的當(dāng)前分配的內(nèi)存。這個值包含了 CDB 和所有 PDBs 的所有后臺和前臺進(jìn)程。這是除了查詢 v$process 之外的另一種方式來查看所有 PGA 的使用情況。

      --Summation of ALL PGA memory based on V$SESSTAT:

      SELECT ROUND(SUM(value)/1024/1024) AS Mbytes

      FROM v$sesstat s, v$statname n

      WHERE n.STATISTIC# = s.STATISTIC#

      AND n.name = 'session pga memory';

      Mbytes

      ------------

      53

      這個基于 V$SESSTAT 的查詢合計(jì)了當(dāng)前所有已分配 PGA 并且按各個容器的使用進(jìn)行了劃分。這個值包含了 CDB 和所有 PDBs 的所有后臺和前臺進(jìn)程。PGA 內(nèi)存的使用通過容器 id 進(jìn)行標(biāo)識。

      這個例子展示了 CDB id 0 和 1 使用了 51MB, 可插拔 DB id 4 使用了 2MB,且可插拔 DB id 6 使用了 2MB。

      --Summation each container PGA memory based on V$SESSTAT:

      compute sum of MBYTES on report

      break on report

      select con_id, ROUND(sum(bytes)/1024/1024) as MBYTES from (SELECT p.con_id, s.value as bytes

      FROM v$sesstat s, v$statname n, v$process p, v$session vs

      WHERE s.statistic# = n.statistic#

      AND n.name = 'session pga memory'

      AND s.sid=vs.sid

      AND vs.paddr=p.addr)

      group by con_id

      order by con_id;

      break on off

      CON_ID?????? Mbytes

      ------ ------------

      0?????????? 47

      1??????????? 4

      4??????????? 2

      6??????????? 2

      ------------

      sum????????????? 55

      這個查詢通過"aggregate PGA target parameter"標(biāo)識了 pga_aggregate_target 的值,通過"aggregate PGA auto target"動態(tài)調(diào)整當(dāng)前 pga_aggregate_target 的值。

      在下面的例子中,pga_aggregate_target 的值被設(shè)置成 208MB,當(dāng)前調(diào)整后的 pga_aggregate_target 的值是 136MB。

      實(shí)例啟動后,這個查詢也將可以在任何時間標(biāo)識所有實(shí)例的 PGA 使用的最大值。也能被用做標(biāo)識啟動后 PGA 的使用曾經(jīng)達(dá)到多高的值。

      下面的例子展示了實(shí)例啟動后在某個時間點(diǎn) PGA 分配的最大值達(dá)到 1,453MB。

      --PGA stats from V$PGASTAT:

      --show max total pga allocated since instance startup

      select name, ROUND(value/1024/1024) as Mbytes from v$pgastat

      where name in ('maximum PGA allocated','aggregate PGA target parameter','aggregate PGA auto target');

      NAME???????????????????????? Mbytes

      ---------------------- ------------

      aggregate PGA target p????????? 208

      arameter

      aggregate PGA auto tar????????? 136

      get

      maximum PGA allocated???????? 1,453

      對 CDB_HIST_PGASTAT 的查詢顯示了 AWR 歷史上最大的 PGA 內(nèi)存和對應(yīng)的 snapshot id。這個查詢能被用于查找在什么時候 PGA 的使用達(dá)到這個高值。這個 snap_id 也能用作幫助找到 AWR 報(bào)告生成的時間范圍。

      下面這個例子顯示了在 snapshot 211 這一時刻 PGA 內(nèi)存增長到了 1,453MB。

      --show max pga allocated from history

      select * from (select name,SNAP_ID, ROUND(VALUE/1024/1024) Mbytes from CDB_HIST_PGASTAT

      where name='maximum PGA allocated'

      order by Mbytes desc,snap_id desc)

      where rownum <11;

      NAME?????????????????????????? SNAP_ID?????? Mbytes

      ---------------------- --------------- ------------

      maximum PGA allocated????????????? 211??????? 1,453

      maximum PGA allocated????????????? 211??????? 1,453

      maximum PGA allocated????????????? 211??????? 1,453

      maximum PGA allocated????????????? 211??????? 1,453

      maximum PGA allocated????????????? 211??????? 1,453

      maximum PGA allocated????????????? 204????????? 595

      maximum PGA allocated????????????? 204????????? 595

      maximum PGA allocated????????????? 204????????? 595

      maximum PGA allocated????????????? 204????????? 595

      maximum PGA allocated????????????? 204????????? 595

      10 rows selected.

      這個基于 V$SESSION 和 V$PROCESS 的查詢提供了 CDB 和 PDBs 的所有進(jìn)程的信息總結(jié),包含 OS ID 和 Oracle id,在 v$session 中定義的會話狀態(tài),Oracle 和 OS 登陸用戶名,及程序信息。

      這個結(jié)果集以容器 id 和每個容器的當(dāng)前所有 pga 分配的總和進(jìn)行分組,以當(dāng)前分配的內(nèi)存進(jìn)行升序排序, 最大值放在底部靠近合計(jì)。

      如果不想顯示后臺進(jìn)程的信息,可以去掉 AND 字句的注釋(AND p.background is null)。

      下面的查詢提供 SGA 和 PGA 相關(guān)的參數(shù)的設(shè)定。如果 sga_target和pga_aggregate_target 的值是零,并且 memory_target 大于零,那么這些值將通過 AMM 自動被設(shè)置。

      --user defined parameters

      select con_id, name as Parameter, value/1024/1024 as Mbytes from v$parameter

      where name in ('pga_aggregate_target','memory_target','memory_max_target','sga_max_size','sga_target','pga_aggregate_limit')

      order by name;

      CON_ID PARAMETER??????????????????????????? Mbytes

      ------ ------------------------------ ------------

      1 memory_max_target?????????????????????? 600

      1 memory_target?????????????????????????? 600

      1 pga_aggregate_limit?????????????????? 4,096

      1 pga_aggregate_target????????????????????? 0

      1 sga_max_size??????????????????????????? 600

      1 sga_target??????????????????????????????? 0

      上面查詢 PGA 的語句可以和查詢 SGA 視圖的語句結(jié)合在一起,來判斷 CDB 的總體內(nèi)存使用情況。

      任務(wù)調(diào)度 數(shù)據(jù)庫

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:如何用EXCEL函數(shù)繪制橫斷面地面線(excel怎么繪制橫線)
      下一篇:ERP如何應(yīng)對離散制造挑戰(zhàn)
      相關(guān)文章
      亚洲日韩精品国产一区二区三区 | 亚洲乱码卡一卡二卡三| 亚洲熟女少妇一区二区| 国产精品成人亚洲| 亚洲AV无码国产一区二区三区| 在线aⅴ亚洲中文字幕| 久久精品国产亚洲AV忘忧草18 | 亚洲AV永久无码精品网站在线观看| 国产人成亚洲第一网站在线播放| 亚洲一区免费视频| 亚洲乱码中文字幕小综合| 91亚洲精品麻豆| 亚洲日韩乱码中文无码蜜桃臀 | 亚洲人成色777777精品| 亚洲精品乱码久久久久蜜桃| 亚洲国产精品无码久久九九大片| 亚洲精品无码久久久久APP| 亚洲中文字幕AV在天堂| 亚洲乱妇熟女爽到高潮的片| 亚洲日韩国产二区无码| 色婷婷六月亚洲综合香蕉| 国产偷国产偷亚洲高清在线| 亚洲国模精品一区| 中文字幕一精品亚洲无线一区| 亚洲中文久久精品无码| 亚洲va久久久噜噜噜久久狠狠 | 亚洲色欲色欲www在线丝| 亚洲深深色噜噜狠狠爱网站| 国产AV无码专区亚洲AV毛网站| 亚洲码国产精品高潮在线| 亚洲VA成无码人在线观看天堂| 久久精品国产亚洲香蕉| 久久亚洲精品国产精品| 亚洲电影在线免费观看| 国产成人亚洲合集青青草原精品 | 亚洲成色在线综合网站| 亚洲视频在线观看免费视频| 亚洲三级在线免费观看| 亚洲精品蜜夜内射| 爱情岛论坛网亚洲品质自拍| 亚洲国产精品无码专区在线观看|