SDU – WAN optimisations

We had a meeting yesterday about the performance of an application across the WAN to the more remote regions of the world.

The upshot of the meeting was that the latency and bandwith of the network was fine but that the client-server network communications could be optimised.

My initial reaction was that the main influence was arraysize/fetchsize, but there are two main influences in Oracle client – Oracle server communications and as the fetchsize has already been increased explicitly, we may get some benefit from optimising SDU settings – something that I wasn’t away of until I started investigating/reading further today:

  • arraysize/fetchsize – the number of rows that the client will fetch from the database at one time.
  • SDU – Session Data Unit: a buffer that Oracle Net uses to place data before transmitting it across the network. Oracle Net sends the data in the buffer either when requested or when it is full.
    (TDU – Transport Data Unit – cannot be configured in Oracle v8 onwards)

From the oracle documentation:

The SDU value for network transmission is negotiated between the sender and receiver sides of the connection, and the minimum SDU value of the two endpoints is used for any individual connection.” In an oracle client – oracle server stack, “the receiving sqlnet.ora can include the DEFAULT_SDU_SIZE parameter. The receiving side listener.ora must indicate the SDU change for the SID. The sending side tnsnames.ora file must include the SDU modification for the particular service

In other words, for a connection to have an SDU size greater than 2048, the client and the server must specify a value the larger value for the SDU. The database will then select the lower of the 2 values.

In an oracle client negotiation via sqlnet.ora, you can up the trace levels and see the negotiation between client and server to see what SDU will be used.

Configuring Session Data Unit: