Responder a este comentário
O buffer especificado pelo FET_BUF_SIZE é compartilhado entre os cursores?
O objetivo aqui é identificar como o FET_BUF_SIZE trabalha quando houver mais de um cursor de insert ou update. Se todos os cursores compartilham o mesmo buffer ou não (insert buffer) .
Este teste é importante para o desenvolvedor em situações que esta variável ( FET_BUF_SIZE ) é parametrizado com intuição de melhorar performance da aplicação que realiza muita inclusão de dados. A importância está não só na performance , mas no tratamento de erros , onde o desenvolvedor poderá ou não ter controle sobre qual tabela ocorreu um erro.
Para mais informações sobre esta variável e os cuidados ao utiliza-la, leia este post
Testes realizado com Informix 4GL, sempre na mesma transação:
- TESTE 1
# Rascunho do código utilizado begin work; declare de SELECT FOR UPDATE FOREACH <cursor> update WHERE CURRENT OF <cursor> cursor de INSERT na mesma tabela END FOREACH; commit work;
Para cada FOREACH e UPDATE os dados foram enviados linha a linha, já os INSERTS só foram enviado quando o buffer encheu. - TESTE 2
# Rascunho do código utilizado begin work; declare de SELECT FOR UPDATE FOREACH <cursor> update WHERE CURRENT OF <cursor> cursor A de INSERT na tabela Tab_A cursor B de INSERT na tabela Tab_B END FOREACH commit work;
Para cada FOREACH e UPDATE os dados foram enviados linha a linha, já os INSERTS foram enviado separadamente e independentemente de cada cursor, quando o buffer encheu.
Lembrando que o tamanho do buffer é definido pela variável FET_BUF_SIZE , o tamanho dele é igual para as duas tabelas (Tab_A e Tab_B), porém como as tabelas podem ter o tamanho de registro diferentes (uma com 5 colunas e 50 bytes outra com 15 colunas e 250 bytes) o insert buffer de cada cursor irá ser preenchido em diferentes momentos.
- 203 leituras




