前文介绍了几个实用SQL,Oracle 监控 SQL 精选 (一)
本文继续分享。首先,通过 SQLcl 连接到 Oracle 数据库。
1 2 3 Connected to : Oracle Database 23 ai Free Release 23.0 .0 .0 .0 - Develop, Learn, and Run for Free Version 23.4 .0 .24 .05
下面开始正文讲解。
SQL 1
查询实例可以用于执行的CPU数量,查询结果为2,表示只能使用2个cpu。
1 2 3 4 5 6 7 SQL > select value from v$parameter where name = 'cpu_count' ; VALUE ________ 2
由于我使用的是23ai Free版本,所以无法调整到更大值。
1 ORA-12797: The 'cpu_count' parameter cannot be greater than '2' in Oracle Database Free version.
但是可以调小,以限制PDB使用cpu资源。
1 2 3 4 5 6 7 8 9 10 11 12 SQL > show con_nameCON_NAME FREEPDB1 SQL > alter system set cpu_count = 1 ;System altered.SQL > show parameter cpu_count;NAME TYPE VALUE cpu_count string 1
SQL 2
V$OSSTAT显示来自操作系统的系统利用率统计信息。
NUM_CPUS表示系统的CPU数量,而PHYSICAL_MEMORY_BYTES表示系统的物理内存大小,以字节为单位。
1 2 3 4 5 6 7 8 9 10 SQL > select stat[4 Dstat_name, value from v$osstat where stat_name in ( 'NUM_CPUS' , 'PHYSICAL_MEMORY_BYTES' ); STAT_NAME VALUE ________________________ ______________ NUM_CPUS 8 PHYSICAL_MEMORY_BYTES 16473604096
查询输出说明服务器有8个CPU core,内存有16G。
SQL 3
V$RSRCMGRMETRIC 显示有关每个消费者组所消耗的资源和等待时间的信息。
当 STATISTICS_LEVEL 设置为 TYPICAL 或 ALL 时,即使未设置资源管理器计划或资源管理器计划不监视 CPU 或会话资源,此视图也包含有关 CPU 利用率和等待时间的信息。 当未监控 CPU 利用率时,每分钟都会收集和存储指标。
V$CONTAINERS 显示有关 PDB 以及与当前实例关联的 root 的信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 SQL > select c.name name, consumer_group_name, plan_name, cpu_consumed_time, cpu_wait_time from v$rsrcmgrmetric r, v$containers c where c.con_id (+ ) = r.con_id; NAME CONSUMER_GROUP_NAME PLAN_NAME CPU_CONSUMED_TIME CPU_WAIT_TIME ___________ ______________________ _______________ ____________________ ________________ FREEPDB1 ORA$AUTOTASK DEFAULT_PLAN 0 0 FREEPDB1 OTHER_GROUPS DEFAULT_PLAN 0 0 FREEPDB1 SYS_GROUP DEFAULT_PLAN 73 0
该语句返回5个列,包括容器的名称、消费者组名称、计划名称、CPU消费时间(消费者组中所有会话累计消耗的CPU时间,以毫秒为单位)以及CPU等待时间(会话因资源管理而等待 CPU 的累计时间(以毫秒为单位)。 这不包括由于闩锁或队列争用、I/O 等待等而导致的等待。 当 CPU 资源未被主动管理时,该值设置为零。)。
SQL 4
检查PDB的SGA使用情况,包括SGA组件的名称和大小。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 SQL > select c.name pdb_name, s.name, round( bytes / 1024 / 1024 , 2 ) mb_size from v$sgainfo s, v$containers c where c.con_id (+ ) = s.con_id; DB_NAME NAME MB_SIZE ___________ __________________________________ __________ Fixed SGA Size 5.11 Redo Buffers 4.32 Buffer Cache Size 192 In - Memory Area Size 0 Vector Memory Area Size 0 Shared Pool Size 896 Large Pool Size 16 Java Pool Size 0 Streams Pool Size 400 Shared IO Pool Size 80 Data Transfer Cache Size 0 Granule Size 16 Maximum SGA Size 1529.43 Startup overhead in Shared Pool 211.82 PDB_NAME NAME MB_SIZE ___________ ____________________________ __________ Free SGA Memory Available 16 15 rows selected.
其中,‘Maximum SGA Size’, ‘Startup overhead in Shared Pool’, ‘Granule Size’, ‘Shared IO Pool Size’ 不是实际SGA组件的记录,只保留具体的SGA组件信息。
SQL 5
查询数据库中会话和进程的关联信息,包括它们的资源使用情况。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 select c.name as pdb_name, p.pid as pid, p.program as server_process, s.sid as sid, s.username as username, s.program as program, s.machine as machine, s.osuser as osuser, s.status as status, last_call_et, module , client_info, nvl( pga_used_mem, 0 ) pga_used_mem, nvl( pga_alloc_mem, 0 ) pga_alloc_mem, nvl( pga_freeable_mem, 0 ) pga_freeable_mem, nvl( pga_max_mem, 0 ) pga_max_mem from v$process p, v$containers c, v$session s where c.con_id (+ ) = p.con_id and s.paddr (+ ) = p.addr and ROWNUM <= 10 ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 PDB_NAME PID SERVER_PROCESS SID USERNAME PROGRAM MACHINE OSUSER STATUS LAST_CALL_ET MODULE CLIENT_INFO PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM ___________ ______ _________________________ ______ ___________ _________________________ ___________ _________ _________ _______________ _________ ______________ _______________ ________________ ___________________ ______________ 2 oracle@shawnyan (PMON) 1 oracle@shawnyan (PMON) shawnyan oracle ACTIVE 1113041 1430944 1540216 0 1540216 4 oracle@shawnyan (PSP0) 2 oracle@shawnyan (PSP0) shawnyan oracle ACTIVE 1113041 1420840 1523816 0 1523816 6 oracle@shawnyan (GEN0) 3 oracle@shawnyan (GEN0) shawnyan oracle ACTIVE 1113039 2631952 3637696 393216 3637696 8 oracle@shawnyan (TT01) 4 oracle@shawnyan (TT01) shawnyan oracle ACTIVE 1113038 1384408 1507368 0 1507368 10 oracle@shawnyan (DIAG) 5 oracle@shawnyan (DIAG) shawnyan oracle ACTIVE 1113039 1420944 1532184 0 1532184 16 oracle@shawnyan (VKRM) 6 oracle@shawnyan (VKRM) shawnyan oracle ACTIVE 1113039 1413704 1523816 0 1523816 18 oracle@shawnyan (DIA0) 7 oracle@shawnyan (DIA0) shawnyan oracle ACTIVE 1113039 4463000 4612376 0 4612376 12 oracle@shawnyan (SCMN) 8 oracle@shawnyan (SCMN) shawnyan oracle ACTIVE 1113039 1384408 1507368 0 1507368 14 oracle@shawnyan (SCMN) 9 oracle@shawnyan (SCMN) shawnyan oracle ACTIVE 1113039 1384408 1507368 0 1507368 22 oracle@shawnyan (SMON) 10 oracle@shawnyan (SMON) shawnyan oracle ACTIVE 1113039 2727240 3883112 327680 5652584 10 rows selected.
V$PROCESS 显示有关当前活动进程的信息。
V$SESSION 表示每一个当前会话的会话信息。
其中,这几个列需要解释一下:
pid: 服务器进程的进程ID。
server_process: 服务器进程的名称。
sid: 会话ID。
module: 当前会话正在执行的模块名称。
client_info: 客户端发送的额外信息。
pga_used_mem: 进程全局区(PGA)已使用内存。
pga_alloc_mem: 已为PGA分配的内存。
pga_freeable_mem: PGA中可释放的内存。
pga_max_mem: PGA的最大内存。
到此,本文介绍了5个实用SQL。
希望对你有所帮助,我们下期见。
– END –
如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)