Databases 10 min read

Essential Oracle Monitoring Queries for Performance Tuning

This article compiles a comprehensive set of Oracle SQL queries that monitor wait events, rollback segment contention, tablespace and file system I/O ratios, SGA hit rates, dictionary cache efficiency, MTS activity, fragmentation, and other critical performance metrics, often with recommended threshold values.

ITPUB
ITPUB
ITPUB
Essential Oracle Monitoring Queries for Performance Tuning

1. Wait Event Monitoring

select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,count(*) from v$session_wait group by event order by 4;

Lists each wait event with counts of previous and current wait times, helping identify spikes.

2. Rollback Segment Contention

select name,waits,gets,waits/gets ratio from v$rollstat a,v$rollname b where a.usn=b.usn;

Shows wait-to-get ratios for rollback segments to spot contention.

3. Tablespace I/O Ratio

select df.tablespace_name name,df.file_name "ile",f.phyrds pyr,f.phyblkrd pbr,f.phywrts pyw, f.phyblkwrt pbw from v$filestat f,dba_data_files df where f.file#=df.file_id;

Provides physical reads and writes per tablespace file.

4. File System I/O Ratio

select substr(a.file#,1,2) "#",substr(a.name,1,30) "name",a.status,a.bytes, b.phyrds,b.phywrts from v$datafile a,v$filestat b where a.file#=b.file#;

Shows I/O statistics for each data file.

5. Indexes Owned by a User

select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name from user_ind_columns, user_indexes where user_ind_columns.index_name = user_indexes.index_name and user_ind_columns.table_name = user_indexes.table_name order by user_indexes.table_type, user_indexes.table_name, user_indexes.index_name, column_position;

Lists all indexes and their columns for a specific user.

6. SGA Logical vs Physical Reads (Buffer Hit Ratio)

select a.value + b.value "logical_reads", c.value "phys_reads", round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO" from v$sysstat a, v$sysstat b, v$sysstat c where a.statistic# = 38 and b.statistic# = 39 and c.statistic# = 40;

Calculates the overall SGA buffer hit ratio.

7. Dictionary Cache Hit Ratio

select parameter, gets, Getmisses , getmisses/(gets+getmisses)*100 "miss ratio", (1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio" from v$rowcache where gets+getmisses <>0 group by parameter, gets, getmisses;

Shows miss and hit percentages for the dictionary cache.

8. Library Cache Hit Ratio (Target < 1%)

select sum(pins) "Total Pins", sum(reloads) "Total Reloads", sum(reloads)/sum(pins) *100 libcache from v$librarycache;
select sum(pinhits-reloads)/sum(pins) "hit radio", sum(reloads)/sum(pins) "reload percent" from v$librarycache;

Evaluates library cache efficiency; a low reload percentage indicates good performance.

9. Object Size Summary

select count(name) num_instances ,type ,sum(source_size) source_size , sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) error_size, sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required from dba_object_size group by type order by 2;

Aggregates size metrics for all database objects by type.

10. Redo Log Buffer Cache Hit Ratio (Target < 1%)

SELECT name, gets, misses, immediate_gets, immediate_misses, Decode(gets,0,0,misses/gets*100) ratio1, Decode(immediate_gets+immediate_misses,0,0, immediate_misses/(immediate_gets+immediate_misses)*100) ratio2 FROM v$latch WHERE name IN ('redo allocation', 'redo copy');

Measures redo allocation and copy latch efficiency.

11. Sort Area Ratio (Target < 0.10)

SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)');

Helps decide whether to increase sort_area_size.

12. Active SQL Sessions

SELECT osuser, username, sql_text from v$session a, v$sqltext b where a.sql_address =b.address order by address, piece;

Shows which users are executing which SQL statements.

13. Dictionary Buffer Statistics

SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE;
SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM V$ROWCACHE;
SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE;

Low ratios (< 1 %) indicate healthy cache performance.

14. Oracle Character Set

select * from sys.props$ where name='NLS_CHARACTERSET';

Retrieves the database character set.

15. MTS (Multi‑Threaded Server) Monitoring

select busy/(busy+idle) "shared servers busy" from v$dispatcher;

If the value exceeds 0.5, increase the dispatchers parameter.

select sum(wait)/sum(totalq) "ispatcher waits" from v$queue where type='dispatcher';
select count(*) from v$dispatcher;
select servers_highwater from v$mts;

When servers_highwater approaches mts_max_servers, raise the MTS limit.

16. Tablespace Fragmentation

select tablespace_name,count(tablespace_name) from dba_free_space group by tablespace_name having count(tablespace_name)>10;

Identifies tablespaces with many free fragments.

alter tablespace name coalesce;
alter table name deallocate unused;

Reclaims space.

create or replace view ts_blocks_v as select tablespace_name,block_id,bytes,blocks,'free space' segment_name from dba_free_space union all select tablespace_name,block_id,bytes,blocks,segment_name from dba_extents;
select * from ts_blocks_v;
select tablespace_name,sum(bytes),max(bytes),count(block_id) from dba_free_space group by tablespace_name;

Shows free space distribution.

SELECT segment_name table_name , COUNT(*) extents FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name);

Finds tables with the highest fragmentation.

17. Table and Index Storage Checks

select segment_name,sum(bytes),count(*) ext_quan from dba_extents where tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name;
select segment_name,count(*) from dba_extents where segment_type='INDEX' and owner='&owner' group by segment_name;

Analyzes storage consumption for tables and indexes.

18. Sessions Consuming High CPU

Statistic #12 represents CPU used by a session.

select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value from v$session a,v$process b,v$sesstat c where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value;

Orders sessions by CPU usage.

19. Recently Executed SQL Statements

SELECT SQL_TEXT FROM V$SQL;

Retrieves the text of SQL statements that have been run.

20. Log Buffer Usage (Target < 1%)

select rbar.name,rbar.value,re.name,re.value, (rbar.value*100)/re.value||'%' "radio" from v$sysstat rbar,v$sysstat re where rbar.name='redo buffer allocation retries' and re.name='redo entries';

If the ratio exceeds 1 %, increase log_buffer size.

Oracle monitoring diagram
Oracle monitoring diagram
Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

SQLPerformance TuningOracleTablespaceDatabase MonitoringSGA
ITPUB
Written by

ITPUB

Official ITPUB account sharing technical insights, community news, and exciting events.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.