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)
-   -   Optimizar tablar en Firebird (https://www.clubdelphi.com/foros/showthread.php?t=58872)

ANDRES86 04-08-2008 22:43:19

Optimizar tablar en Firebird
 
Hola a todos, tengo un problemita, estoy tratando de desfragmentar una tabla en feribird, y cuando ejecuto la sentencia:

Código SQL [-]
 OPTIMIZE TABLE nombre_tabla

me aperece un error, operador no reconocido, tambien intente con ANALYZE TABLE, y me dio el mismo.

Alguien sabe como puedo desfragmentar una tabla en firebird, utlizo delphi 7 y firebird 1.5.

gracias de antemano.

RolphyReyes 04-08-2008 22:49:34

Saludos.

Hasta donde tengo entendido en FB no existe sentencia alguna para lo que deseas realizar, lo que si puedes hacer es un Backup/Restore y esto "desfragmenta" todo.

duilioisola 05-08-2008 11:36:09

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



La franja horaria es GMT +2. Ahora son las 13:51:36.

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