PDA

Ver la Versión Completa : Caída o error de Firebird que no logro entender


IVAND
13-02-2021, 21:56:51
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

Casimiro Notevi
14-02-2021, 01:08:35
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. (https://www.firebirdsql.org/pdfmanual/html/gfix-dbstartstop.html)
También puede ser que esté dañada la BD, no debería cerrarse por eso, pero al menos verifícala con gfix.

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.

IVAND
16-02-2021, 19:23:20
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

NetVicious
08-07-2021, 13:23:00
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.

IVAND
04-06-2022, 15:11:51
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

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

Casimiro Notevi
04-06-2022, 17:10:22
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.

Casimiro Notevi
04-06-2022, 20:55:38
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.

IVAND
05-06-2022, 02:50:20
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

Casimiro Notevi
05-06-2022, 10:41:22
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.

hoyosfelix
05-06-2022, 22:27:51
Hola IVAND,


Me gustaría ayudarte a resolver el problema de la caída del server.


Para entender el contexto del problema, podrías dar más datos...


Vamos a asumir que el causante de error es la consulta que enviaste.


¿Es del lado cliente?
¿Cuándo se ejecuta? Ejemplo, al momento de insert/update de una factura, al realizar commit, etc.


En sintesis pasá más info.


Saludos

mamcx
06-06-2022, 17:39:17
Hace poco tuve un problema super-estraño con un cliente. Pero afortunadamente pude demostrar que era algo dentro de la infraestructura de su red que lo causaba, aunque no pudimos dar exactamente con que. Lo irónico es que le metieron buen dinero a todo y tienen un montón de cosas sofisticadas (como hacer un "raid de tarjetas de red"?).

La solución fue pasar la app a otra maquina y por vpn hacer la conexión con sus sistemas.

IVAND
15-06-2022, 22:18:05
Gracias a todos por su tiempo ,

Bueno yo tambien tengo mas de 500 clientes conectados todos los dias y hasta ahora solo me pasa con este cliente , la verdad no entiendo pero se cierra el servicio de firebird (no puedo saber que consultas se estan ejecutando a ese monento inclusive nos compramos la herramienta de IBSurgeon para monitorear la base de datos me salen unas advertencia pero eso sera otro capitulo)

Reincio el servicio de firebird , pero lo raro es q el sistema se pone super super lento hasta que pasen unos 5 min y luego funciona bien , no ocurre lo mismo si se reinicia el servidor fisico ahi anda rapido asi que me imagino q cuando se reinicia firebir algo mas faltaria de hacer

Tengo unas 40 maquinas conectadas siempre ahora me vi en la obligacion de poner el sistema en otro servidor a ver que pasa

En el log de firebird sale siempre un mensaje de error 104 , hay equipos q se conectan via wifi , en la aplicacion cuando salgo cierro la coneccion a la base de datos

No se que mas probar, veremos esta semana como nos va , con la nueva instalacion firebirdss_2.5.9.27139-1_amd64.deb
Nota: Se he echo un backup y restore ningun problema en la base de datos , en firebird 3 he escuchado que tiene el mismo problema y se supone que es por un deadlook

Casimiro Notevi
15-06-2022, 22:33:41
No quiero parecer pedante, soberbio, engreído... pero según tus explicaciones, más seguro estoy de que el problema que tienes es por lo que te he informado al principio, y también que sigas los consejos que te he dado.
La solución no es instalar justo la versión que te he indicado que no instales ;)


PD: Si tuvieras un problema de deadlock, el sistema lo indicaría, no te diría "error 104", sino "error deadlock".

IVAND
15-06-2022, 22:40:16
No para nada a ver te explico la firebird 3 no puedo instalar ahora uso rfunc y aun hay q migrar y crear funciones para poner hacer que trabaje el sistema
Los backup los he realizado no hay problema alguno

lo del deadlock lo sabemos que no te lo muestra el firebird.log digo q en mi archivo de log siempre veo ese mensaje de error 104 q segun leo es de conexion a la red

Explico lo del deadlock porqu lo lei en el articulo q te comparti y es solo porque se les presenta el mismo mensaje que a mi , talvez no sean los mismos escenarios

Casimiro Notevi
16-06-2022, 10:05:19
... en mi archivo de log siempre veo ese mensaje de error 104 q segun leo es de conexion a la red ... Pues eso :)

duilioisola
23-06-2022, 17:03:27
¿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.

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

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

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

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

...
?.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?
/*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.
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)