Oracle creates server processes to handle the requests of user processes connected to an instance. A server process can be either a dedicated server process, where one server process services only one user process, or if our database server is configured for shared server, it can be a shared server process, where a server process can service multiple user processes . Let's have a look
Dedicated Servers:
1.) When a client request is received, a new server process and a session are created for the client.
2.) Releasing database resources involves terminating the session and server process
3.) Memory requirement is proportional to the number of server processes and sessions. There is one server and one session for each client.
4.) Session memory is allocated from the PGA.
Shared Servers :
1.) When the first request is received from a client, the Dispatcher process places this request on a common queue. The request is picked up by an available shared server process. The Dispatcher process then manages the communication between the client and the shared server process.
2.) Releasing database resources involves terminating the session
3.) Memory requirement is proportional to the sum of the shared servers and sessions. There is one session for each client.
4.) Session memory is allocated from the SGA.
Database Resident Connection Pooling :
1.) When the first request is received from a client, the Connection Broker picks an available pooled server and hands off the client connection to the pooled server. If no pooled servers are available, the Connection Broker creates one.If the pool has reached its maximum size, the client request is placed onthe wait queue until a pooled server is available.
2.) Releasing database resources involves releasing the pooled server to the pool.
3.) Memory requirement is proportional to the number of pooled servers and their sessions.There is one session for each pooled server.
4.) Session memory is allocated from the PGA.
Example of Memory Usage for Dedicated Server, Shared Server, and Database Resident Connection Pooling :
Consider an application in which the memory required for each session is 400 KB and the memory required for each server process is 4 MB. The pool size is 100 and the number of shared servers used is 100.If there are 5000 client connections, the memory used by each configuration is as follows:
Dedicated Server
Memory used = 5000 X (400 KB + 4 MB) = 22 GB
Shared Server
Memory used = 5000 X 400 KB + 100 X 4 MB = 2.5 GB
Out of the 2.5 GB, 2 GB is allocated from the SGA.
Database Resident Connection Pooling
Memory used = 100 X (400 KB + 4 MB) + (5000 X 35KB)= 615 MB
where 35KB is used for others operation
Enjoy :-)