Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Fallos de memoria en Firebird (error 335544676) (https://www.clubdelphi.com/foros/showthread.php?t=92941)

Sergio-ponchito 22-03-2018 10:39:47

Fallos de memoria en Firebird (error 335544676)
 
Buenos días,

Actualmente tengo un servidor Firebird 1.5 SuperServer en una máquina Windows Server 2016 con 32 gb de RAM. EL servicio de firebird está utilizando aproximadamente 1GB de memoria RAM y me lanza errores que no dispone de memoria para ordenar (error 335544676 sort_mem_err Sort, not enough memory).

La configuración del fichero de configuración firebird.conf es:
DefaultDbCachePages = 9999
SortMemUpperLimit = 267108864
TempDirectories = E:\FirebirdTMP (disco duro solo para temporales)

He estado probando en incrementar la DefaultDBCachePages a 131072, el SortMemUpperLimit a 536870912 y por último he cambiado el page size de la base de datos al máximo (16384) pero sigue provocando el error de memoria.

¿Alguna idea para solventar este error?
pdt: Por si sirve de interés se conectan al rededor de 100 usuarios a la base de datos.
Gracias de antemano!

Casimiro Notevi 22-03-2018 11:40:50

Así, sin ver nada físicamente, primero revisaría ese disco E:
En cuanto al cambio que has hecho, mejor déjalo como estaba.

Sergio-ponchito 22-03-2018 12:02:37

Actualmente el disco E dispone de 120gb y utilizados no llega a 5 gb de la carpeta temporal. Todo esta virtualizado en una cabina Flash.
Con los parámetros por defecto también tengo el mismo problema, por eso he incrementado para ver si se solventaba.

Tambíen hemos pensado en dar el salto a la versión 3.0 SuperClassic que admite más uso de memoria RAM.

Casimiro Notevi 22-03-2018 12:39:14

Mira esta sección del fichero de configuración de firebird:
Cita:

# ----------------------------
# Temporary space management
#
# Temporary storage is used by the sorting module, it's also
# intended to store temporary datasets etc.
#
# The parameters below handle the allocation and caching policy
# for the temporary space manager. In previous Firebird versions,
# they were prefixed with "SortMem" instead of current "Temp".
#
# The smallest block size being allocated in the temporary storage.
# This value reflects the allocation granularity.
#
# Type: integer
#
#TempBlockSize = 1048576

#
# The maximum amount of the temporary space that can be cached
# in memory.
#
# For Classic servers, this setting is defaulted to 8 MB.
# Although it can be increased, the value applies to each client
# connection/server instance and thus consumes a lot of memory.
#
# Type: integer
#
#TempCacheLimit = 67108864
Mira también esta respuesta de Hellen Borrie a alguien, es muy antigua, pero lo mismo te sirve.

También, obviamente, deberías mirar los procesos que se ejecutan en el sistema para localizar el problema, pues no sabes si ocurre con todos conectados o si ocurre también con que haya solamente 1 conexión.
Puede ser incluso, lo más habitual, provocado por un informe (reporte) que realiza varios "select *" de varias tablas grandes, ordenadas por campos sin índice, agrupados por campos sin índice, etc.

También deberías plantearte el cambiar el servidor a Linux e instalar una versión "classic", notarás mucho la diferencia.
100 conexiones no es nada, no deberías tener problema alguno.

Sergio-ponchito 22-03-2018 13:33:48

Esta tarde le echaré un vistazo a la configuración pero creo recordar que esos parámetros son para la versión 2.0 en adelante.

Por otro lado, ¿veis factible cambiar de versión SuperServer a Classic o SuperClassic, manteniendo firebird 1.5? Si con esto mejora podríamos aplicar el cambio de versión esta fin de semana.

Sergio-ponchito 22-03-2018 16:07:25

He instalado la versión Classic y he tenido problemas para acceder con los usuarios a la base de datos.

He tirado de snapshot y he probado con los siguientes parámetros (que son los que tenia antes de que la base de datos fallara):
TempDirectories = E:\FirebirdTMP
DatabaseAccess = Full
ExternalFileAccess = Full

Además todo esto ha empezado después de cambiar el parámetro CPUAffintyMask a 255 para usar los 8 núcleos. Cuando tuvimos el fallo dejé el fichero de configuración como estaba pero el problema de memoria persistió.
Os comento esto por si os sirve de ayuda.

Casimiro Notevi 22-03-2018 18:39:46

No puedes dar palos de ciego, lo único que estás consiguiendo con cambios sin control es "enfangar" todo.
Tampoco has dicho cómo has hecho el cambio de versión, se supone que habrás seguido los pasos correctos, o sea:
Cita:

- Backup transportable de la base de datos.
- Desinstalación completa de firebird y borrado manual de todos los gds32dll y fbclient.dll que encuentres en el equipo.
- Instalación de la nueva versión de firebird.
- Restore de la base de datos, ya con la nueva versión de fb.
- Instalación del cliente firebird en todos los terminales.

Sergio-ponchito 22-03-2018 18:58:18

Hemos hecho una prueba pero hemos vuelto al estado en el que estábamos antes.
El procedimiento que hemos realizado ha sido el mismo que has indicado.
-Backup de la base de datos.
-Eliminación de la aplicación.
-Instalacion de la misma versión de Firebird en modo Classic.
-Comprobación en el cliente (el fbclient no se ha cambiado).

Tras probarlo, al detectar los fallos hemos tirado de la snapshot ya que el margen de tiempo que disponíamos para probarlo era bastante corto (menos de 1 hora).
Al menos esta tarde ha estado funcionando sin fallos pero no creo que tarde mucho en volver producirse el fallo.

Creo que lo más recomendable será pasar este fin de semana la versión 1.5 a la 3.0 que supongo que tendrá mas optimizado el uso de memoria y CPU.


La franja horaria es GMT +2. Ahora son las 23:50:07.

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