Olá a todos. Nesta terceira parte, falarei um pouco sobre como otimizar o uso da rede, no escopo do banco de dados Oracle. Antes, gostaria de esclarecer que não sou uma profundo conhecedor de redes, logo, mencionarei aqui algumas dicas simples para tirar o melhor proveito da relação Oracle x Rede.

1) Aumentando o throughput da rede

A Oracle sugere definir os parâmetros RECV_BUF_SIZE e SEND_BUF_SIZE (valores em bytes), dentro do tnsnames.ora e do listener.ora. Abaixo segue uma nota de um doc da Oracle sobre esses 2 parâmetros:

      “Reliable network protocols like TCP/IP buffer data into send and receive buffers while sending and receiving to or from lower and upper layer protocols. The sizes of these buffers affect network performance, as these buffer sizes influence flow control decisions.

      The RECV_BUF_SIZE and SEND_BUF_SIZE parameters specify sizes of socket receive and send buffers, respectively, associated with an Oracle Net connection.

      To ensure the continuous flow of data and better utilization of network bandwidth, specify the I/O buffer space limit for receive and send operations of sessions with the RECV_BUF_SIZE and SEND_BUF_SIZE parameters.

      For best performance, the size of the send and receive buffers should be set large enough to hold all of the data that may be sent concurrently on the network connection. For a simple database connection, this typically maps to the OCI_PREFETCH_MEMORY size.

      Setting the SEND_BUF_SIZE and RECV_BUF_SIZE to at least the bandwidth-delay product, will insure that when large amounts of data are being sent that the network bandwidth will be optimally utilized.”

Exemplo:

Já usei essas configurações apenas em ambientes de Dataguard.

 

2) Replicação de dados usando Materialized Views

Usar Mviews é melhor do que replicar dados via db_links. É melhor selecionar localmente dados préviamente replicados via materialized view, do que selecionar esses dados, sob demanda, via db_links.

Pode-se criar mviews na base destino, buscando dados, via dblinks, na base origem. É possível agendar o refresh da mview para ser realizar de tempos em tempos (de 5 em 5 minutos, por exemplo). Esse refresh deve ser FAST, para que apenas os dados modificados desde o último refresh sejam retornados para a base destino.

Replicação de dados, com a finalidade de obter melhor performance, é mais eficiênte quando os dados de origem são pouco modificados ou quando os processos de negócio aceitam trabalhar com dados um pouco defazados.

 

3) Usando Remote Procedure Calls (RPC)

É mais vantajoso chamar uma procedure remota do que criar uma procedure localmente que execute ações em bases remotas. Ex:

4) Especificar as colunas a serem buscadas

É sempre recomendado especificar no select quais serão as colunas retornadas pela query. Isso evita que dados sejam retornados sem necessidade, reduzindo I/O e rede. Ex:

É isso ai, por enquanto, pessoal. São poucas dicas, mas que podem ser de alguma utilidade. Como havia dito anteriormente, redes não é muito o meu forte, por isso, quando você precisar realizar alguma operação de tuning de redes, faça isso em conjunto com seu administrador de redes.

Keep Tuning