For the rest, let's consider we are only in shared server mode of Oracle DB server.
I read from Understanding Database Server Process Architecture
A virtual circuit is a piece of shared memory used by the dispatcher for client database connection requests and replies. The dispatcher places a virtual circuit on a common request queue when a request arrives.
This quote confuses me in the undertsanding of the definition, relationship, roles and positions in the SGA of the followings : request queue ; response queue, UGA (user global area), dispatcher and especially virtual circuit
My current understanding is :
- client requesting a connection, will trigger the listener that will hand off the connection to a dispatcher process ;
- that dispatcher will put the request on the common request queue : my first confusion starts here as the above quote says that "The dispatcher places a virtual circuit on a common request queue"
- and idle shared server process takes it from there and .......(I understand the rest of the process here)
Another quote from the same link :
Each client connection is bound to a virtual circuit. A virtual circuit is a piece of shared memory used by the dispatcher for client database connection requests and replies.
Am I correct to draw the following conclusions (Also I'm asking my questions):
- Virtual circuits are a (one) separated piece of the instance memory (I assume SGA here) ;
- A dispatcher "assigns" a virtual circuit to each client connection (does the dispatcher has a memory structure to keep track of which virtual circuit belongs to which client ?)
- Some others structures of SGA will be : the common request queue and the individual dispatchers' response queues. After "assigning" a virtual circuit to a client connection, the dispatcher "pushes" the virtual circuit on the common request queue. (what happens here ? What information of the virtual circuit are placed in the common request queue ? Arise my biggest questions : what are the constituents of the virtual circuit ?
- What is maintaining the dedicated clients UGA here ? Dispatcher via that abstract virtual circuit again ? If yes, my question in bold is asked again
- An idle shared server process picks the request from the common request queue (Does it pick the virtual circuit ?) and sends the results to the dispatcher's response queue (it doesn't go through the virtual circuit anymore ? )
- the dispatcher picks the results from its response queue and feeds them to the client. (If the server process jumped over the virtual circuit to put the result in the response queue, the the virtual circuit becomes useless here....and the dispatcher only communicates the results to the client without going through the virtual circuit)
The virtual circuit (and its undeclared constituents) and its relation to response/request queue and UGA is very obscure to me.
I know I WROTE A LOT of things. Hopefully it's not too boring nor illogical. So I hope you can help me better understand this area of shared memory.