[firebase-br] Teste de performance FB 1.5 vs. 2.0 (meus ajustes)

Caio Oliveira news em caiosistemas.com.br
Qua Dez 6 19:04:34 -03 2006


Olá Murilo,

Quanto à isso não tem problemas, estamos usando normalmente e é bom 
mesmo!. Na verdade como os dois indices (embora do mesmo campo) têm 
características diferentes, o otimizador do FB resolve sem problemas.

Sds,

Caio Oliveira

Murilo >>> CPR Sistemas escreveu:
> E quanto a indices Ascedente e Decescente sobre o mesmo campo, segundo o 
> livro do Firebird (Dominando o Firebird), isso é bom, pois o mesmo "se vira" 
> em pegar o melhor para cada caso, no 2.0 isso também é ruim?
> 
> 
> 
> 
> 
> 
> "Caio Oliveira" <news em caiosistemas.com.br> 
> escreveu na mensagem news:el728d$kkj$1 em sea.gmane.org...
> Olá Humberto,
> 
> Será um prazer; segue abaixo, as mudanças que tive que executar no
> código para que as SQL funcionassem:
> 
> ------------
> Problema 01: Dois indices para o mesmo campo na tabela
> (na verdade esse era um erro de projeto)
> ------------
> O principal problema, onde ocorreu um queda de performance radical em
> algumas consultas foi devido à um erro de construção dos índices da base
> de dados onde uma tabela estava indexada duas vezes pelo mesmo campo (os
> índices eram de nomes diferentes e passou despercebido na época). Havia
> postado esse problema na lista na época e o Cantú me pediu para enviar o
> PLAN da consulta, logo que olhei o PLAN percebi o problema.
> 
> Obs.: Isso ocorreu ainda na RC4, não verificamos se na versão atual
> (definitiva) o FB2 consegue contornar um problema desses. Mas, se não
> contornar, agora estamos de olho!.
> 
> -------------
> Problemas 02: Cláusulas "not in" com "HAVING"
> -------------
> Um dos problemas que tive foi com algumas "SQL" que usavam a cláusula
> "HAVING" que passaram à funcionar de foram errada quando instalei o FB2;
> segue abaixo o código anterior com problemas e o código corrigido em
> seguida:
> 
> // Nao funcionou; retornava dados inconsistentes.
> select nf_data, sum( a.nf_vtotal ) AS FATURAMENTO,
> sum( a.custo ) AS CUSTO, sum( a.nf_vtotal - a.custo ) AS LUCROBRUTO
> from cepnt_custovenda a
> left join crvd001 v ON (v.numero = a.nf_nven)
> where a.nf_data between :data1 and :data2
>           and (not a.nf_ncli in
>          (
>          select tmp.codcli from cepemp01 tmp
>          GROUP by tmp.codcli
>          HAVING COUNT(tmp.codcli) > 0
>          ))
> group by 1 order by 1
> 
> Obs.: Repare no código acima; onde é utilizamos o "not in" em conjunto
> com o Having; quando o codigo do cliente era nulo (ex. consumidor) a SQL
> se perdia.
> 
> // Funcionou após alteração (comentada abaixo):
> select nf_data, sum( a.nf_vtotal ) AS FATURAMENTO,
> sum( a.custo ) AS CUSTO, sum( a.nf_vtotal - a.custo ) AS LUCROBRUTO
> from cepnt_custovenda a
> left join crvd001 v ON (v.numero = a.nf_nven)
> where a.nf_data between :data1 and :data2
>           and (not a.nf_ncli in
>          (
>          select tmp.codcli from cepemp01 tmp
>          GROUP by tmp.codcli
>          HAVING COUNT(tmp.codcli) > 0
>          ) or a.nf_ncli is null)
> group by 1 order by 1
> 
> Obs.: Repare que na mesma condição incluímos agora um "or a.nf_ncli is
> null"; verificando se o cliente é nulo, resolvendo assim o problema.
> 
> ------------
> Problema 03: Usávamos "ROWS" como variável em algumas PROCEDURES
> ------------
> "ROWS" é agora uma palavra reservada para o FB2; assim como várias
> outras que entraram na lista (ver Release Notes). Inicialmente o FB2 não
> acusou problema (continuaram funcionando as procedures); mas, quando
> geramos uma exportação do Metadados (usando o IBExpert, fazemos isso de
> vez em quando) o FB acusou esses erros; basta executar uns "ALTER
> PROCEDURE" mudando o nome da variável e ficou tudo resolvido. Na verdade
>   acho que nunca deveria ter usada o "ROWS" (onde estava com a cabeça?
> rsrs).
> 
> ------------
> Problema 04: SQL usando apelidos (erro de sintaxe).
> ------------
> Não tivemos problemas com isso, mas, só para constar, já que vimos
> algumas mensagens na lista com problemas relacionados ao uso de apelidos
> nas tabelas.
> 
> Existem algumas regras impostas no FB2 para que não façamos "bagunça" no
>   código da SQL; dentre elas:
> 
> 1) Quando usar apelidos para as tabelas, os nomes dos campos dessa
> tabela sempre terão que estar acompanhados do apelido na SQL.
> 
> Ex.:
> // correto
> select a.campo1, a.campo2, a.campo3 from tabela a
>        left join tabela b ON (b.campo1 = a.campo1)
> 
> // incorreto (mesmo que a tabela "b" não possua um "campo3")
> select a.campo1, a.campo2, campo3 from tabela a
>        left join tabelab b ON (b.campo1 = a.campo1)
> 
> 2) Não é possível mais usar o nome da tabela e o apelido ao mesmo tempo
> para referenciar os campos da mesma na consulta.
> 
> // correto
> select a.campo1, a.campo2, a.campo3 from tabela a
>        left join tabela b ON (b.campo1 = a.campo1)
> 
> // incorreto
> select tabela.campo1, tabela.campo2, a.campo3 from tabela a
>        left join tabelab b ON (b.campo1 = a.campo1)
> 
> 
> Espero ter ajudado.
> 
> Sds, Caio Oliveira
> 
> 
> Humberto Silva Reis Jr. escreveu:
>> Olá Caio,
>>
>> Obrigado pelo depoimento. Vc. poderia me exemplificar quais mudanças que 
>> te
>> obrigaram a modificar as suas consultas?
>>
>> Desde já agradeço a sua atenção
>>
>> Em 06/12/06, Caio Oliveira 
>> <news em caiosistemas.com.br> escreveu:
>>> Olá Humberto,
>>>
>>> Estamos migrando todos os clientes para o FB2; após um período de
>>> acompanhamento em alguns clientes, tivemos apenas alguns pequenos
>>> problemas com algumas consultas SQL (todas as que deram problemas
>>> estavam mau construídas); isso devido à algumas mudanças importantes
>>> realizados no FB2, como o Eduardo lhe disse, esse é o único cuidado que
>>> se deverá tomar; alêm, é claro, os cuidados com o backup e restore
>>> durante a instalação.
>>>
>>> No mais, no geral, para nós aqui têm sido uma mudança importante e, não
>>> gostaríamos de usar o FB1.5 novamente! (rsrs).
>>>
>>> abraços!
>>>
>>> Caio Oliveira
>>>
>>> Humberto Silva Reis Jr. escreveu:
>>>> Alguem já postou na lista alguma coisa ?
>>>> ______________________________________________
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>> Para editar sua configuração na lista, use o endereço
>>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para editar sua configuração na lista, use o endereço
>>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para editar sua configuração na lista, use o endereço 
>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 
> 
> 
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista