Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-11-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
Hola.

Lo primero que te recomiendo es que utilices Joins explícitos, como te recomienda el compañero. Facilita mucho la comprensión de la consulta, y por tanto la optimización de la misma.

Respecto a los índices, el hecho de que la consulta utilice índices para todas las tablas no quiere decir que esos índices sean óptimos. Está claro que en alguna tabla se podría crear una índice que agilizaría mucho más la consulta de lo que hacen los índices actuales.

En todo caso, ante una consulta tan sencilla. Puedes simplemente ir por partes.

Empieza por :

Código SQL [-]
select cabalbcli.ncentro
from cabalbcli
where cabalbcli.lfacturable=0  and cabalbcli.ntipoop=2 and
        (cabalbcli.dfecha >= '10/01/10' and cabalbcli.dfecha <= '10/31/10')

Y después le vas añadiendo una a una las tablas relacionadas.

Código SQL [-]
select cabalbcli.ncentro
from cabalbcli
        inner join linalbcli on  cabalbcli.ncod_albaran = linalbcli.ncod_albaran and cabalbcli.ccod_serie = linalbcli.ccod_serie
where cabalbcli.lfacturable=0  and cabalbcli.ntipoop=2 and
        (cabalbcli.dfecha >= '10/01/10' and cabalbcli.dfecha <= '10/31/10') and
        linalbcli.lenvase=0 and linalbcli.ncantidadvalor < 0  and 
        (linalbcli.ctipolinea='V' or linalbcli.ctipolinea='P' or linalbcli.ctipolinea='R') and
        linalbcli.nenlacefab is null

Cuando la consulta se bloquee, ya sabes en que unión tienes que añadir un índice que permita localizar rapidamente sus registros.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #2  
Antiguo 15-11-2010
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 24
sur-se Va por buen camino
Hola.
Gracias a todos. Habéis acertado con la solución al 100%.
Me puse a fraccionar e investigar la SQL con detalle hasta que di con el problema. El join con artifabr era la causa del problema.
Esta table tiene un clave primaria por cod_articulo y cod_fabricante, pero adicionalmente tiene una clave referencia en cod_fabricante a la tabla de FABRICANTES.
El problema es que el plan que utiliza firebird toma como índice de búsqueda para artifabr la clave referencial por fabricante, en lugar de tomar la clave primaria con artículo y fabricante PLAN ... ARTIFABR INDEX (FK_ARTFAB_FABRIC)
y aunque yo le indico que tome ARTIFABR INDEX (PK_ARTIFABR), no lo hace y da error ( ahora que me doy cuenta puse mal el plan que sale en el post inicial).
Al cambiar la consulta a left joins, ahora si está tomando el índice correcto y la consulta ha pasado de tardar 352 segundos a tardar 16 milisegundos (si lo he escrito bien de 5 minutos a menos de un 1 segundo). Increible pero cierto...

De todas formas, con independencia de la consulta SQL. Lo que sigo sin entender es por qué Firebird pone la CPU al 100% y deja a los demás equipos tirados. ¿No debería compartir la carga de trabajo con los otros equipos y simplemente hacer que tarde un poco más la consulta lenta?
Gracias por la magnifica ayuda prestada por todos.
Responder Con Cita
  #3  
Antiguo 15-11-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.679
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por sur-se Ver Mensaje
[..] De todas formas, con independencia de la consulta SQL. Lo que sigo sin entender es por qué Firebird pone la CPU al 100% y deja a los demás equipos tirados. ¿No debería compartir la carga de trabajo con los otros equipos y simplemente hacer que tarde un poco más la consulta lenta?
Gracias por la magnifica ayuda prestada por todos.
La solución te la hemos dado antes, instala la versión classic server.
Responder Con Cita
  #4  
Antiguo 19-11-2010
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 23
rastafarey Va por buen camino
Resp

Primero te recoiendo que uses la version clsi server ya que la superserver en linux segun mi punto de vista le estas poniendo hacer un trbajo que de por si el sitem aoperativo lo hace solo que es manear los hilos. y segundo deberias por lo menos decirnos las estructuras de las tablas. Quisas te falte algun indice o algo por estilo.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #5  
Antiguo 19-11-2010
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 24
sur-se Va por buen camino
Hola. Gracias por las respuestas.
La verdad es que la decisión de instalar una u otra versión se basa en esta documentación:
http://www.firebirdsql.org/manual/es/qsg15-es-classic-or-super.html

Para linux, dice que da igual cual elija que no habrá diferencia de rendimiento, así que opté por la solución que parece ser la que se va a desarrollar, o sea la superserver. De todas formas haré lo que decís y lo pasaré a la versión classic server a ver si así va mejor.
Un saludo.
Responder Con Cita
  #6  
Antiguo 19-11-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.679
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cierto, pero la experiencia dice que no es así, instala la classic, verás la diferencia.
Y si el servidor tiene más de un micro o es dual, entonces notarás una diferencia muy muy significativa.
Responder Con Cita
  #7  
Antiguo 19-11-2010
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 24
sur-se Va por buen camino
Hola.
En el caso de un servidor monoprocesador, ¿crees que también se notará mucho el rendimiento? Supongo que en ese caso seguirá prácticamente igual ¿no?.
De todas formas gracias de nuevo a todos por la ayuda.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
PHP-Barcode en un servidor Linux maro PHP 7 07-11-2007 20:01:54
intraweb y servidor linux jgutti Internet 3 25-04-2005 23:09:38
Servidor de Correo en Linux COCOL Linux 1 22-04-2005 16:13:33
Como hacer un shares en un Servidos Linux para que otro Servidor Linux .... FernandoFAI Linux 0 15-04-2004 09:33:07
Servidor Unix Linux Omar Alejandro Varios 1 25-09-2003 04:13:45


La franja horaria es GMT +2. Ahora son las 04:53:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi