遠(yuǎn)程辦公”">國務(wù)院聯(lián)防聯(lián)控機(jī)制新聞發(fā)布會,多次肯定“云辦公”、“遠(yuǎn)程辦公”
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
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)容。