Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-02-2021
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 524
Poder: 22
IVAND Va por buen camino
Caída o error de Firebird que no logro entender

Estimados amigos ,, desde hace un par de meses estoy experimento este tipo de error en firebird , servidor de 16 g en ram disco de 1 T , ubuntu 18 , si alguien me puede dar una luz , tenemos 10 maquinas trabajando en forma permanente 8 horas diarias en facturacion la carga es la misma de hace dos meses atras no hay nada distinto solo que ahora sale ese error y se reinicia el servicio de firebird

server-casanova Sat Feb 13 15:47:46 2021 Shutting down the server with 68 active connection(s) to 2 database(s), 0 active service(s)


Tambien en el log de firebird encontramos siempre este mensaje

INET/inet_error: read errno = 104

Gracias por su tiempo
__________________
IVAND

Última edición por IVAND fecha: 13-02-2021 a las 22:03:07. Razón: Mejorar la pregunta
Responder Con Cita
  #2  
Antiguo 14-02-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Así, sin más información, diría que se está ejecutando un script para detener el servidor.
Algo así como gfix -shut
Mira los parámetros que admite.
También puede ser que esté dañada la BD, no debería cerrarse por eso, pero al menos verifícala con gfix.

Cita:
La desconexión del cliente del servidor. Si el texto de error contiene con (Cliente), significa que la aplicación cliente perdió su conexión con el servidor y anotó este hecho en el registro.
Si el texto de error contiene (Servidor), significa que el servidor perdió la conexión con el cliente y lo informó al firebird.log.
La razón habitual del error 10054 (104 en Linux) es una conexión inestable, por ejemplo, Wi-Fi débil.
Además, es posible ver este error si una aplicación cliente no cierra explícitamente la conexión de la base de datos, es decir, no hay un comando explícito como 'MyDB.Active: = false' al cerrar el software.
Responder Con Cita
  #3  
Antiguo 16-02-2021
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 524
Poder: 22
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
  #4  
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
  #5  
Antiguo 04-06-2022
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 524
Poder: 22
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
  #6  
Antiguo 04-06-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi 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
  #7  
Antiguo 23-06-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
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



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 03:37:04.


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