Testes práticos de performance com FET_BUF_SIZE e opção "b" do SQLHOSTS
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
- 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)
- Fazendo chamadas de INSERT diretamente e FET_BUF_SIZE=0
- 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...
- Fazendo chamadas de INSERT diretamente e FET_BUF_SIZE=0
- 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
- Fazendo chamadas de INSERT diretamente e FET_BUF_SIZE=0
Foi realizado os seguintes testes com FET_BUF_SIZE, com SELECTs
- 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
- sqlhosts b= . Declarando o SELECT como FOR READ (default do declare) e executando com FOREACH, FET_BUF_SIZE=0
Foi realizado os seguintes testes com FET_BUF_SIZE, com SELECTs FOR UPDATE
- 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.
- sqlhosts b=32767 . Declarando o SELECT como FOR UPDATE e com FOREACH, FET_BUF_SIZE=32767
- 322 leituras
Tags:





Comentar