Actualización de stored procedures y triggers

4 comentarios

¿En qué momento se actualiza un stored procedure o un trigger?

Tú cambias el contenido de un stored procedure o de un trigger, luego ejecutas el COMMIT correspondiente, y sin embargo parece que la actualización no ha funcionado.

¿Por qué?

Porque la actualización se realiza solamente cuando el caché está vacío.

En Classic eso ocurre al cerrar la conexión actual.

En SuperServer, como el caché es compartido, eso ocurre cuando se cerraron todas las conexiones.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

Anuncios

Averiguando cual es la arquitectura que tienes instalada

2 comentarios

¿Cómo saber si el Servidor del Firebird es SuperServer, Classic, o SuperClassic?

Realmente sería interesante que mediante un SELECT pudiéramos tener esa información, lamentablemente no es así pero de todas maneras podemos averiguarlo fácilmente. Hay dos métodos que podemos usar:

Método 1.

  1. Abrir como Administrador la ventana “Símbolo del sistema
  2. Ubicarse en la subcarpeta \BIN de la carpeta donde está instalado el Firebird
  3. Escribir el comando INSTSVC Q

Firebird puede ser instalado muchas veces en una computadora, para diferenciar a cada una de esas instalaciones de las demás a cada una hay que darle un nombre. El nombre por defecto, o sea el que le asigna el instalador es “DefaultInstance”.

Si tenemos más de una instalación del Firebird en una computadora, las demás instalaciones deberán tener otros nombres.

ARQUITECTURA1Captura 1. Si haces clic en la imagen la verás más grande

(1). La ventanita se abrió como Administrador. Para abrir un programa como Administrador debes colocar el mouse sobre su nombre, presionar el botón derecho y en el menú contextual que aparece elegir la opción: “Ejecutar como Administrador”

(2). El nombre de esta instalación es “DefaultInstance”, que es el nombre por defecto. Si hay más de una instalación del Firebird entonces podría aparecer otro nombre aquí.

(3). Los nombres de los archivos ejecutables pueden ser:

fbserver.exe —> significa que se está ejecutando SuperServer

fb_inet_server.exe —> significa que se está ejecutando Classic o SuperClassic. Para saber cual de ellos hay que mirar cual es el parámetro que viene a continuación: -c o ningún parámetro, es Classic. -s o -m es SuperClassic.

Método 2

  1.  Iniciar el Administrador de Tareas del Windows
  2. Hacer clic en la pestaña Procesos
  3. Hacer clic en el botón Mostrar procesos de todos los usuarios
  4. Si aparece una ventanita de diálogo preguntando: ¿Desea permitir que este programa realice cambios en el equipo? responderle que sí
  5. En la lista de procesos verás a fbserver.exe o a fb_inet_server.exe.

Por defecto Firebird se instala en SYSTEM.

Conclusión:

Aunque lamentablemente no disponemos de un SELECT que nos pueda decir la arquitectura del Servidor, es muy fácil obtener esa información y tenemos dos métodos para obtenerla.

Mediante el método 1 abrimos como Administrador una ventanita de comandos, nos ubicamos en la subcarpeta \BIN de nuestra instalación del Firebird y escribimos el comando INSTSVC Q

Mediante el método 2 iniciamos el Administrador de tareas del Windows, le pedimos que nos muestre todos los procesos y listo.

En ambos casos, fbserver.exe significa SuperServer y fb_inet_server.exe significa Classic o SuperClassic, para saber cual de ellos hay que fijarse en el parámetro que aparece a continuación: -c o nada, Classic, -s o -m, SuperClassic.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

Usando Firebird con procesadores multinúcleo

5 comentarios

Como seguramente sabes, todas las computadoras modernas son multi-núcleo (multicore).

¿Por qué eso?

Porque la velocidad máxima de un núcleo (core) es de 4 gigahertz. Por lo tanto, si se desea obtener mayor velocidad la única alternativa es empaquetar dos o más núcleos (core) en el mismo procesador.

Cuando una computadora tiene un solo núcleo las tareas no se realizan en simultáneo, aunque al usuario así le parezca. Lo que hace el Sistema Operativo es asignarle unos cuantos milisegundos al proceso uno, luego unos cuantos milisegundos al proceso dos, luego unos cuantos milisegundos al proceso tres, etc. De esa manera todos los procesos utilizan al procesador secuencialmente y como lo hacen tan rápidamente al usuario le parece que lo hacen en simultáneo pero no es así.

En cambio si el procesador es multi-núcleo entonces sí se pueden estar realizando varios procesos al mismo tiempo. Mientras el núcleo 1 está ejecutando un proceso el núcleo 2 puede estar realizando otro proceso, el núcleo 3 otro proceso, y así sucesivamente.

En este momento no tiene sentido comprar una computadora de un solo núcleo porque la diferencia de precio con la computadora de múltiples núcleos es muy pequeña y además las de un solo núcleo ya no se fabrican.

Entonces, la pregunta es:

¿Puede Firebird tomar ventaja de los múltiples núcleos de una computadora?

Y la respuesta es sí.

Sin embargo, hay varios posibles escenarios y debemos tomarlos en cuenta.

Firebird viene en tres arquitecturas:

  • Classic
  • SuperClassic
  • SuperServer

Y el uso de los núcleos depende de la arquitectura que estemos usando.

 Si se usa Classic o SuperClassic entonces se pueden tener múltiples conexiones a una misma Base de Datos y se usarán diferentes núcleos.

Si se usa SuperServer un núcleo puede ser usado por una sola Base de Datos.

¿Qué significa lo anterior?

  • Que si usamos SuperServer y tenemos una sola Base de Datos entonces solamente se usará un núcleo de la computadora. No importa cuantos núcleos tenga la computadora, solamente se usará uno de ellos, el primero.
  • Que si usamos SuperServer y tenemos varias bases de datos entonces cada Base de Datos podrá usar un núcleo. Es decir, que si tenemos dos bases de datos la primera Base de Datos usará exclusivamente al núcleo 1 y la segunda Base de Datos usará exclusivamente al núcleo 2. Pero eso no lo realiza el Firebird automáticamente, hay que configurarlo, en la entrada CpuAffinityMask del archivo FIREBIRD.CONF hay que decirle cuales núcleos queremos usar. Si no lo hacemos entonces todas las bases de datos usarán solamente al núcleo 1, sin importar cuantos núcleos tenga la computadora, todas las bases de datos usarán solamente al núcleo 1.
  • Que si usamos Classic o SuperClassic entonces una sola Base de Datos puede usar varios núcleos. Y por supuesto que si tenemos varias bases de datos también se usarán varios núcleos. Esto no es necesario configurar ya que Classic y SuperClassic siempre utilizan todos los núcleos que tiene la computadora, sin importar la cantidad de bases de datos a las cuales los usuarios se conectan.

¿Cómo se configura SuperServer para usar varios núcleos?

En Windows, por defecto SuperServer usa solamente al primer núcleo. Si queremos que use más de un núcleo entonces debemos configurarlo. Para ello:

  1. Abrimos el archivo FIREBIRD.CONF que se encuentra en la carpeta donde instalaste al Firebird (por ejemplo, en C:\Archivos de Programa\Firebird\Firebird_2_5\)
  2. Buscamos la entrada CpuAffinityMask
  3. Borramos el símbolo de numeral que se encuentra a la izquierda (el símbolo # indica que lo que viene a continuación es un comentario)
  4. Establecemos el valor de CpuAffinityMask recordando que se trata de un bitmap (o sea, en binario), en donde:

1 = usará el núcleo 1

3 = usará los 2 primeros núcleos

15 = usará los 4 primeros núcleos

255 = usará los 8 primeros núcleos

Si quieres que un núcleo no se utilice entonces no debes indicarlo en el bitmap, por ejemplo para usar el núcleo 2 y el núcleo 3 pero no el núcleo 1 el valor debería ser 6.

Si conoces números binarios entonces es muy fácil saber cual debe ser el valor de CpuAffinityMask para indicarle cuales núcleos se deben usar.

Conclusión:

Firebird puede usar todos los núcleos que tiene una computadora, pero los núcleos que serán usados depende de la arquitectura utilizada. Classic y SuperClassic siempre usan todos los núcleos disponibles en cambio SuperServer por defecto usa solamente el primer núcleo y para que utilice otros núcleos hay que configurarlo mediante la entrada CpuAffinityMask del archivo FIREBIRD.CONF, recordando que con SuperServer una Base de Datos solamente puede usar un núcleo, jamás usará más de un núcleo, en cambio con Classic o con SuperClassic una Base de Datos usará todos los núcleos.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

Conectando por XNET o por TCP/IP

Deja un comentario

Cuando queremos conectarnos a una Base de Datos local típicamente tenemos dos formas de hacerlo:

1. Usando XNET, por ejemplo:

C:\MiBaseDatos.FDB

2. Usando TCP/IP, por ejemplo:

localhost:C:\MiBaseDatos.FDB

Ambas tienen sus ventajas y sus desventajas. Si nos conectamos de la forma 1., o sea usando XNET la conexión será más rápida pero el problema es que si se “cuelga” la aplicación entonces el proceso FB_INET_SERVER (usado por la arquitectura Classic) permanecerá en la memoria. El problema es con Classic, ya que SuperServer y SuperClassic no tienen este problema.

Desde luego que lo correcto es que la aplicación no se “cuelgue” pero si por algún motivo eso llegara a ocurrir entonces tendremos en la memoria un proceso (o muchos procesos si se colgó muchas veces) que no debería/n estar ahí.

Entonces, si usamos la arquitectura Classic debemos tener bien presente que un “cuelgue” de la aplicación no eliminará al proceso FB_INET_SERVER de la memoria.

Este es un error que se espera sea subsanado dentro de poco tiempo, pero mientras tanto hay que recordarlo.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

Usando dos servidores para aumentar la velocidad de las operaciones

2 comentarios

Generalmente los usuarios quieren velocidad, quieren que las operaciones que realizan en la Base de Datos (SELECT, INSERT, UPDATE, DELETE) sean muy rápidas.

Una técnica que podemos emplear para aumentar la velocidad (además de la optimización de las consultas, que ya hemos visto en otros artículos de este blog) es tener en la misma computadora dos (o más) servidores instalados.

Como seguramente sabes, Firebird viene en tres arquitecturas: Classic, SuperClassic y SuperServer.

El problema con SuperServer es que mantiene un caché para todas las conexiones. O sea que si una Base de Datos tiene 40 conexiones, hay un solo caché para las 40 conexiones. Y si alguien está ejecutando una transacción o una consulta muy larga eso crea un “cuello de botella” para todos los demás usuarios, haciendo que sus operaciones se vuelvan muy lentas. Pero la gran ventaja de usar un solo caché es que si el usuario 2 quiere hacer la misma consulta que ya hizo el usuario 1 los datos de esa consulta ya muy probablemente se encuentran en el caché y por lo tanto no deben ser leídos del disco duro, proporcionando una gran velocidad (la memoria RAM es miles de veces más rápida que la memoria secundaria).

Como ves, usar SuperServer o usar Classic tiene sus ventajas y sus desventajas.

Entonces, ¿cuál es la mejor solución?

Usar dos servidores.

Un Servidor con la arquitectura SuperServer se usará para el mantenimiento de los datos de la Base de Datos y para las consultas rápidas. Un Servidor con arquitectura Classic se usará para las consultas lentas (que son lentas porque deben procesar muchos datos, no porque están mal diseñadas que ese es otro tema).

Para que esta técnica funcione sin problemas un solo Servidor será el encargado de las operaciones de mantenimiento de los datos (INSERT, UPDATE, DELETE). ¿Por qué? porque si los dos servidores pueden hacerlo podrían ocurrir conflictos y corromperse la Base de Datos. Por lo tanto hay que evitar esa posibilidad.

Entonces:

  • SuperServer se encargará de las operaciones de INSERT, UPDATE, DELETE y SELECTs rápidos
  • Classic se encargará de los SELECTs lentos

Como Classic usa un caché por cada conexión si un usuario está realizando una consulta muy lenta eso no les afectará a los demás usuarios.

¿Entonces, qué conseguimos con esto?

Que todos estén felices.

Los gerentes y los propietarios de las empresas generalmente se conectan a las bases de datos para realizar consultas. Entonces ellos siempre usarán Classic.

Los operadores se encargan de introducir datos y de imprimir informes de comprobación. Para la introducción de datos y para la impresión de informes cortos, usarán SuperServer; para la impresión de los informes que tendrán muchas páginas o que requieren de mucho procesamiento, usarán Classic.

Artículos relacionados:

Modelos de ejecución del Firebird y sus diferencias

Comparando las arquitecturas

Diferencias entre SuperServer, Classic y SuperClassic

El índice del blog Firebird21