Esta página fue traducida automáticamente. Lee el original en inglés. English

Biblioteca de IBSurgeon

FirebirdSQL: archivos internos, archivos temporales y variables de entorno

by Vasily Sidorov, Sep 2, 2022, IBSurgeon

Los DBA experimentados de Firebird saben que Firebird puede requerir una cantidad bastante grande de espacio en disco para almacenar archivos internos y temporales. El tamaño recomendado de espacio en disco para archivos temporales en un sistema de producción es de 30-40 Gb, pero para sistemas de alta carga puede ser más.

En este artículo describiremos los tipos de archivos internos y temporales de Firebird, y también consideraremos cómo se almacenan y gestionan mediante parámetros de configuración y variables de entorno del sistema operativo. El artículo continúa la serie de artículos y materiales dedicados al dominio de la instalación y configuración de Firebird.

Aviso importante de los desarrolladores principales de Firebird:

Nunca, nunca, NUNCA establezcas/cambies la variable de entorno FIREBIRD_LOCK - a menos que sepas MUY BIEN lo que estás haciendo.

Sugerencia explícita del equipo de IBSurgeon:

No cambies FIREBIRD_LOCK.

Para otros archivos temporales - ver esto.

Archivos internos en Firebird

Los archivos internos son archivos utilizados por Firebird para realizar sus operaciones internas. Estos archivos no deben ser modificados ni tocados por los usuarios o software de terceros. La información a continuación es solo de referencia.

El patrón común de nombres de los archivos internos

Firebird utiliza internamente el prefijo fbNN_, donde NN puede ser

  • el número principal de ODS (Estructura en Disco) (ODS 12 para Firebird 3.0, ODS 13 para Firebird 4.0), es decir, el archivo comienza con fb13.
  • NN puede ser el número de versión abreviado - por ejemplo, el archivo puede comenzar con fb50.

También puede haber el prefijo fb_, que también se utiliza para archivos temporales.

Tipos de archivos internos en Firebird

Existen los siguientes tipos principales de archivos internos en Firebird:

  1. fb_lock_ archivos de bloqueo - archivos utilizados por el gestor de bloqueos de Firebird
  2. fbNN_monitor_ archivos con datos de tablas de monitoreo
  3. fbNN_trace_ archivo con datos para sesiones de traza
  4. fb_event_ archivo con buffers almacenados de eventos
  5. fb_user_mapping archivos con datos de mapeo de usuarios
  6. archivos con datos internos para sesiones de traza
  7. archivos de bandera (tamaño cero)
  8. fb_repl_ archivos de replicación

Consideremos los archivos internos de Firebird en detalle.

Archivos de bloqueo

Los archivos de bloqueo tienen el prefijo fb_lock_. Son utilizados por el gestor de bloqueos de Firebird para sincronizar el acceso a los objetos dentro de la base de datos de Firebird y entre instancias de Firebird.

Los archivos de bloqueo se crean al abrir un archivo de base de datos y se eliminan al cerrarlo.

Por defecto, el archivo de base de datos se cierra cuando se desconecta la última conexión. A partir de Firebird 3.0, es posible mantener un archivo de base de datos abierto en Firebird después de la desconexión de la última conexión utilizando la opción LINGER.

El tamaño inicial del archivo de bloqueo se establece mediante el parámetro LockMemSize en firebird.conf. El tamaño de trabajo difiere según la arquitectura: SuperServer utiliza archivos de bloqueo de manera menos intensiva que Classic y SuperClassic. El tamaño típico de la tabla de bloqueos es de aproximadamente 30-50Mb, pero para servidores con miles de conexiones en Classic/SuperClassic, el tamaño de los archivos de bloqueo puede crecer hasta 2Gb. 2Gb es el límite de implementación para archivos de bloqueo en Firebird estándar.

Archivos con datos de tablas de monitoreo

A partir de la versión 2.1, Firebird tiene tablas de monitoreo. Estas tablas no se almacenan dentro de la base de datos; los datos de monitoreo se recopilan bajo demanda y se mantienen en archivos internos con el patrón de nombre fbNN_monitor_.

El tamaño de los archivos con datos de tablas de monitoreo depende del número de conexiones y su actividad (transacciones, sentencias, procedimientos almacenados, etc.). Además, la cantidad y el tamaño de los archivos fb_NN_monitor_ dependen del número de solicitudes a las tablas de monitoreo desde diferentes conexiones (esta es una de las razones por las que no se deben usar tablas MON$ para tareas que no son de monitoreo).

Archivos con datos para sesiones de traza

El patrón de nombre de archivo fbNN_trace_ mantiene el enlace al archivo de sesión de traza activa. Los archivos con el patrón de nombre fb_trace_ contienen información sobre la sesión de traza. Es una especie de buffer para datos de traza. El tamaño máximo del archivo fb_trace está limitado por el parámetro MaxUserTraceLogSize en firebird.conf. Si este buffer se llena, la traza se suspenderá automáticamente.

Archivo para buffers de eventos

Los archivos con el patrón de nombre fb_event_ son buffers donde Firebird almacena eventos no entregados a las aplicaciones cliente.

Archivos con datos de mapeo de usuarios

Los archivos fb_user_mapping se utilizan para almacenar en caché los mapeos de usuarios en instancias de Firebird.

Archivos de bandera

En POSIX, Firebird utiliza archivos de bandera con tamaño cero - fb_guard, fb_init, fb_port_NUMBER. Estos archivos se utilizan en el arranque de Firebird.

Archivos de replicación

En Firebird 4 y HQbird, los archivos fb_repl_ contienen los datos internos para los procesos de replicación.

Ubicación de los archivos internos

Por defecto, todos los archivos internos de Firebird se almacenan en la misma carpeta: en Windows es C:\ProgramData\firebird, en Linux - /tmp/firebird. Tenga en cuenta que la carpeta debe tener los permisos suficientes para que la instancia de Firebird pueda crear y trabajar con archivos allí.

Es posible cambiar la ubicación de la carpeta con archivos internos de Firebird definiendo la variable de entorno FIREBIRD_LOCK, pero no lo recomendamos.

TENGA EN CUENTA: para evitar la corrupción de la base de datos, todos los procesos de Firebird que abren el mismo archivo de base de datos deben trabajar con el mismo FIREBIRD_LOCK. Por favor, no cree esta variable y use las ubicaciones predeterminadas.

Tamaño de los archivos internos

En la práctica, el tamaño total de los archivos internos de Firebird es de alrededor de 100-200Mb, hasta 2Gb como máximo conocido.

Archivos temporales en Firebird

Los archivos temporales son creados por el motor de Firebird para almacenar datos temporales que surgen como resultado de las operaciones de los usuarios - consultas con DISTINCT, por ejemplo. Los archivos temporales pueden ser muy grandes en sistemas de producción de alta carga, por lo que es necesario que un DBA experimentado pueda reconocer los tipos de archivos temporales y, si es necesario, ajustar la configuración de Firebird o asignar espacio en disco para almacenar archivos temporales.

Ubicación de los archivos temporales en Firebird

Firebird crea archivos temporales en la carpeta especificada por las variables de entorno FIREBIRD_TMP, TEMP, TMP (en este orden). Si no existen tales variables, los archivos temporales se crearán en C:\Temp en Windows o /tmp en Linux.

En la práctica, en Windows podemos ver los archivos temporales de Firebird en C:\Windows\Temp (corresponde a la variable de entorno TEMP), en Linux en /tmp.

Tipos de archivos temporales en Firebird

Existen los siguientes archivos temporales (todos usan el prefijo fb_):

  1. fb_table_ objetos de tabla, incluidos, pero no limitados a, tablas temporales
  2. fb_blob_ blobs y transacciones autónomas
  3. fb_undo_ datos de deshacer
  4. fb_recbuf_ utilizado para mantener datos intermedios en consultas activas, tablas virtuales, etc.
  5. fb_merge_ datos para uniones hash
  6. fb_sort_ ordenaciones (para consultas con DISTINCT/ORDER BY/GROUP BY y para crear/recrear índices)
  7. fb_tpc_ datos fb_tpc_ - desde v4, lista de todas las transacciones conocidas con números de confirmación asociados
  8. fb_snap_ datos para - desde v4, lista de todas las instantáneas de base de datos activas

¿Cómo cambiar la ubicación de los archivos temporales?

Para versiones de Firebird anteriores a 4, es posible definir la carpeta específica para almacenar archivos temporales de los tipos 4-8 con el parámetro de configuración TempDirectories de Firebird.

Para Firebird 4 y superiores, el nuevo parámetro de configuración TempTableDirectory permite especificar la carpeta para almacenar tablas temporales de los tipos 1-3. Se puede establecer en firebird.conf y en databases.conf.

Variables de entorno para Firebird

Firebird puede utilizar las siguientes variables de entorno del sistema operativo (si están definidas):

  • FIREBIRD carpeta con archivos de configuración de Firebird
  • FIREBIRD_LOCK carpeta con archivos internos
  • FIREBIRD_MSG carpeta con el archivo de mensajes (firebird.msg)
  • FIREBIRD_TMP carpeta para archivos temporales

En la práctica, FIREBIRD_TMP es la única variable que tiene sentido definir si tiene una gran razón para almacenar archivos temporales en una ubicación específica no predeterminada.

Tenga en cuenta que si la ruta en FIREBIRD_TMP no es válida (no existe o no tiene permisos suficientes), provocará errores críticos que impedirán que Firebird funcione.

Aviso importante de los desarrolladores principales de Firebird:

Nunca, nunca, NUNCA establezcas/cambies la variable de entorno FIREBIRD_LOCK - a menos que sepas MUY BIEN lo que estás haciendo.

Sugerencia explícita del equipo de IBSurgeon:

Nunca cambies FIREBIRD_LOCK. Esta información es solo de referencia.

Para otros archivos temporales - ver esto.

En lugar de Resumen: respuesta a la pregunta muy frecuente

Muchos DBA preguntan: ¿deberíamos usar RAM-drive o tmpfs para almacenar archivos internos y/o temporales de Firebird?

La respuesta corta es: No, es mejor ajustar la configuración de Firebird. Si tiene mucha memoria, puede aumentar el valor de DefaultDBCachePages (solo para SuperServer) y aumentar TempCacheLimit (en versiones 3+ Firebird permite usar TempCacheLimit de más de 2Gb).

Si no está seguro de qué valores se deben usar, utilice la Calculadora de Configuración de Firebird, que crea configuraciones óptimas y seguras para parámetros específicos de hardware/VM.

La respuesta más larga: Firebird está diseñado para mantener la mayor parte de los archivos temporales e internos en memoria, pero, dado que en la práctica hay situaciones en las que los objetos temporales se vuelven muy grandes, también tiene el mecanismo para almacenarlos en disco. Firebird utiliza eficazmente los mecanismos del sistema operativo (mmap, caché del sistema de archivos, archivos temporales, etc.) para almacenar en caché archivos temporales e internos en memoria cuando es posible y razonable. El ajuste de Firebird debe realizarse primero a través de la configuración de Firebird, y luego del sistema operativo (ubicación de archivos temporales, varias opciones para el ajuste de la caché de archivos, etc.).

Enlaces relacionados

Videos:

Presentación sobre el ajuste del uso de memoria

No dude en hacer cualquier pregunta o enviar comentarios a [email protected]