ITPub博客

首页 > 数据库 > 数据库开发技术 > Oracle 通过 oratcptest 测试主备库带宽和延迟

Oracle 通过 oratcptest 测试主备库带宽和延迟

原创 数据库开发技术 作者:oracle_jacky 时间:2024-03-21 08:06:00 0 删除 编辑

一个前同事问跟我聊如何测试Oracle主备库的带宽,除了scp,是否使用过oratcptest测试主备带宽。
之前还真未使用过oratcptest来测试带宽,我也挺感兴趣这东西,就查阅MOS和网上其它资料,并在Oracle主备环境进行了测试。

oratcptest是Oracle原厂提供的一个jar包,具体jar包里什么信息,就不太清楚了,另外,oratcptest对java版本有一定要求,要求java版本不低于 1.6

oratcptest下载及其详细用法都可以在MOS上查询到.(Assessing and Tuning Network Performance for Data Guard and RMAN (Doc ID 2064368.1))。根据主备网络间的的带宽,查找网络瓶颈,来优化网络。

oratcptest执行需要使用root权限。
另外在使用oratcptest的时候还有几个地方需要注意:

  • 需要在主备两端同时执行

  • 如果是RAC集群,需要使用数据库VIP地址

  • 不能使用数据库在使用的监听端口

通过java -jar oratcptest.jar -help 可查询oratcptest的详细帮助信息,以下是帮助信息详细输出

[root@xxx ~]# /u01/app/oracle/product/19.3.0/db_1/jdk/bin/java -jar /oratcptest.jar -help
[OraTcpTest server]
Usage:
java OraTcpTest -server [server_address] [OPTION]
Options:
-port=<number>
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
display help.
-version
display version.
Server examples:
java OraTcpTest -server -port=5555
java OraTcpTest -server my.server.com -port=5555 -file=test.out -sockbuf=64k

[OraTcpTest client]
Usage:
java OraTcpTest <server_address> [OPTION]
Options:
-port=<number>
listening TCP port number at server. 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 send buffer size. Default value is zero, which
means system default send 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.
-version
display version.
Client examples:
java OraTcpTest my.server.com -port=5555
java OraTcpTest my.server.com -port=5555 -rtt
java OraTcpTest my.server.com -port=5555 -write -mode=SYNC -num_conn=2 -length=2M -delay=15 -sockbuf=64k -interval=5s -duration=2m -freq=1h/24h -timeout=60s -random_length -random_delay -payload=ZERO -output=test.out

接下来,我们通过实验,来详细查看oratcptest是如何测试主备网络带宽的。

首先,需要在备库执行oratcptest

[root@xxxx ~]# /u01/app/oracle/product/19.3.0/db_1/jdk/bin/java -jar /oratcptest.jar -server 192.168.xxx.xxx -port=1521
OraTcpTest server started.

接着,在主库执行oratcptest

[root@xxxx ~]# /u01/app/oracle/product/19.3.0/db_1/jdk/bin/java -jar /root/oratcptest.jar 192.168.xxx.xxx -port=1521 -duration=30s -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 = SYNC
Disk write = NO
Statistics interval = 2 seconds
Test duration = 30 seconds
Test frequency = NO
Network Timeout = NO
(1 Mbyte = 1024x1024 bytes)

(13:53:34) The server is ready.
Throughput Latency
(13:53:36) 90.170 Mbytes/s 11.090 ms
(13:53:38) 81.076 Mbytes/s 12.334 ms
(13:53:40) 102.197 Mbytes/s 9.785 ms
(13:53:42) 102.679 Mbytes/s 9.739 ms
(13:53:44) 102.920 Mbytes/s 9.716 ms
(13:53:46) 103.872 Mbytes/s 9.627 ms
(13:53:48) 102.751 Mbytes/s 9.732 ms
(13:53:50) 103.954 Mbytes/s 9.620 ms
(13:53:52) 102.315 Mbytes/s 9.774 ms
(13:53:54) 104.207 Mbytes/s 9.596 ms
(13:53:56) 93.695 Mbytes/s 10.673 ms
(13:53:58) 90.044 Mbytes/s 11.106 ms
(13:54:00) 104.193 Mbytes/s 9.598 ms
(13:54:02) 103.509 Mbytes/s 9.661 ms
(13:54:04) 91.570 Mbytes/s 10.921 ms
(13:54:04) Test finished.
Socket send buffer = 326400 bytes
Avg. throughput = 98.549 Mbytes/s
Avg. latency = 10.147 ms

通过输出结果,可以看到主库到备库的平均带宽是 98.549 Mbytes/s,平均延迟时间是 10.147 ms

此时,备库看到的信息如下

[root@node2 ~]# /u01/app/oracle/product/19.3.0/db_1/jdk/bin/java -jar /oratcptest.jar -server 192.168.68.169 -port=1521
OraTcpTest server started.

[A test was requested.]
Message payload = 1 Mbyte
Disk write = NO
Socket receive buffer = (system default)

The test terminated. The socket receive buffer was 968880 bytes.

另外oratcptest测试,气候也可以跟mode参数,mode可以使用ASYNC或SYNC,如下:

[root@node2 ~]# /u01/app/oracle/product/19.3.0/db_1/jdk/bin/java -jar /root/oratcptest.jar 192.168.xxx.xxx -port=1521 -duration=40s -interval=4s -mode=ASYNC
[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 = 4 seconds
Test duration = 40 seconds
Test frequency = NO
Network Timeout = NO
(1 Mbyte = 1024x1024 bytes)

(14:02:44) The server is ready.
Throughput
(14:02:48) 108.343 Mbytes/s
(14:02:52) 108.390 Mbytes/s
(14:02:56) 109.879 Mbytes/s
(14:03:00) 110.548 Mbytes/s
(14:03:04) 106.619 Mbytes/s
(14:03:08) 107.720 Mbytes/s
(14:03:12) 106.927 Mbytes/s
(14:03:16) 107.190 Mbytes/s
(14:03:20) 102.796 Mbytes/s
(14:03:24) 105.555 Mbytes/s
(14:03:24) Test finished.
Socket send buffer = 339456 bytes
Avg. throughput = 107.357 Mbytes/s

[root@xxxx ~]# /u01/app/oracle/product/19.3.0/db_1/jdk/bin/java -jar /root/oratcptest.jar 192.168.xxx.xxx -port=1521 -duration=30s -interval=2s -mode=SYNC
[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 = SYNC
Disk write = NO
Statistics interval = 2 seconds
Test duration = 30 seconds
Test frequency = NO
Network Timeout = NO
(1 Mbyte = 1024x1024 bytes)

(14:06:14) The server is ready.
Throughput Latency
(14:06:16) 98.696 Mbytes/s 10.132 ms
(14:06:18) 100.049 Mbytes/s 9.995 ms
(14:06:20) 101.756 Mbytes/s 9.827 ms
(14:06:22) 101.584 Mbytes/s 9.844 ms
(14:06:24) 102.045 Mbytes/s 9.800 ms
(14:06:26) 101.565 Mbytes/s 9.846 ms
(14:06:28) 101.564 Mbytes/s 9.846 ms
(14:06:30) 101.601 Mbytes/s 9.843 ms
(14:06:32) 102.244 Mbytes/s 9.781 ms
(14:06:34) 92.646 Mbytes/s 10.794 ms
(14:06:36) 100.945 Mbytes/s 9.907 ms
(14:06:38) 90.749 Mbytes/s 11.020 ms
(14:06:40) 102.685 Mbytes/s 9.739 ms
(14:06:42) 92.229 Mbytes/s 10.843 ms
(14:06:44) 101.945 Mbytes/s 9.809 ms
(14:06:44) Test finished.
Socket send buffer = 322048 bytes
Avg. throughput = 99.432 Mbytes/s
Avg. latency = 10.057 ms

可以通过设置不同参数,多次测试,来测试主备间平均带宽和延迟。

测试中,监听端口不能使用在用端口,否则会报如下信息

[root@xxx ~]# /u01/app/oracle/product/19.3.0/db_1/jdk/bin/java -jar /oratcptest.jar -server 192.168.xxx.xxx -port=1522
Failed to listen a socket : Address already in use



原文作者:尚雷的驿站;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
现供职于某上市互联网公司担任DBA,荣获 PG ACE称号,拥有 Oracle OCM、AWS等及国产数据库等产品认证。喜欢技术分享,热爱交友,也热爱健身。

注册时间:2024-01-01

  • 博文量
    68
  • 访问量
    45431