I’m briefly going to show you the recommended settings by both F5 and Oracle for a RAC Load Balancing setup. But it’s important to mention before implementing any configuration into production, always test since all environments are different, well most. It’s important to work with all teams who are in charge of the settings on the server side and Oracle side because there are buffer settings and timeouts that you will need. For example, see below for both Oracle 12c and the OS which in my case is RedHat 7:
Oracle 12c Defaults and Best Practice:
TCP.CONNECT_TIMEOUT = 60 Seconds (F5 keeps mentioning that Oracle states this should be 10 seconds but I couldn’t find it anywhere. Even their best practice/tuning doc states 60)
SQLNET.EXPIRE_TIME = 10 Minutes
RECV_BUF_SIZE = OS Specific
SEND_BUF_SIZE = OS Specific
From Oracle’s Best Practices for Database Performance and Scalability Guide:
From Oracle’s Documentation:
Redhat Linux 7:
RECEIVE BUFFER:
net.core.rmem_default = 262144 = 256K
net.core.rmem_max = 4194304 = 4096K
SEND BUFFER:
net.core.wmem_default = 262144 256K
net.core.wmem_max = 1048576 1024K
From RedHat’s Documentation:
Let’s get to the configuration.
Health Monitor:
Interval = TCP.CONNECT_TIMEOUT x 3 + 1 (60 x 3 + 1= 181)
Work with your Oracle DB’s to get the Send, Receive, Connecting Strings.
Receive Row/Receive Column is used for returns from the SQL query that may have multiple results. I used 1.
Pool:
Action On Service Down = Reject
Load Balancing Method = Least Connection(node)
Priority Group Activiation = Less Than
Available Members = set to 1 :this is the minimum number of nodes at a specific Priority Level that should be available before the pool chooses a lower priority level
Add the member nodes and don’t forget to give them specific Priorities. In this case PRIMARY=100 STANDBY=50
TCP Profile:
There are two TCP Profiles, one for the Client and one for the Server.
Maximum Syn Retransmissions = TCP.CONNECT_TIMEOUT = 60 Seconds = DID NOT TOUCH
Idle Timeout = SQLNET.EXPIRE_TIME = 10 Minutes = Changed to 660 which equals 11 Minutes since it needs to be slightly larger
Send Buffer = SEND_BUF_SIZE = OS Dependent = For me I’m looking at RedHat Linux 7 which is 256K but I set the F5 to RedHat’s max
Receive Window = RECV_BUF_SIZE = OS Dependent = For me I’m looking at RedHat Linux 7 which is 256K but I set the F5 to RedHat’s max
Client:
Server:
Virtual Server:
Protocol Profile (Client) = oracleRAC_client_tcpprofile
Protocol Profile (Server) = oracleRAC_server_tcpprofile
Source Address Translation = Auto Map
Default Pool = oracleRAC_primary-standby_pool
Default Persistence Profile = dest_addr
Fallback Persistence Profile = source_addr