• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to footer navigation

The Geek Diary

  • OS
    • Linux
    • CentOS/RHEL
    • Solaris
    • Oracle Linux
    • VCS
  • Interview Questions
  • Database
    • oracle
    • oracle 12c
    • ASM
    • mysql
    • MariaDB
  • DevOps
    • Docker
    • Shell Scripting
  • Big Data
    • Hadoop
    • Cloudera
    • Hortonworks HDP

Oracle Database – Measuring Network Capacity using oratcptest

by admin

The Basics

Oratcptest is a command line tool that runs on two hosts, one in client mode and the other in server mode, to measure network bandwidth and latency between client and server. Oratcptest establishes a TCP connection between the client host and server host and then sends network messages to Oratcptest on the server host. Oratcptest running on the server host writes, if desired, the received messages to disk before replying with the ACK message.

Oratcptest could be used as a general purpose tool for measuring network bandwidth and latency. However, oratcptest has been written specifically to help users assess network resources prior to performing Data Guard configuration, RMAN backup, migration, DG instantiation, etc.

Users can control the test behavior by specifying various options. For example,

  • Network message size
  • Delay time in between messages
  • Parallel sending streams
  • Whether Oratcptest-server should write messages on disk, or not.
  • Whether Oratcptest-client should wait for ACK before it sends next message, or not, thus simulating the ASYNC and SYNC transport used by Data Guard.
Note: This tool, like any Oracle streaming transport, can simulate efficient network packet transfers from the source host to target host. Throughput can be 100 MB/sec or higher depending on the available network bandwidth between the source and target servers and the actual tool options. Caution must be taken for any other critical applications sharing the same network.

Installation

1. Copy the jar file attached to this MOS note onto both client and server hosts:

2. Verify that host where oratcptest is being installed has JRE 6 or later.

% java -version
java version "1.7.0_09-icedtea"
OpenJDK Runtime Environment (rhel-2.3.4.1.0.1.el6_3-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)

3. Verify that the JVM can run the jar file with this command on both hosts.

% java -jar oratcptest.jar -help

This command should display the help.

4. Start the test server on the receiving side (note that you can supply any available port for the server).

% java -jar oratcptest.jar -server -port=5555

5. Run the test client (please change the server address and port number to match that of your server started in step 4).

% java -jar oratcptest.jar test.server.address.com -port=5555 -duration=10s -interval=2s

The test will display output similar to the following :

        Message payload        = 1 Mbyte
        Payload content type   = RANDOM
        Delay between messages = NO
        Number of connections  = 1
        Socket send buffer     = (system default)
        Transport mode         = SYNC
        Disk write             = NO
        Statistics interval    = 2 seconds
        Test duration          = 10 seconds
        Test frequency         = NO
        Network Timeout        = NO
        (1 Mbyte = 1024x1024 bytes)

(07:43:06) The server is ready.
                        Throughput            
(07:43:08)              107.747 Mbytes/s
(07:43:10)              107.900 Mbytes/s
(07:43:12)              107.826 Mbytes/s
(07:43:14)              107.861 Mbytes/s
(07:43:16)              107.914 Mbytes/s
(07:43:16) Test finished.
               Socket send buffer = 526476 bytes
               Avg. throughput = 107.819 Mbytes/s

6. To see a complete list of options issue the following command:

$ java -jar oratcptest.jar -help

Assessing Network Bandwidth for Data Guard Transport

The goal for all Data Guard configurations is to ship redo data to the remote disaster recovery site fast enough to meet recovery time and recovery point objectives. No amount of tuning can achieve this goal if there is insufficient bandwidth available to handle the required volume. To answer question of how much network bandwidth is needed to configure Data Guard for this application, start by collecting the redo volume of your production database and then determine if there’s sufficient network bandwidth using the oratcptest tool.

The simplest way to determine application throughput in terms of redo volume is to collect AWR reports during normal and peak workload and determine the number of bytes per second of redo data the production database is producing. However, if you use peak redo rates as obtained from AWR reports to size your network you might not truly have enough bandwidth. If you take AWR snapshot every 30 minutes it could be that during that 30 minutes period you had really high redo rates for 10 minutes and moderate to low rates for the remainder of the time. This would average down the redo rate as seen in the AWR report. To determine peak redo rate for each log use the following query:

sql> select thread#,sequence#,blocks*block_size/1024/1024 MB,(next_time-first_time)*86400 sec, blocks*block_size/1024/1024/((next_time-first_time)*86400) "MB/s" from v$archived_log where ((next_time-first_time)*86400<>0) and first_time between  to_date('2015/01/15 08:00:00','YYYY/MM/DD HH24:MI:SS') and to_date('2015/01/15 11:00:00','YYYY/MM/DD HH24:MI:SS') and dest_id=2 order by first_time;

You should see output similar to the following:

   THREAD#  SEQUENCE#         MB        SEC       MB/s 
---------- ---------- ---------- ---------- ---------- 
         2       2291 29366.1963        831  35.338383 
         1       2565 29365.6553        781 37.6000708 
         2       2292 29359.3403        537  54.672887 
         1       2566 29407.8296        813 36.1719921 
         2       2293 29389.7012        678 43.3476418 
         2       2294 29325.2217       1236 23.7259075 
         1       2567 11407.3379       2658 4.29169973 
         2       2295 29452.4648        477 61.7452093 
         2       2296 29359.4458        954 30.7751004 
         2       2297 29311.3638        586 50.0193921 
         1       2568 3867.44092       5510 .701894903

The above query output tells us that we must accommodate for a peak redo of 61MB/sec. In general we recommend adding an additional 30% on top of the peak rate.

Now that we know our peak redo rate we can measure the network bandwidth with the oratcptest tool to see if it can sustain that peak rate. For example, on one of the standby hosts start the oratcptest server process:

% java -jar oratcptest.jar -server -port=5555

On one of the primary hosts use oratcptest to connect to the server process on the standby host and transfer a fixed amount of data. For example, if the Data Guard transport will be using ASYNC run a command similar to the following to determine the maximum throughput the network will provide:

$ java -jar oratcptest.jar slcc32adm07 -port=5555 -mode=async -duration=10s -interval=2s
[Requesting a test]
        Message payload        = 1 Mbyte
        Payload content type   = RANDOM
        Delay between messages = NO
        Number of connections  = 1
        Socket send buffer     = (system default)
        Transport mode         = ASYNC
        Disk write             = NO
        Statistics interval    = 2 seconds
        Test duration          = 10 seconds
        Test frequency         = NO
        Network Timeout        = NO
        (1 Mbyte = 1024x1024 bytes)

(08:08:03) The server is ready.
                        Throughput            
(08:08:05)              113.052 Mbytes/s
(08:08:07)              113.232 Mbytes/s
(08:08:09)              113.198 Mbytes/s
(08:08:11)              113.205 Mbytes/s
(08:08:13)              113.189 Mbytes/s
(08:08:13) Test finished.
               Socket send buffer = 528880 bytes
                  Avg. throughput = 113.140 Mbytes/s

The above example shows that the avg. network throughput of 113MB/sec is sufficient to keep up with the database peak redo rate. If the network throughput is not enough try adjusting the socket send and receive buffer sizes similar to the following:

Server:

$ java -jar oratcptest.jar -server -port=5555 -sockbuf=2097152

Client:

$ java -jar oratcptest.jar slcc32adm07 -port=5555 -mode=async -duration=60s -sockbuf=2097152

Note that the value for sockbuf size cannot exceed the maximum allowed by the Operating System. For Linux that is controlled by the /proc/sys/net/core/rmem_max and /proc/sys/net/core/wmem_max values. Once you have determined the optimal tcp socket buffer size it is recommended to configure Oracle Net recv_buf_size and send_buf_size as described in the MAA best practice guide to those values.

Assessing Network Bandwidth for Data Guard SYNC Transport

Synchronous redo transport requires a primary database to wait for confirmation from the standby that redo has been received and written to disk (a standby redo log file) before commit success is signaled to the application. When assessing the performance of the remote write it is important to consider the following items:

  • How large is the redo write size that LGWR is submitting to the network
  • How long does it take the network to transfer that redo write
  • How long does it take for the I/O to complete to the standby redo log

Using oratcptest we can simulate SYNC writes over the network by first finding out the average redo write size that LGWR performs. This is done by using an AWR report on the primary database and dividing the “redo size” statistic by the “redo writes” statistic and setting the oratcptest tool -length option to this value. Note that redo write sizes typically increase when using SYNC transport due to batching of commits so you may need to test with larger redo write sizes. You can specify that the oratcptest server process write network message to the same disk location where the standby redo logs will be placed (note that ASM is currently not supported). For example, from the AWR report:

total redo size - 3,418,477,080
total redo writes - 426,201

Average redo write size (redo size / redo writes) = 8,020 or 8k. If the standby redo logs will be placed on /u01/oraredo the server command to issue would be:

$ java -jar oratcptest.jar -server -port=5555 -file=/u01/oraredo/oratcp.tmp

On the sending side we would issue the following client command to send over 8k messages with SYNC writes:

$ java -jar oratcptest.jar slcc32adm07 -port=5555  -write  -mode=sync -length=8020 -duration=10s -interval=2s
[Requesting a test]
        Message payload        = 8020 bytes
        Payload content type   = RANDOM
        Delay between messages = NO
        Number of connections  = 1
        Socket send buffer     = (system default)
        Transport mode         = SYNC
        Disk write             = YES
        Statistics interval    = 2 seconds
        Test duration          = 10 seconds
        Test frequency         = NO
        Network Timeout        = NO
        (1 Mbyte = 1024x1024 bytes)

(07:24:04) The server is ready.
                        Throughput                 Latency
(07:24:06)         21.832 Mbytes/s                0.351 ms
(07:24:08)         25.967 Mbytes/s                0.295 ms
(07:24:10)         27.846 Mbytes/s                0.275 ms
(07:24:12)         28.155 Mbytes/s                0.272 ms
(07:24:14)         27.917 Mbytes/s                0.274 ms
(07:24:14) Test finished.
               Socket send buffer = 8 kbytes
                  Avg. throughput = 26.335 Mbytes/s
                     Avg. latency = 0.291 ms

In the above output, latency includes the time to send the message to the server host, the optional disk write at the server host and the acknowledgment back to the client process.

Command Options

The following table lists the available server options:

Options Description
-port Listening TCP port number. Must be specified.
-file=[name] File name for disk-write test. Default value is oratcp.tmp.
-sockbuf=[bytes] Server socket receive buffer size. Default value is zero, which means system default receive buffer size.
-help Displays help

The following table lists the available client options:

Options Description
-port Listening TCP port number. Must be specified.
-write server writes network message to disk before server replies with ACK.
-mode=[SYNC|ASYNC] In SYNC mode, client waits for server’s ACK before it sends next message. In ASYNC mode, it doesn’t wait. Default value is SYNC
-num_conn=[number] Number of TCP connections. Default value is 1.
-sockbuf=[bytes] Client socket receive buffer size. Default value is zero, which means system default receive buffer size.
-length=[bytes] Message payload length. Default value is 1 Mbyte.
-delay=[milliseconds] Delay in milliseconds between network messages. Default value is zero, which means no delay between messages.
-rtt Round-trip-time measurement mode. Equivalent to -mode=SYNC and -length=0.
-random_length random payload length uniformly distributed between 512 bytes and -length option value.
-random_delay random delay uniformly distributed between zero and -delay  option value.
-payload=[RANDOM|ZERO|[filename]] payload content type among random data, all zeroes, or the contents of a user-specified file. Default value is RANDOM.
-interval=[time] Statistics reporting interval. Default value is 10 seconds.
-duration=[time] or [bytes] Test duration in time or bytes. If not specified, test does not terminate.
-freq=[time]/[time] Test repeat frequency. For example, -freq=1h/24h means the test will repeat every 1 hour for 24 hours.
-timeout=[time] Network timeout. Default value is zero, which means no timeout.
-output=[name] Output file name where client stores test result statistics.
-help display help

Filed Under: oracle

Some more articles you might also be interested in …

  1. How to Recover From Lost or Missing Database Parameter Files (PFILE or SPFILE)
  2. Oracle ASM 12c – New Features with examples
  3. Oracle Database: Redo log operations (Add/Drop/Change Location)
  4. How to Install/Uninstall/Upgrade Oracle SQLTXPLAIN (SQLT) Tool
  5. How to set EVENTS in spfile
  6. Background Processes Specific to Oracle RAC
  7. How to move spfile from ASM to filesystem
  8. Oracle Interview Questions – Flash Recovery Area
  9. Understanding Device Persistence and Oracle ASMLib
  10. How to Disable Oracle Net Tracing on a Server Process without Stopping the Process

You May Also Like

Primary Sidebar

Recent Posts

  • raw: command not found
  • raw Command Examples in Linux
  • rankmirrors Command Examples in Linux
  • radeontop: command not found

© 2023 · The Geek Diary

  • Archives
  • Contact Us
  • Copyright