Hola
Tengo un servidor linux ejecutando firebird 1.5.6 SS . He revisado los parámetros del fichero firebird.conf para optimizar el DefaultDBCahePage a 10240 para tomar algunas páginas más de las 2048 por que trae por defecto.
El tema es que el servidor al ejecutar determinadas consultas se pone al 100% y deja al resto de los equipos inoperativos.
He revisado dichas consultas y están optimizadas. De hecho los analizadores marcan que todas las consultas se realizan mediante índices.
En cualquier caso, con independencia de que la consulta tarde más o menos, lo que no entiendo es porque se quedan bloqueados el resto de los equipos, poniéndose el servidor al 100% de la cpu. ¿No debería ir más lento pero no bloquearse?
La cuestión es que me pasa en servidores diferentes así que pienso que es un problema del Firebird. He buscado el error en ibphoenix pero no he conseguido solucionarlo con las indicaciones:
http://www.firebirdfaq.org/faq312/
ya que la instrucción que ejecuto es un select con joins entre tablas.
La consulta que ejecuto desde el IBExpers:
Código:
select cabalbcli.ncentro, linalbcli.carticulo, linalbcli.ncod_albaran, linalbcli.ccod_serie,
linalbcli.ncod_orden,cabalbcli.npuntoventa, cabalbcli.ncliente, cabalbcli.dfecha,
linalbcli.ncantidad1, linalbcli.ncantidad2, linalbcli.ncantidadvalor, cabalbcli.ntipoop
from cabalbcli, linalbcli, articulos, artifabr, multipuntosventa
where
cabalbcli.ncod_albaran = linalbcli.ncod_albaran and cabalbcli.ccod_serie = linalbcli.ccod_serie and
linalbcli.carticulo = articulos.ccod_articulo and artifabr.ccod_articulo=articulos.ccod_articulo and
artifabr.ncod_fabricante = 1 and artifabr.lprincipal=1
and multipuntosventa.ncod_puntoventa=cabalbcli.npuntoventa
and multipuntosventa.ncod_fabricante=1 and
cabalbcli.lfacturable=0 and cabalbcli.ntipoop=2 and
linalbcli.lenvase=0 and linalbcli.ncantidadvalor < 0 and artifabr.csureferencia is not null
and multipuntosventa.nptovtaserv is null
and (linalbcli.ctipolinea='V' or linalbcli.ctipolinea='P' or linalbcli.ctipolinea='R')
and linalbcli.nenlacefab is null and (cabalbcli.dfecha >= '10/01/10' and cabalbcli.dfecha <= '10/31/10')
order by linalbcli.carticulo, linalbcli.ncod_orden, linalbcli.ccod_serie, linalbcli.ncod_albaran
El plan que me propone son todas las consultas indexadas:
PLAN SORT (SORT (JOIN (CABALBCLI INDEX (FK_CALCLI_TIPOPE,IDX_CALCLI_FECHA),LINALBCLI INDEX (FL_LINALBCLI_ENLACEFAB,FK_LALCLI_CALCLI),ARTIFABR INDEX (PK_ARTIFABR),ARTICULOS INDEX (PK_ARTICULOS),MULTIPUNTOSVENTA INDEX (FK_MULPTOVTA_SERPTOVTA,PK_MULTIPUNTOSVENTA))))
No sé que más puedo mirar.
Gracias.