Testes práticos de performance com FET_BUF_SIZE e opção "b" do SQLHOSTS

Versão para impressãoEnviar para amigoVersão PDF

Este artigo descreve os resultados de alguns testes de performance que realizei quando parametrizado a váriavel de ambiente FET_BUF_SIZE e opção "b" do SQLHOSTS. Estes testes estão relacionados ao throughtput de rede

Informações adicionais: Conforme explicado no Machine Notes, alguns SO podem ter limite de 16 KBytes para o tamanho do buffer de rede. Aparentemente pelos testes , este é o limite do Linux testado.
O tamanho padrão do buffer de rede no Informix é 4 KBytes
O tamanho dos pacotes enviados , variaramm entre 1500 Bytes e 16 KB devido ao MTU (para loopback é 16 KB, para rede 1500 Bytes )

Foram realizados os seguintes testes com FET_BUF_SIZE, utilizando INSERTs


  1. Sistema Operacional Linux open SuSE , banco IDS 11.10 UC1 Developer, aplicação I-4GL executando na mesma maquina e acessando o banco através da conexão TCP no loopback.
    Incluindo 32 mil registros de 322 bytes em uma unica transação.
    • Fazendo chamadas de INSERT diretamente e FET_BUF_SIZE=0
      Tempo de 40 segundos
      Monitorando a conexão através do tcpdump foi possivel observar que a cada insert executado o dado já era enviado gerando portanto um grande numero de pequenos pacotes de rede(188194 pacotes com media de 380 bytes cada)
    • Fazendo chamadas de INSERT diretamente e FET_BUF_SIZE=32767
      Tempo de 40 segundos
      Monitorando a conexão através do tcpdump foi possivel observar que a cada insert executado o dado já era enviado gerando portanto um grande numero de pequenos pacotes (191779 pacotes com media de 380 bytes cada)
    • Declarando cursor INSERT, executando apenas o PUT , CLOSE, FREE e FET_BUF_SIZE=0
      Tempo de 11 segundos
      Monitorando a conexão através do tcpdump foi possivel observar que a o dado só era enviado quando o tamanho total chegava perto de 4096, gerando portanto menos pacotes(5380 pacotes com media de 3966 bytes cada)
    • Declarando cursor INSERT, executando apenas o PUT , CLOSE, FREE e FET_BUF_SIZE=32767
      Tempo de 9 segundos
      Monitorando a conexão através do tcpdump foi possível observar que a o dado só era enviado quando o tamanho total chegava perto de 16384, gerando portanto menos pacotes(1628 pacotes com media de 16384 bytes cada)
  2. Sistema Operacional HP-UX 11.00 , banco IDS 7.31 FD2, aplicação I-4GL executando em Linux open SuSE, acessando o banco através da conexão TCP , rede de 100 MBits.
    Incluindo 32 mil registros de 322 bytes em uma unica transação.
    • Fazendo chamadas de INSERT diretamente e FET_BUF_SIZE=0
      Tempo de 5 min 40 segundos
      Teve mesmo comportamento que o teste com IDS 11.10
    • Fazendo chamadas de INSERT diretamente e FET_BUF_SIZE=32767
      Teste não realizado por se esperar o mesmo resultado anterior
    • Declarando cursor INSERT, executando apenas o PUT , CLOSE, FREE e FET_BUF_SIZE=0
      Tempo de 14 segundos
      Monitorando a conexão através do tcpdump foi possivel observar que a o dado só era enviado quando o tamanho total chegava perto de 2048, gerando portanto menos pacotes(14813 pacotes com media de 1448 bytes cada)
      Servidor enviou: 4945 pacotes
      Cliente enviou: 9868 pacotes
    • Declarando cursor INSERT, executando apenas o PUT , CLOSE, FREE e FET_BUF_SIZE=32767
      Tempo de 6 segundos
      Monitorando a conexão através do tcpdump foi possivel observar que a o dado só era enviado quando o tamanho total chegava perto de 2048, gerando portanto menos pacotes(9563 pacotes com media de 1448 bytes cada)
      Servidor enviou: 2137 pacotes
      Cliente enviou: 7426 pacotes
      ATENÇÃO: O resultado dos dois testes acima foram fora do esperado, mas foi o que de fato ocorreu. O tamanho do pacote se manteve o mesmo devido o MTU porém a diferença entre a quantidade de pacotes enviado/recebido foi de 40% devido a alteração no tamanho pacote, influenciando assim a quantidade de confirmação de recebimento pelo servidor...
  3. Sistema Operacional Linux open SuSE , banco IDS 11.10 UC1 Developer, aplicação I-4GL executando na mesma maquina e acessando o banco através da conexão IPC STR.
    Incluindo 32 mil registros de 322 bytes em uma unica transação.
    Observação: Devido o teste ser com IPC, não tem como monitorar a quantidade de pacotes. (pelo menos ainda não descobri como)
    • Fazendo chamadas de INSERT diretamente e FET_BUF_SIZE=0
      Tempo de 39 segundos
    • Fazendo chamadas de INSERT diretamente e FET_BUF_SIZE=32767
      Tempo de 36 segundos
    • Declarando cursor INSERT, executando apenas o PUT , CLOSE, FREE e FET_BUF_SIZE=0
      Tempo de 10 segundos
    • Declarando cursor INSERT, executando apenas o PUT , CLOSE, FREE e FET_BUF_SIZE=32767
      Tempo de 10 segundos

Foi realizado os seguintes testes com FET_BUF_SIZE, com SELECTs


  1. Sistema Operacional Linux open SuSE , banco IDS 11.10 UC1 Developer, aplicação I-4GL executando na mesma maquina e acessando o banco através da conexão TCP no loopback e pela placa de rede com e sem parametro "b" especificado no SQLHOSTS. Portanto utilizando o tamanho 4 KB(padrão) e 32 KB de buffer.
    Selecionando registros de 322 bytes
    • sqlhosts b= . Declarando o SELECT como FOR READ (default do declare) e executando com FOREACH, FET_BUF_SIZE=0
      A cada "foreach" executado, trouxe em um único pacote 11 registros, onde cada pacote com tamanho de 3962 bytes.
      6 segundos para ler 117158 registros. 19553 pacotes
    • sqlhosts b= . Declarando o SELECT como FOR READ (default do declare) e executando com FET_BUF_SIZE=32767
      A cada "foreach" executado, trouxe em 8 (oito) pacotes com 12 ou 13 registros cada, cada pacote com tamanho de 4096 bytes.
      5 segundos para ler 117158 registros. 14909 pacotes
    • sqlhosts b=32767 . Declarando o SELECT como FOR READ (default do declare) e com FOREACH, FET_BUF_SIZE=0
      A cada "foreach" executado, trouxe em um único pacote 11 registros, onde cada pacote com tamanho de 3962 bytes.
      6 segundos para ler 117158 registros. 19552 pacotes
    • sqlhosts b=32767 . Declarando o SELECT como FOR READ (default do declare) e com FOREACH, FET_BUF_SIZE=32767
      A cada "foreach" executado, trouxe em um único pacote 11 registros, onde cada pacote com tamanho de 3962 bytes.
      5 segundos para ler 117158 registros. 4760 pacotes

Foi realizado os seguintes testes com FET_BUF_SIZE, com SELECTs FOR UPDATE


  1. Sistema Operacional Linux open SuSE , banco IDS 11.10 UC1 Developer, aplicação I-4GL executando na mesma maquina e acessando o banco através da conexão TCP no loopback e com parametro b= especificado no SQLHOSTS.
    Portanto utilizando o tamanho 32 KB de buffer.
    Selecionando registros de 322 bytes
    • sqlhosts b=32767 . Declarando o SELECT como FOR UPDATE e com FOREACH, FET_BUF_SIZE=32767
      Não foi calculado o tempo total, foi apenas observado os pacotes de rede.
      Foram gerados 10 pacotes (2 p/ select, 8 p/ updates) para cada foreach e update executado. Portanto não se tem efeito do b= + FET_BUF_SIZE.

0
Ainda não votado
Sua avaliação: Nenhum

Comentar

O conteúdo deste campo é privado não será exibido ao público.
  • Endereços de páginas de internet e emails viram links automaticamente.
  • Você pode usar tags BBCode no texto.
  • Tags HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>

Mais informações sobre as opções de formatação

CAPTCHA
Este teste é para bloquear programas automatizados e previnir spams
CAPTCHA de Imagem
Digite o texto exibido na imagem.