ORA-00020: maximum number of processes exceeded
March 29, 2018 Leave a comment
We got the following error on our Development 12.1.0.2 database
866322-Wed Mar 28 15:56:40 2018
866347:ORA-00020: maximum number of processes (1256) exceeded
An easy way to see how exhausted your processes/sessions are getting is by running:
SELECT inst_id,resource_name, current_utilization, max_utilization, limit_value FROM gv$resource_limit WHERE resource_name in ('processes','sessions')
Which will give something like this – max utilization is the high water mark level:
From the screenshot above, you can see the processes on instance 1 have been fully exhausted at some point, but currently are fine.
You can also see which machines/schemas are causing any potential process exhaustion:
select distinct s.inst_id, s.username, s.machine, count(*) from gv$session s, gv$process p where s.paddr = p.addr and s.inst_id = p.inst_id GROUP BY s.inst_id, s.username, s.machine ORDER BY 4 desc;
Nice summary of the difference between Processes, Sessions and Connections from AskTom:
A connection is a physical circuit between you and the database. A connection might be one of many types — most popular begin DEDICATED server and SHARED server. Zero, one or more sessions may be established over a given connection to the database as show above with sqlplus. A process will be used by a session to execute statements. Sometimes there is a one to one relationship between CONNECTION->SESSION->PROCESS (eg: a normal dedicated server connection). Sometimes there is a one to many from connection to sessions (eg: like autotrace, one connection, two sessions, one process). A process does not have to be dedicated to a specific connection or session however, for example when using shared server (MTS), your SESSION will grab a process from a pool of processes in order to execute a statement. When the call is over, that process is released back to the pool of processes.