Ver Mensaje Individual
  #3  
Antiguo 05-08-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.738
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Para optimizar una base Firebird puedes utilizar esto que he sacado de aquí:

Código SQL [-]
CREATE PROCEDURE SPACTUALIZARINDICES 
AS
DECLARE VARIABLE NOMBRE VARCHAR(31);
Begin
  For Select RDB$Index_Name From RDB$Indices Into :Nombre Do
    Execute Statement 'Set Statistics Index ' || :Nombre;
End

Esto recalcula la selectividad de los índices. (es bueno para que las consultas hagan uso de un buen PLAN)

No se de nada que haga una "defragmentación de tablas".

De todos modos:

Si tu servidor es Windows, realiza una defragmentación del disco cada noche.
Haz un backup y restore antes de hacer algún proceso masivo que vaya a hacer muchos cambios en la base.
Cada tanto haz un backup y restore de la base de datos.
Cada noche haz un backup para que haga un Garbaje collection cuando no hay nadie conectado. (o por lo menos un GFIX -SWEEP)

Para ver como está la base de datos puedes utilizar el GSTAT -H:
Se puede utilizar aunque haya clientes conectados.
Código:
WINDOWS
"C:\Archivos de programa\Firebird\Firebird_1_5\bin\gstat" -h basededatos.fdb -user SYSDBA -pass masterkey
LINUX
/opt/firebird/bin/gstat -h /bases/basededatos.fdb

Database "/bases/basededatos.fdb"

Database header page information:
        Flags                   0
        Checksum                12345
        Generation              11429
        Page size               4096
        ODS version             10.1
        Oldest transaction      11415
        Oldest active           11416
        Oldest snapshot         11415
        Next transaction        11423
        Bumped transaction      1
        Sequence number         0
        Next attachment ID      0
        Implementation ID       19
        Shadow count            0
        Page buffers            0
        Next header page        0
        Database dialect        1
        Creation date           Jan 29, 2008 21:10:28

    Variable header data:
        Sweep interval:         0
        *END*
La diferencia entre "Oldest Active" y "Next Transaction" es lo importante. Son las transacciones abiertas que tienes en ese momento. En este ejemplo 7 Transacciones abiertas. Si superas las 10.000, puede que tu programa no utilice las transacciones correctamente.

Para limpiar transacciones puedes hacer lo siguiente:
Se puede hacer con clientes conectados pero tardará bastante más.
Código:
WINDOWS
"C:\Archivos de programa\Firebird\Firebird_1_5\bin\gfix" -sweep basededatos.fdb -user SYSDBA -pass masterkey
LINUX
/opt/firebird/bin/gsfix -sweep /bases/basededatos.fdb

Última edición por duilioisola fecha: 05-08-2008 a las 11:51:53.
Responder Con Cita