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 16-02-2021
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 531
Poder: 24
IVAND Va por buen camino
http://tracker.firebirdsql.org/browse/CORE-4680
Buscando por ahi algo de lo mio indican que es algo con los eventos , salvo que no este entendiendo bien lo que ahi indican , voy a probar quitando eso , gracias
__________________
IVAND
Responder Con Cita
  #2  
Antiguo 08-07-2021
Avatar de NetVicious
NetVicious NetVicious is offline
Registrado
 
Registrado: sep 2010
Posts: 1
Poder: 0
NetVicious Va por buen camino
Ese error dice que hay un problema de comunicación entre el cliente (la aplicación) y el servidor.


O bien es un problema de red, o lo más seguro que sea es que estás intentando conectar con un servidor que utiliza la versión 3.0 pero estás utilizando una librería fbclient.dll más vieja (por ejemplo de la 2.5).


Mira la versión del motor de base de datos e intenta poner al lado del ejecutable de delphi la DLL de cliente de la misma versión.
Responder Con Cita
  #3  
Antiguo 04-06-2022
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 531
Poder: 24
IVAND Va por buen camino
Estimados amigos
Abro nuevamente este tema pues ha vuelto a aparecer esas caidas de firebird 2.5 aun no logro entender , no se si a algun companero le ha pasado , cualquier cosa estoy pendiente a sus consejos


en github hay algo del tema de un bug de firebird , pero debido a mi poca experiencia no logro entender

https://github.com/FirebirdSQL/firebird/issues/4989

lo q hago ahora es reiniciar firebird ,pero se hay una consulta que he revisado que se tarda un mundo en ejecutarse cada vez que pasa ese problema
Código SQL [-]
select cod_producto,nombre,precioa,preciob,precioc,preciod,PORC1,UBICACION,APLICA_IVA,FRACCION,
p.saldo_fac,operativo,pordes,
case aplica_iva
  When 'S' Then
      Precioa+(Precioa*e.iva/100)
  Else
     Precioa
End PrecioIvaA ,
case aplica_iva
  When 'S' Then
      Preciob+(Preciob*e.iva/100)
  Else
     Preciob
End PrecioIvaB ,
case aplica_iva
  When 'S' Then
      PrecioC+(PrecioC*e.iva/100)
  Else
     PrecioC
End PrecioIvaC ,
case aplica_iva
  When 'S' Then
      PrecioD+(PrecioD*e.iva/100)
  Else
     PrecioD
End PrecioIvaD,cod_barra,p.key_producto,p.peso,p.bloqueo_cambio_precio,p.tipo_accion,z(p.saldo_fraccion) saldo_fraccion
,(select t.descripcion from tabla t where t.key_hijo=p.cod_marca) Marca
From   empresa e,producto p
Where e.key_empresa=p.key_empresa
and   p.key_empresa=:Key_empresa
And    Upper(nombre) like :Nombre

Esta consulta se ejecuta en la aplicacion mas usada en esa empresa , cuando esa consulta se ejecuta de manera normal ya todo vuelve a su funcionamiento normal
Eso es lo que he nota

Nota Importante : No uso Eventos en mi base de datos

Conocen uds algun sitio o empresa que me pueda evaluar este problema estoy seguro que se trata de algun problema de base y no de mi sistema , ya he revisado todo los problemas de transacciones de deadloop y todo eso

Agradecido quedo en espera de sus comentarios
__________________
IVAND
Responder Con Cita
  #4  
Antiguo 04-06-2022
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Hemos indicado algunas posibilidades de lo que puede suceder, no tiene nada que ver con una sentencia sql, y no has comentado nada al respecto.
Además dices que "cuando esta sentencia se ejecuta de una manera normal", ¿eso qué quiere decir? ¿hay alguna manera anormal de ejecutarla?
Y pasas un enlace a un problema deadlock, ¿tienes ese problema también? porque no habías dicho nada de eso.

Ese código de error, como hemos indicado antes, tiene que ver con problemas de conexión entre algún cliente y el servidor.
Además necesitamos mucha más información para poder ayudar con más seguridad, por ejemplo: cuando dices que firebird se cae (aunque yo nunca he visto que se caiga firebird), ¿nadie tiene acceso al servidor o algún cliente sí tiene acceso al servidor? Si nadie tiene acceso al servidor entonces es posible que sea problema de red en el propio servidor.
En fin, lo dicho, que con la información que nos has dado solamente podemos indicar un culpable: tarjeta de red, cable de red, wifi (si hay conexiones wifi), etc.
Responder Con Cita
  #5  
Antiguo 04-06-2022
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Porque supongo que no tendrás limitado el número de conexiones, ¿habéis cambiado algo en la configuración?
De todas formas eso limitaría conexiones, pero no detiene el servidor.

Recuerdo una vez en una empresa que alguien había creado una conexión ssh con el servidor para hacer mantenimiento desde remoto, y cuando cerraba la conexión ssh tenía puesto que se reiniciara el servidor.
Responder Con Cita
  #6  
Antiguo 05-06-2022
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 531
Poder: 24
IVAND Va por buen camino
Hola Casimiro , nuevamente gracias por la atencion

A ver te explico lo mejor q pueda , en el log de firebird me indica que el servidor se detiene (Caer es un termino que usamos para indicar una parada del servidor ) , ahora no entiendo es porque sucede eso , segun lo que indican es un bug de firebird que aun se extiende a la version 3 , toca reiniciar el servicio para q el sistema funcione nuevante , pero lo que he notado que en esa consulta despues que me da ese error , se pone extremadamente lenta , pasando unos 5 minutos ya se puede trabajar nuevamente rapido con todo el sistema

La sentencia no tiene nada que ver en realidad , solo indico que mientras el servidor no se detenga de esta manera esa consulta funciona bien , cuando se detiene con el error que indico , se vuelve extremadamente lenta una vez que el servicio se reinicia , pareceria como q los indices se danan o algo asi

Cable , tarjeta y esas cosas no son el problema realmente
Paso el enlace porque ahi sabe excatemente lo que me pasa a mi de vez en cuando y no entiendo porque puede pasar
Espero haber explicado un poco mejor
__________________
IVAND
Responder Con Cita
  #7  
Antiguo 05-06-2022
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Veamos, el enlace que has puesto parece que se trata de alguien que está ejecutando una versión superserver en windows, y además una versión superserver en linux pero con wine, un "emulador" de windows. Es algo que no tiene sentido, si se usa linux entonces instala firebird para linux, pero no "inventos raros". Además el título de "deadlock" parece que no tiene nada que ver con lo que cuenta después.
También le contestan repetidamente que no logran reproducir/repetir el problema que tiene esa persona en su sistema y le indican que puede ser algo producido en su entorno.
Además habla de "eventos", algo que dices que tú no usas.

Como no puedo ver el sistema que tienes instalado, puedo dar algunos consejos.
- Detener todas las conexiones, y si hace falta le quitas el cable de red al servidor, para estar seguro de que nadie conecta (y si conectan por wifi, lo deshabilitas también).
- Haces una copia de la BD, y guardas la original aparte, esa ya no la toques.
- Sobre la copia haces un backup transportable (gbak -b -t ...)
- Si no ha dado ningún error es que está bien la BD. Si ha dado algún error entonces hay que solucionarlo antes de dar los siguientes pasos.
- Desinstalas la versión de firebird que tienes instalada.
- Instalas la última versión superclassic de firebird 3 (aunque yo instalaría la última de la v4), no instales la superserver, esa está más pensada para windows.
- Restauras el backup.
- En los clientes instala fbclient de la versión 3, no dejes el de la v2.

Ahora dependiendo de algunos factores que desconozco haría unos cambios:
- ¿Cuánto ocupa la BD?
- ¿Cuántos usuarios/conexiones tiene normalmente?

Si tienes muchas conexiones entonces aumenta la memoria RAM del servidor.
Algo importante, instala otro disco SSD en el servidor, y luego en la configuración de firebird (firebird.conf) cambia el directorio temporal hacia ese disco, algo como:
TempDirectories = /mnt/disk2/temp

Por lo demás, puedo decir que utilizo firebird desde que existe (y antes interbase, pues firebird salió de la versión libre interbase 6) y mi tranquilidad es total con todos los clientes, desde 1998 he instalado firebird en empresas de todos los tamaños, algunas tienen BD de muchos gigas y nadie ha llamado nunca con un problema en la BD, salvo por discos rotos y cosas así que no tiene culpa la BD. En el último trabajo son al menos 3000 clientes con varias conexiones cada una, y nadie llama por problemas con la BD.
Por eso me extraña muchísimo lo que cuentas, debe ser algo muy localizado en el entorno que tienes, pero no podemos adivinar.
Responder Con Cita
  #8  
Antiguo 23-06-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Poder: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
¿Has probado la consulta con los datos que busca el cliente que tarda mucho?

Prueba la misma consulta con algunas variaciones

Asigna ALIAS prefijo a todos los campos para evitar alguna ambigüedad que pueda haber.

Código SQL [-]
select ?.cod_producto, ?.nombre, precioa, ?.preciob, ?.precioc, ?.preciod, ?.porc1, ?.ubicacion, ?.aplica_iva, ?.fraccion, p.saldo_fac,
       ?.operativo, ?.pordes,
       case ?.aplica_iva
         when 'S' then
             ?.precioa + (?.precioa * e.iva / 100)
         else ?.precioa
       end ?.precioivaa,
       case ?.aplica_iva
         when 'S' then
             ?.preciob + (?.preciob * e.iva / 100)
         else ?.preciob
       end ?.precioivab,
       case ?.aplica_iva
         when 'S' then
             ?.precioc + (?.precioc * e.iva / 100)
         else precioc
       end ?.precioivac,
       case ?.aplica_iva
         when 'S' then
             ?.preciod + (?.preciod * e.iva / 100)
         else ?.preciod
       end ?.precioivad,
       ?.cod_barra, p.key_producto, p.peso, p.bloqueo_cambio_precio, p.tipo_accion, z(p.saldo_fraccion) saldo_fraccion,
       (select t.descripcion
        from tabla t
        where
        t.key_hijo = p.cod_marca) marca
from empresa e
join producto p on e.key_empresa = p.key_empresa
where
p.key_empresa = :key_empresa and
upper(?.nombre) like :nombre

Prueba con JOIN, LEFT JOIN, y diferente orden de tablas

Código SQL [-]
select ... 
from empresa e
join producto p on e.key_empresa = p.key_empresa
where
/**/p.key_empresa = :key_empresa and
upper(?.nombre) like :nombre

Código SQL [-]
select ... 
from empresa e
join producto p on e.key_empresa = p.key_empresa
where
/**/e.key_empresa = :key_empresa and
upper(?.nombre) like :nombre

Código SQL [-]
select ... 
from producto p
/**/LEFT join empresa e on e.key_empresa = p.key_empresa
where
p.key_empresa = :key_empresa and
upper(?.nombre) like :nombre

Código SQL [-]
...
       ?.cod_barra, p.key_producto, p.peso, p.bloqueo_cambio_precio, p.tipo_accion, z(p.saldo_fraccion) saldo_fraccion,
       /**/t.descripcion marca/**/
from empresa e
join producto p on e.key_empresa = p.key_empresa
/*JOIN o LEFT JOIN*/
/**/join tabla t on t.key_hijo = p.cod_marca*//*
where
p.key_empresa = :key_empresa and
upper(?.nombre) like :nombre

¿Qué es la función z()?
Puede ser que esté haciendo algo que tarde mucho.
Si es una UDF, pueda que tenga un error dentro y esté tirando abajo el servidor (división por 0, por ejemplo)

¿Qué indices tienen las tablas?
Por lo menos debería haber
  • TABLA.KEY_HIJO
  • EMPRESA.KEY_EMPRESA
  • PRODUCTO.KEY_EMPRESA

¿Has probado recalcular la selectividad de los índices?
Código SQL [-]
/*Recalculo de selectividad de indice PRODUCTO_KEY_IDX de la tabla PRODUCTO*/
SET STATISTICS INDEX PRODUCTO_KEY_IDX

¿Has revisado el PLAN que devuelve la consulta?
Puede que te de una pista de donde pasa el tiempo buscando datos.

¿Cuantos registros tiene cada tabla?
Si utilizas LEFT JOIN podrías unir la que menos registros tiene a la que mas, para evitar recorrer la que más registros tiene.

Una posible solución es a veces transformar el SQL en un procedimiento.
Código SQL [-]
create procedure dame_datos (
    key_empresa integer)
returns (
    ...)
as
declare variable...;
begin
    for select...
        from empresa
        where
        key_empresa = :key_empresa
        into...
        order by...
    do
    begin
        for select cod_marca, ...
            from producto
            where
            key_empresa = :key_empresa
            into :cod_marca, ...
        do
        begin
            select descripcion
            from tabla
            where
            key_hijo = :cod_marca
            into :descripcion;

            -- Calculo de precios
            ---

            suspend;
        end
    end
end

/* y luego */
select * from dame_datos(:key_empresa)

Última edición por duilioisola fecha: 23-06-2022 a las 17:08:13.
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
Entender Firebird 3.... Neeruu Varios 4 25-04-2018 13:47:42
TRichEdit, TStringStream y cierto error que no logro "cachar"... TiammatMX OOP 2 12-05-2012 00:36:18
consulta mysql que no logro entender gulder MySQL 2 14-02-2012 14:54:51
Sigo sin entender el error... gandalf_27 C++ Builder 1 11-06-2006 16:35:46
Entender una sentencia Renees Varios 5 02-09-2005 19:35:01


La franja horaria es GMT +2. Ahora son las 23:32:13.


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