Oracle® Database Administrator's Guide 11g Release 2 (11.2) Part Number E10595-04 |
|
|
View PDF |
This section discusses how to enable shared server and how to set or alter shared server initialization parameters. It contains the following topics:
Shared Server Data Dictionary Views
See Also:
Oracle Database SQL Language Reference for further information about the ALTER
SYSTEM
statement
The following initialization parameters control shared server operation:
SHARED_SERVERS
: Specifies the initial number of shared servers to start and the minimum number of shared servers to keep. This is the only required parameter for using shared servers.
MAX_SHARED_SERVERS
: Specifies the maximum number of shared servers that can run simultaneously.
SHARED_SERVER_SESSIONS
: Specifies the total number of shared server user sessions that can run simultaneously. Setting this parameter enables you to reserve user sessions for dedicated servers.
DISPATCHERS
: Configures dispatcher processes in the shared server architecture.
MAX_DISPATCHERS
: Specifies the maximum number of dispatcher processes that can run simultaneously. This parameter can be ignored for now. It will only be useful in a future release when the number of dispatchers is auto-tuned according to the number of concurrent connections.
CIRCUITS
: Specifies the total number of virtual circuits that are available for inbound and outbound network sessions.
See Also:
Oracle Database Reference for more information about these initialization parametersShared server requires some user global area (UGA) in either the shared pool or large pool. For installations with a small number of simultaneous sessions, the default sizes for these system global area (SGA) components are generally sufficient. However, if you expect a large number of sessions for your installation, you may have to tune memory to support shared server.
See the "Configuring and Using Memory" section of Oracle Database Performance Tuning Guide for guidelines.
Shared server is enabled by setting the SHARED_SERVERS
initialization parameter to a value greater than 0. The other shared server initialization parameters need not be set. Because shared server requires at least one dispatcher in order to work, a dispatcher is brought up even if no dispatcher has been configured. Dispatchers are discussed in "Configuring Dispatchers".
Shared server can be started dynamically by setting the SHARED_SERVERS
parameter to a nonzero value with the ALTER SYSTEM
statement, or SHARED_SERVERS
can be included at database startup in the initialization parameter file. If SHARED_SERVERS
is not included in the initialization parameter file, or is included but is set to 0, then shared server is not enabled at database startup.
Note:
IfSHARED_SERVERS
is not included in the initialization parameter file at database startup, but DISPATCHERS
is included and it specifies at least one dispatcher, shared server is enabled. In this case, the default for SHARED_SERVERS
is 1.
If neither SHARED_SERVERS
nor DISPATCHERS
is included in the initialization file, you cannot start shared server after the instance is brought up by just altering the DISPATCHERS
parameter. You must specifically alter SHARED_SERVERS
to a nonzero value to start shared server.
Note:
If you create your Oracle database with Database Configuration Assistant (DBCA), DBCA configures a dispatcher for Oracle XML DB (XDB). This is because XDB protocols like HTTP and FTP require shared server. This results in aSHARED_SERVER
value of 1. Although shared server is enabled, this configuration permits only sessions that connect to the XDB service to use shared server. To enable shared server for regular database sessions (for submitting SQL statements), you must add an additional dispatcher configuration, or replace the existing configuration with one that is not specific to XDB. See "Configuring Dispatchers" for instructions.The SHARED_SERVERS
initialization parameter specifies the minimum number of shared servers that you want created when the instance is started. After instance startup, Oracle Database can dynamically adjust the number of shared servers based on how busy existing shared servers are and the length of the request queue.
In typical systems, the number of shared servers stabilizes at a ratio of one shared server for every ten connections. For OLTP applications, when the rate of requests is low, or when the ratio of server usage to request is low, the connections-to-servers ratio could be higher. In contrast, in applications where the rate of requests is high or the server usage-to-request ratio is high, the connections-to-server ratio could be lower.
The PMON (process monitor) background process cannot terminate shared servers below the value specified by SHARED_SERVERS
. Therefore, you can use this parameter to stabilize the load and minimize strain on the system by preventing PMON from terminating and then restarting shared servers because of coincidental fluctuations in load.
If you know the average load on your system, you can set SHARED_SERVERS
to an optimal value. The following example shows how you can use this parameter:
Assume a database is being used by a telemarketing center staffed by 1000 agents. On average, each agent spends 90% of the time talking to customers and only 10% of the time looking up and updating records. To keep the shared servers from being terminated as agents talk to customers and then spawned again as agents access the database, a DBA specifies that the optimal number of shared servers is 100.
However, not all work shifts are staffed at the same level. On the night shift, only 200 agents are needed. Since SHARED_SERVERS
is a dynamic parameter, a DBA reduces the number of shared servers to 20 at night, thus allowing resources to be freed up for other tasks such as batch jobs.
You can decrease the minimum number of shared servers that must be kept active by dynamically setting the SHARED_SERVERS
parameter to a lower value. Thereafter, until the number of shared servers is decreased to the value of the SHARED_SERVERS
parameter, any shared servers that become inactive are marked by PMON for termination.
The following statement reduces the number of shared servers:
ALTER SYSTEM SET SHARED_SERVERS = 5;
Setting SHARED_SERVERS
to 0 disables shared server. For more information, please refer to "Disabling Shared Servers".
The MAX_SHARED_SERVERS
parameter specifies the maximum number of shared servers that can be automatically created by PMON. It has no default value. If no value is specified, then PMON starts as many shared servers as is required by the load, subject to these limitations:
The process limit (set by the PROCESSES
initialization parameter)
A minimum number of free process slots (at least one-eighth of the total process slots, or two slots if PROCESSES
is set to less than 24)
System resources
Note:
On Windows NT, take care when settingMAX_SHARED_SERVERS
to a high value, because each server is a thread in a common process.The value of SHARED_SERVERS
overrides the value of MAX_SHARED_SERVERS
. Therefore, you can force PMON to start more shared servers than the MAX_SHARED_SERVERS
value by setting SHARED_SERVERS
to a value higher than MAX_SHARED_SERVERS
. You can subsequently place a new upper limit on the number of shared servers by dynamically altering the MAX_SHARED_SERVERS
to a value higher than SHARED_SERVERS
.
The primary reason to limit the number of shared servers is to reserve resources, such as memory and CPU time, for other processes. For example, consider the case of the telemarketing center discussed previously:
The DBA wants to reserve two thirds of the resources for batch jobs at night. He sets MAX_SHARED_SERVERS
to less than one third of the maximum number of processes (PROCESSES
). By doing so, the DBA ensures that even if all agents happen to access the database at the same time, batch jobs can connect to dedicated servers without having to wait for the shared servers to be brought down after processing agents' requests.
Another reason to limit the number of shared servers is to prevent the concurrent run of too many server processes from slowing down the system due to heavy swapping, although PROCESSES
can serve as the upper bound for this rather than MAX_SHARED_SERVERS
.
Still other reasons to limit the number of shared servers are testing, debugging, performance analysis, and tuning. For example, to see how many shared servers are needed to efficiently support a certain user community, you can vary MAX_SHARED_SERVERS
from a very small number upward until no delay in response time is noticed by the users.
The SHARED_SERVER_SESSIONS
initialization parameter specifies the maximum number of concurrent shared server user sessions. Setting this parameter, which is a dynamic parameter, lets you reserve database sessions for dedicated servers. This in turn ensures that administrative tasks that require dedicated servers, such as backing up or recovering the database, are not preempted by shared server sessions.
This parameter has no default value. If it is not specified, the system can create shared server sessions as needed, limited by the SESSIONS
initialization parameter.
The CIRCUITS
parameter sets a maximum limit on the number of virtual circuits that can be created in shared memory. This parameter has no default. If it is not specified, then the system can create circuits as needed, limited by the DISPATCHERS
initialization parameter and system resources.
The DISPATCHERS
initialization parameter configures dispatcher processes in the shared server architecture. At least one dispatcher process is required for shared server to work.If you do not specify a dispatcher, but you enable shared server by setting SHARED_SERVER
to a nonzero value, then by default Oracle Database creates one dispatcher for the TCP protocol. The equivalent DISPATCHERS
explicit setting of the initialization parameter for this configuration is:
dispatchers="(PROTOCOL=tcp)"
You can configure more dispatchers, using the DISPATCHERS
initialization parameter, if either of the following conditions apply:
You need to configure a protocol other than TCP/IP. You configure a protocol address with one of the following attributes of the DISPATCHERS parameter:
You want to configure one or more of the optional dispatcher attributes:
This section provides brief descriptions of the attributes that can be specified with the DISPATCHERS
initialization parameter.
A protocol address is required and is specified using one or more of the following attributes:
Attribute | Description |
---|---|
ADDRESS |
Specify the network protocol address of the endpoint on which the dispatchers listen. |
DESCRIPTION |
Specify the network description of the endpoint on which the dispatchers listen, including the network protocol address. The syntax is as follows:
(DESCRIPTION=(ADDRESS=...)) |
PROTOCOL |
Specify the network protocol for which the dispatcher generates a listening endpoint. For example:
(PROTOCOL=tcp) See the Oracle Database Net Services Reference for further information about protocol address syntax. |
The following attribute specifies how many dispatchers this configuration should have. It is optional and defaults to 1.
The following attributes tell the instance about the network attributes of each dispatcher of this configuration. They are all optional.
You can specify either an entire attribute name a substring consisting of at least the first three characters. For example, you can specify SESSIONS=3,
SES=3
, SESS=3
, or SESSI=3
, and so forth.
See Also:
Oracle Database Reference for more detailed descriptions of the attributes of theDISPATCHERS
initialization parameterOnce you know the number of possible connections for each process for the operating system, calculate the initial number of dispatchers to create during instance startup, for each network protocol, using the following formula:
Number of dispatchers = CEIL ( max. concurrent sessions / connections for each dispatcher )
CEIL
returns the result roundest up to the next whole integer.
For example, assume a system that can support 970 connections for each process, and that has:
A maximum of 4000 sessions concurrently connected through TCP/IP and
A maximum of 2,500 sessions concurrently connected through TCP/IP with SSL
The DISPATCHERS
attribute for TCP/IP should be set to a minimum of five dispatchers (4000 / 970), and for TCP/IP with SSL three dispatchers (2500 / 970:
DISPATCHERS='(PROT=tcp)(DISP=5)', '(PROT-tcps)(DISP=3)'
Depending on performance, you may need to adjust the number of dispatchers.
You can specify multiple dispatcher configurations by setting DISPATCHERS
to a comma separated list of strings, or by specifying multiple DISPATCHERS
parameters in the initialization file. If you specify DISPATCHERS
multiple times, the lines must be adjacent to each other in the initialization parameter file. Internally, Oracle Database assigns an INDEX
value (beginning with zero) to each DISPATCHERS
parameter. You can later refer to that DISPATCHERS
parameter in an ALTER SYSTEM
statement by its index number.
Some examples of setting the DISPATCHERS
initialization parameter follow.
Example: Typical This is a typical example of setting the DISPATCHERS
initialization parameter.
DISPATCHERS="(PROTOCOL=TCP)(DISPATCHERS=2)"
Example: Forcing the IP Address Used for Dispatchers The following hypothetical example will create two dispatchers that will listen on the specified IP address. The address must be a valid IP address for the host that the instance is on. (The host may be configured with multiple IP addresses.)
DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)(HOST=144.25.16.201))(DISPATCHERS=2)"
Example: Forcing the Port Used by Dispatchers To force the dispatchers to use a specific port as the listening endpoint, add the PORT
attribute as follows:
DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)(PORT=5000))" DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)(PORT=5001))"
You can control the number of dispatcher processes in the instance. Unlike the number of shared servers, the number of dispatchers does not change automatically. You change the number of dispatchers explicitly with the ALTER SYSTEM
statement. In this release of Oracle Database, you can increase the number of dispatchers to more than the limit specified by the MAX_DISPATCHERS
parameter. It is planned that MAX_DISPATCHERS
will be taken into consideration in a future release.
Monitor the following views to determine the load on the dispatcher processes:
See Also:
Oracle Database Performance Tuning Guide for information about monitoring these views to determine dispatcher load and performanceIf these views indicate that the load on the dispatcher processes is consistently high, then performance may be improved by starting additional dispatcher processes to route user requests. In contrast, if the load on dispatchers is consistently low, reducing the number of dispatchers may improve performance.
To dynamically alter the number of dispatchers when the instance is running, use the ALTER SYSTEM
statement to modify the DISPATCHERS
attribute setting for an existing dispatcher configuration. You can also add new dispatcher configurations to start dispatchers with different network attributes.
When you reduce the number of dispatchers for a particular dispatcher configuration, the dispatchers are not immediately removed. Rather, as users disconnect, Oracle Database terminates dispatchers down to the limit you specify in DISPATCHERS
,
For example, suppose the instance was started with this DISPATCHERS
setting in the initialization parameter file:
DISPATCHERS='(PROT=tcp)(DISP=2)', '(PROT=tcps)(DISP=2)'
To increase the number of dispatchers for the TCP/IP protocol from 2 to 3, and decrease the number of dispatchers for the TCP/IP with SSL protocol from 2 to 1, you can issue the following statement:
ALTER SYSTEM SET DISPATCHERS = '(INDEX=0)(DISP=3)', '(INDEX=1)(DISP=1)';
or
ALTER SYSTEM SET DISPATCHERS = '(PROT=tcp)(DISP=3)', '(PROT-tcps)(DISP=1)';
Note:
You need not specify (DISP=1
). It is optional because 1 is the default value for the DISPATCHERS
parameter.If fewer than three dispatcher processes currently exist for TCP/IP, the database creates new ones. If more than one dispatcher process currently exists for TCP/IP with SSL, then the database terminates the extra ones as the connected users disconnect.
Suppose that instead of changing the number of dispatcher processes for the TCP/IP protocol, you want to add another TCP/IP dispatcher that supports connection pooling. You can do so by entering the following statement:
ALTER SYSTEM SET DISPATCHERS = '(INDEX=2)(PROT=tcp)(POOL=on)';
The INDEX
attribute is needed to add the new dispatcher configuration. If you omit (INDEX=2
) in the preceding statement, then the TCP/IP dispatcher configuration at INDEX 0 will be changed to support connection pooling, and the number of dispatchers for that configuration will be reduced to 1, which is the default when the number of dispatchers (attribute DISPATCHERS
) is not specified.
The INDEX
keyword can be used to identify which dispatcher configuration to modify. If you do not specify INDEX
, then the first dispatcher configuration matching the DESCRIPTION
, ADDRESS
, or PROTOCOL
specified will be modified. If no match is found among the existing dispatcher configurations, then a new dispatcher will be added.
The INDEX
value can range from 0 to n
-1, where n
is the current number of dispatcher configurations. If your ALTER SYSTEM
statement specifies an INDEX
value equal to n
, where n
is the current number of dispatcher configurations, a new dispatcher configuration will be added.
To see the values of the current dispatcher configurations--that is, the number of dispatchers, whether connection pooling is on, and so forth--query the V$DISPATCHER_CONFIG
dynamic performance view. To see which dispatcher configuration a dispatcher is associated with, query the CONF_INDX
column of the V$DISPATCHER
view.
When you change the DESCRIPTION
, ADDRESS
, PROTOCOL
, CONNECTIONS
, TICKS
, MULTIPLEX
, and POOL
attributes of a dispatcher configuration, the change does not take effect for existing dispatchers but only for new dispatchers. Therefore, in order for the change to be effective for all dispatchers associated with a configuration, you must forcibly kill existing dispatchers after altering the DISPATCHERS
parameter, and let the database start new ones in their place with the newly specified properties.
The attributes LISTENER
and SERVICES
are not subject to the same constraint. They apply to existing dispatchers associated with the modified configuration. Attribute SESSIONS
applies to existing dispatchers only if its value is reduced. However, if its value is increased, it is applied only to newly started dispatchers.
With the ALTER SYSTEM
statement, you leave it up to the database to determine which dispatchers to shut down to reduce the number of dispatchers. Alternatively, it is possible to shut down specific dispatcher processes. To identify the name of the specific dispatcher process to shut down, use the V$DISPATCHER
dynamic performance view.
SELECT NAME, NETWORK FROM V$DISPATCHER;
Each dispatcher is uniquely identified by a name of the form Dnnn.
To shut down dispatcher D002
, issue the following statement:
ALTER SYSTEM SHUTDOWN IMMEDIATE 'D002';
The IMMEDIATE
keyword stops the dispatcher from accepting new connections and the database immediately terminates all existing connections through that dispatcher. After all sessions are cleaned up, the dispatcher process shuts down. If IMMEDIATE
were not specified, the dispatcher would wait until all of its users disconnected and all of its connections terminated before shutting down.
You disable shared server by setting SHARED_SERVERS
to 0. No new client can connect in shared mode. However, when you set SHARED_SERVERS
to 0, Oracle Database retains some shared servers until all shared server connections are closed. The number of shared servers retained is either the number specified by the preceding setting of SHARED_SERVERS
or the value of the MAX_SHARED_SERVERS
parameter, whichever is smaller. If both SHARED_SERVERS
and MAX_SHARED_SERVERS
are set to 0, then all shared servers will terminate and requests from remaining shared server clients will be queued until the value of SHARED_SERVERS
or MAX_SHARED_SERVERS
is raised again.
To terminate dispatchers once all shared server clients disconnect, enter this statement:
ALTER SYSTEM SET DISPATCHERS = '';
The following views are useful for obtaining information about your shared server configuration and for monitoring performance.
View | Description |
---|---|
V$DISPATCHER |
Provides information on the dispatcher processes, including name, network address, status, various usage statistics, and index number. |
V$DISPATCHER_CONFIG |
Provides configuration information about the dispatchers. |
V$DISPATCHER_RATE |
Provides rate statistics for the dispatcher processes. |
V$QUEUE |
Contains information on the shared server message queues. |
V$SHARED_SERVER |
Contains information on the shared servers. |
V$CIRCUIT |
Contains information about virtual circuits, which are user connections to the database through dispatchers and servers. |
V$SHARED_SERVER_MONITOR |
Contains information for tuning shared server. |
V$SGA |
Contains size information about various system global area (SGA) groups. May be useful when tuning shared server. |
V$SGASTAT |
Contains detailed statistical information about the SGA, useful for tuning. |
V$SHARED_POOL_RESERVED |
Lists statistics to help tune the reserved pool and space within the shared pool. |
See Also:
Oracle Database Reference for detailed descriptions of these views
Oracle Database Performance Tuning Guide for specific information about monitoring and tuning shared server