[firebase-br] Firebird 3.02 e o Problema com os PLAN

Carlos H. Cantu listas em warmboot.com.br
Sex Jun 30 09:58:11 -03 2017


Reporte o problema no tracker do Firebird para que eles analisem...
pode sim ser um problema no otimizador... mas antes de fazer isso,
aconselho vc baixar o snapshot atual do FB 3 e testar se nele o
problema persiste, pois já pode ter sido corrigido.

[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

AB> olá pessoal,
AB> fazem uns 3 meses que migrei vários clientes para o Fb3.
AB>  a principio tudo ok,
AB> mas estamos enfrentando algumas lentidoes em querys que antes no Fb 2.5
AB> tinham um bom desempenho.

AB> pelo que li aqui no fórum e no BUG tracker do Firebird mais pessoas estão
AB> com esse problema.

AB> vou mostrar um exemplo bem simples, apenas com 2 tabelas
AB> onde no meu ver o Firebird escolhe de forma errada o PLAN

AB> tenho 2 tabelas bem simples:

AB> CREATE TABLE CLIENTES (
AB>     COD_CLIENTE   DM_ID /* DM_ID = INTEGER NOT NULL */,
AB>     NOME_CLIENTE  DM_NOME /* DM_NOME = VARCHAR(60) */
AB> );
AB> ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES
AB> PRIMARY KEY (COD_CLIENTE);

AB> --------------------------

AB> CREATE TABLE VENDAS (
AB>     COD_VENDA     DM_ID /* DM_ID = INTEGER NOT NULL */,
AB>     DATA_VENDA    DM_DATA /* DM_DATA = DATE */,
AB>     CODCLI_VENDA  DM_ID /* DM_ID = INTEGER NOT NULL */
AB> );

AB> ALTER TABLE VENDAS ADD CONSTRAINT PK_VENDAS PRIMARY KEY (COD_VENDA);
AB> CREATE INDEX VENDAS_IDX_CLI ON VENDAS (CODCLI_VENDA);
AB> CREATE INDEX VENDAS_IDX_DATA ON VENDAS (DATA_VENDA);


AB> a tabela de clientes tem 2.383 registros
AB> a tabela de vendas tem 2.299.899 registros

AB> e fazendo um select simples :

AB> SELECT
AB> V.COD_VENDA,
AB> V.CODCLI_VENDA as CodCli,
AB> CL.NOME_CLIENTE
AB> FROM
AB> VENDAS V JOIN CLIENTES CL ON (V.CODCLI_VENDA = CL.COD_CLIENTE)
where v.DATA_VENDA >>= '21.06.2017'

AB> o FB acaba optando  pela busca natural da tabela de clinetes
AB> onde o mais correto no meu ver, seria utilizar a PK da tabela:

AB> PLAN JOIN (CL NATURAL, V INDEX (VENDAS_IDX_CLI, VENDAS_IDX_DATA))

AB> isso acaba dando uma diferença significativa quando a tabela de clientes
AB> tem bastante registros.

AB> fiz vários testes aqui, fiz backup e restaurei...

AB> a seletividade do indice VENDAS_IDX_CLI é de
AB> 0.0004196391091682017

AB> acredito que isso seja um BUG do otimizador do Fb 3.
AB> pois no Fb2.5 pega o PLAN correto.

AB> tenho o backup da base (8MB) se alguem quiser testar...








Mais detalhes sobre a lista de discussão lista