Load Balancing Advisory
Learn about how to configure and use the load balancing advisory, and how to manage FAN events.
Overview of the Load Balancing Advisory
Learn about load balancing, and about guidelines that Oracle recommends for load balancing on Oracle Real Application Clusters (Oracle RAC).
Load balancing distributes work across all of the available Oracle RAC database instances. Oracle recommends that applications use connection pools with persistent connections that span the instances that offer a particular service. When using persistent connections, connections are created infrequently and exist for a long duration. Work comes into the system with high frequency, borrows these connections, and exists for a relatively short duration. The load balancing advisory provides advice about how to direct incoming work to the instances that provide the optimal service quality for that work. This minimizes the need to relocate the work later.
By using the Load Balancing Advisory and run-time connection load balancing goals, feedback is built in to the system. Work is routed to provide the best service times globally, and routing responds gracefully to changing system conditions. In a steady state, the system approaches equilibrium with improved throughput across all of the Oracle RAC instances.
Standard architectures that can use the load balancing advisory include connection load balancing, transaction processing monitors, application servers, connection concentrators, hardware and software load balancers, job schedulers, batch schedulers, and message queuing systems. All of these applications can allocate work.
The load balancing advisory is deployed with key Oracle clients, such as a listener, the JDBC universal connection pool, OCI session pool, Oracle WebLogic Server Active GridLink for Oracle RAC, and the ODP.NET Connection Pools. Third-party applications can also subscribe to load balancing advisory events by using JDBC and Oracle RAC FAN API or by using callbacks with OCI.
Configuring Your Environment to Use the Load Balancing Advisory
You can configure your environment to use the load balancing advisory by defining service-level goals for each service for which you want to enable load balancing.
Configuring a service-level goal enables the load balancing advisory and the publishing of FAN load balancing events for that service. There are three types of service-level goals for run-time connection load balancing:
SMART_CONN: Enables Smart Connection Rebalance and tries to ensure that workloads accessing similar objects end up in one instance and benefit from the reduced inter-instance network messages and data block transfers over the private network. The following example shows how to set the goal toSMART_CONNfor connections using theodpappservice:$ srvctl modify service -db db_unique_name -service odpapp -rlbgoal SMART_CONNSERVICE_TIME: Attempts to direct work requests to instances according to response time. Load balancing advisory data is based on elapsed time for work done in the service plus available bandwidth to the service. An example for the use ofSERVICE_TIMEis for workloads such as internet shopping where the rate of demand changes. The following example shows how to set the goal toSERVICE_TIMEfor connections using theonlineservice:$ srvctl modify service -db db_unique_name -service online -rlbgoal SERVICE_TIME -clbgoal SHORTTHROUGHPUT: Attempts to direct work requests according to throughput. The load balancing advisory is based on the rate that work is completed in the service plus available bandwidth to the service. An example for the use ofTHROUGHPUTis for workloads such as batch processes, where the next job starts when the last job completes. The following example shows how to set the goal toTHROUGHPUTfor connections using thesjobservice:$ srvctl modify service -db db_unique_name -service sjob -rlbgoal THROUGHPUT -clbgoal LONG
Setting the run-time connection load balancing goal to NONE disables load balancing for the service. You can see the goal settings for a service in the data dictionary by querying the DBA_SERVICES, V$SERVICES, and V$ACTIVE_SERVICES views. You can also review the load balancing settings for a service using Oracle Enterprise Manager.
Related Topics
Load Balancing Advisory FAN Events
The load balancing advisory FAN events provide metrics for load balancing algorithms.
The easiest way to take advantage of these events is to use the run-time connection load balancing feature of an Oracle integrated client such as JDBC, Universal Connection Pool (or the deprecated Implicit Connection Cache), ODP.NET Connection Pools, OCI session pools, or Oracle WebLogic Server Active GridLink for Oracle RAC. Other client applications can take advantage of FAN programmatically by using the Oracle RAC FAN API to subscribe to FAN events and perform event-handling actions upon receipt. The following table describes the load balancing advisory FAN event parameters.
See also
Oracle AI Database JDBC Developer's Guide for more information about the Oracle RAC FAN API
Table: Load Balancing Advisory FAN Events
| Parameter | Description |
|---|---|
VERSION | Version of the event record. Used to identify release changes. |
EVENT_TYPE | A load balancing advisory event is always of the SERVICEMETRICS event type. |
SERVICE | The service name; matches the value of NAME in DBA_SERVICES. |
DATABASE | The unique database supporting the service; matches the initialization parameter value for DB_UNIQUE_NAME, which defaults to the value of the initialization parameter DB_NAME. |
INSTANCE | The name of the instance that supports the service; matches the ORACLE_SID value. |
PERCENT | The percentage of work requests to send to this database instance. |
FLAG | Indication of the service quality relative to the service goal. Valid values are GOOD, VIOLATING, NO DATA, and BLOCKED. |
TIMESTAMP | The local time zone to use when ordering notification events. |
Note:
The INSTANCE, PERCENT, and FLAG event parameters are generated for each instance offering the service. Each set of instance data is enclosed within braces ({}).
Related Topics
Monitoring Load Balancing Advisory FAN Events
To monitor load balancing advisory events for an instance, use this query.
You can use the following query against the internal queue table for load balancing advisory FAN events to monitor load balancing advisory events generated for an instance:
SET PAGES 60 COLSEP '|' LINES 132 NUM 8 VERIFY OFF FEEDBACK OFF
COLUMN user_data HEADING "AQ Service Metrics" FORMAT A60 WRAP
BREAK ON service_name SKIP 1
SELECT
TO_CHAR(enq_time, 'HH:MI:SS') Enq_time, user_data
FROM sys.sys$service_metrics_tab
ORDER BY 1 ;
The results of this query contain rows similar to the following:
02:56:05|SYS$RLBTYP('hr', 'VERSION=1.0 database=sales service=hr
{ {instance=sales_4 percent=38 flag=GOOD aff=TRUE}{instance=sales_1
percent=62 flag=GOOD aff=TRUE} } timestamp=2012-07-16 07:56:05')
Following is an example of a load balancing advisory event for the lba_serv service offered on two instances (orcl1 and orcl2), as captured from Oracle Notification Service using the Oracle RAC FAN API:
Notification Type: database/event/servicemetrics/lba_serv.example.com
VERSION=1.0 database=orcl service=lba_serv.example.com { {instance=orcl2
percent=50 flag=UNKNOWN aff=FALSE}{instance=orcl1 percent=50 flag=UNKNOWN
aff=FALSE} } timestamp=2012-07-06 13:19:12
Note:
The SERVICMETRICS events are not visible through the FAN callout mechanism.