domingo, 27 de enero de 2008

Optimizando Firebird

Estas son las consideraciones que tomo en cuenta para una adecuada configuración para el servidor Firebird.


El funcionamiento de un Servidor de base de datos es en realidad una mezcla de tres cosas: una computadora que hace de "servidor", el programa FireBird instalado en el, y un fichero de datos (normalmente con extensión .FDB o .GDB) que está almacenado en un disco duro del servidor. Todos estos aspectos del servidor de la base de datos pueden

ser causa de algunos problemas.

La computadora el Servidor

Para la computador que ara de servidor se tiene que seleccionar una con características hardware apropiadas ya que del adecuado rendimiento de esta PC tendrá mucho que ver el comportamiento del servidor de Base de datos. La recomendación es utilizar ese computador de manera exclusiva como servidor de base de datos. Las consideraciones de seguridad tanto a nivel físico como a nivel de software(Sistema Operativo, Cortafuegos, etc.) deben tenerse en consideración ya que de ello dependerá el buen funcionamiento y la seguridad de la base de datos.

Una computadora con unidades de disco antiguas, sin los controladores adecuados, con poca memoria, con el sistema operativo mal configurado, o que se use para otros procesos, afectará a todos los usuarios del servidor de base de datos, así que la selección de una computadora adecuada es una muy buena decisión para incrementar el rendimiento.

Configurar FireBird

Uno de los puntos mas críticos dentro de la configuración del servidor es la asignación de la memoria que se da al servidor (parámetro DefaultDbCachePages) este parámetro en el servidor Superserver esta configurado a 2048 paginas, es necesario incrementar este parámetro para tener un mejor rendimiento. El efecto que tendrá será grande, sobre todo cuando existen muchos usuarios accediendo a la base de datos o para el procesamiento de Consultas SQL complejas.

Sanear sus datos

Este punto debería ser obligatorio, ya que las bases de datos, al igual que los discos duros, se "fragmentan" con su uso diario, e incluso pueden ser más propensas a corromperse tras unos años de uso, y solo un ciclo de BackUp / Restore nos "sanea" estos datos. Con esto se obtendrá una reducción en el tamaño de la base de datos

Tamaño de cache

Simplificando es cuanta memoria RAM reservamos para cada base de datos que abre FireBird, y cuanta más, mejor, claro. Esta memoria se mide en "paginas", y una pagina puede variar de tamaño, siendo el tamaño por defecto de 4KB. Para la mayoría de base de datos. Por defecto el modo "Superserver" de FireBird -la instalación por defecto- usa DefaultDbCachePages = 2048, es decir, unas 8 MB, así que realmente aquí tenemos mucho que ganar poniendo, por ejemplo, 10 veces más (80 MB) o incluso bastante mas. Conviene jugar con ciertos valores y ver como queda el S.O. (Windows o Linux) de memoria libre. Si decidimos usar un GB para FireBird, usaríamos unas cien veces más que lo que viene por defecto, unas 2 millones de páginas, así que DefaultDbCachePages = 204800 podría ser un valor bueno a probar.

Ficheros temporales

Se usan al ordenar datos, es decir, muy a menudo. Estos fichero no deben estar en el mismo disco donde esta la propia base de datos, ya que en ese caso, el manipular ambos ficheros a la vez penalizará la velocidad bastante. Busque en el fichero de configuración “firebird.conf” la clausula TempDirectories y haga que apunte al disco del sistema operativo, o si lo tiene, a un disco extra que use solo para estos ficheros temporales.

Disco RAM

Si tiene RAM de sobra, digamos que mas de 2 GB en sistemas de 32 bits o más de 4 GB en sistemas de 64 bits, la RAM extra puede usarse para dar más velocidad a los temporales creando un "disco RAM". Estos discos, son programas que se instalan y hacen creer al sistema que la memoria es un disco nuevo, pero muy rápido. Si instalamos uno de estos programas y usamos esa unidad como directorio temporal de FireBird, el cambio puede ser espectacular.

16 comentarios:

DBAFirebird dijo...

Des pues de buscar información en la red por muchos días me encuentro con este excelente articulo Gracias, de verdad me ha servido tremendamente y espero que sigues publicando mas temas de esta calidad

Ethan dijo...

Hola Oscar,veo ke has trabajado con FoxPro y Power,haber si me puedes ayudar.He desarrollado un Sistema con Power 9.0 pero con tablas DBF (por rekerimientos de la empresa).La verdad es ke no tengo mucha experiencia con DBF's y Fox pero si con Power.He creado las tablas y como llaves primaria he usado indices.Sin embargo noto ke las consultas o la coneccion a la BD es DEMASIADO lenta.Uso Driver do Microsoft dBase (*.dbf).Probe cambiando de driver al MS FoxPro pero tendria ke cambiar toda la syntaxis de los dw ya ke hay error al parecer. Te agradesco de antemano tu ayuda..

Oscar Zelada dijo...

He trabajado sistemas con DBF y PowerBuilder mi experiencia me ha demostrado que el mejor controlador que puedes utilizar es el que biene con el de PowerBuilder (Merant ODBC si mas no recuerdo) fíjate en la instalación de tu powerBuilder y selecciona controladores ODBC y allí selecciona DBF en las opciones del controlador te pide que selecciones el indice para que se interprete como llave primaria, coméntame tus resultados, ami me funciona muy bien. Si deseas puedes escribirme a mi correo para poderte ayudar

Anónimo dijo...

Como configuro el DefaultDbCachePages? y demas parametros?

wilson dijo...

Buen día Oscar, veo que tiene buena experiencia con firebird, si le es posible colaborarme con la siguiente información:
Necesito configurar clientes lan windows para firebird, las ip de las red son dinámicas, igual la aplicación se conecta a la base de datos a través de odbc.

Wilson Salgado Salazar

Carlos G dijo...

Grandioso artículo Oscar, muy bien explicado, y muy útiles tips.

Saludos

mahech dijo...

Muy buen documento Oscar, gracias por tus TIPS, tengo una pregunta ¿Sabras de alguna persona en México que nos pueda dar soporte en Firebird?
Saludos

Oscar Zelada Pozo dijo...

No conosco, alguna persona en Mexico que te pueda ayudar, en todo caso escribeme a mi correo enque te podria apoyar, saludos Atte. Oscar Zelada

r1chd dijo...

hola oscar, oye gracias por publicarlo me sirvio mucho, al configurar mis servidores ahora la aplicacion parece el doble de rapida y en realidad solo fue modificar el firebird.conf gracias excelente blog

Dario dijo...

hola oscar te felicito por los aportes que das a la comunidad de firebird. Sabes tengo un problema al momento de ejecutar un clienteme sale un mensaje en ingles que al traducirlo seria lo siguiente: que no puede tener politicas de creacion o modificacion debido a que tiene un usuario con sesión abierta. Porque puede estar pasando eso en Windows 2003 server

Dario dijo...

para los que quieren modificar los parámetros del archivo firebirb.conf hay un ejecutable que se llama fbconfigmanager.exe, lo copias donde esta el archivo y lo ejecutas, es un entorno visual bien bonito para trabajar http://prdownloads.sourceforge.net/firebird/FbConfigManager.zip
ahi lo pueden encontrar
espero que les sirva de algo

Anónimo dijo...

Hola Oscar
Mi problema es el siguiente. Trabajo en cliente servidor con firebird y power builder 10...todo trabaja ok en el servidor, pero en los clientes sale el error

cannot attach to password database..

cual seria la solucion

Unknown dijo...

Hola, ante todo, excelente artículo. Muy claro y resolutivo. Con los datos que has escrito he logrado mejorar el rendimiento del programa de un cliente.
El problema que te quiero plantear es el siguiente: por necesidades del trabajo del cliente, me vi obligado a hacer que se conecte al programa en remoto con la Conexión a Escritorio Remoto de Windows, ya que al conectarlo desde fuera de su oficina a la base de datos mediante la IP externa y el puerto 3050 el programa tarda más de 1 minuto en hacer cualquier operación (abrir una pantalla, guardar-leer-modificar 1 registro, ...) y no menciono la búsquedas de registros porque entonces el tiempo se hace eterno. ¿Hay alguna manera de realizar una conexión que trabaje al menos con la misma velocidad que trabaja con el Escritorio Remoto de Windows?
Muchas gracias por tu atención.

Oscar Zelada Pozo dijo...

Te recomiendo Utilizar FreeNx para accesos remotos, otra alternativa a evaluar seria utilizar ZeBeDee, aquí un link sobre el tema http://www.firebirdsql.org/pdfmanual/Firebird_ZeBeDee.pdf

Unknown dijo...

El ordenador usado como servidor tiene Windows, por lo que no puedo probar FreeNx. ZeBeDee lo he llegado a descargar y probar hace tiempo, pero te confieso que no he sabido configurarlo para que funcionase correctamente a pesar de las instrucciones. Sobre este programa estoy cansado de buscar información en español o alguien que me indique paso a paso como configurarlo, pero no consigo que nadie me dé norte. Igual me quedo a medias con algún paso o proceso... no sé.
¿Podrías indicarme si has probado ZeBeDee y da el resultado que necesito? ¿Hay que hacer algo más a parte de los pasos indicados en el documento?
Muchas gracias.

Anónimo dijo...

Buenas tardes Sr Oscar, gracias por sus aportes, deseo consultarle cual software utiliza para emular parte de la memora ram como disco para temporales.