Ver Mensaje Individual
  #4  
Antiguo 12-08-2004
Avatar de Combat-F2D
Combat-F2D Combat-F2D is offline
Miembro
 
Registrado: may 2003
Ubicación: Toletum
Posts: 454
Reputación: 22
Combat-F2D Va por buen camino
en base a los anteriores, continuo:

he vuelto a crear la misma BD con exactamente el mismo propósito, pero, he sustituido el StroreProcedure 'INICIO', por otro denominado 'DAMETIEMPOS' con lo cual queda de la siguiente manera:

Código SQL [-]
SET SQL DIALECT 3;

CREATE DATABASE 'C:\testeo\testeo.fdb'
USER 'sysdba' PASSWORD 'masterkey'
PAGE_SIZE 4096
DEFAULT CHARACTER SET WIN1251;

CREATE GENERATOR SACARID ;
SET GENERATOR SACARID TO 0;

CREATE TABLE TABLA1 (
    ID INTEGER NOT NULL,
    CAMPO1 VARCHAR (80) CHARACTER SET WIN1251 NOT NULL COLLATE WIN1251,
    CAMPO2 VARCHAR (80) CHARACTER SET WIN1251 NOT NULL COLLATE WIN1251);

CREATE TABLE TABLA2 (
    ID INTEGER NOT NULL,
    VALOR1 VARCHAR (80) CHARACTER SET WIN1251 NOT NULL COLLATE WIN1251);

ALTER TABLE TABLA1 ADD CONSTRAINT PK_TABLA1 PRIMARY KEY (ID);
ALTER TABLE TABLA2 ADD CONSTRAINT PK_TABLA2 PRIMARY KEY (ID);

ALTER TABLE TABLA2 ADD CONSTRAINT FK_TABLA2 FOREIGN KEY (ID) REFERENCES TABLA1 (ID) ON DELETE CASCADE ON UPDATE CASCADE;

CREATE INDEX FK_TABLA2 ON TABLA2 (ID);
CREATE UNIQUE INDEX IDX_TABLA1 ON TABLA1 (CAMPO1);
CREATE UNIQUE INDEX IDX_TABLA11 ON TABLA1 (CAMPO2);
CREATE UNIQUE INDEX IDX_TABLA2 ON TABLA2 (VALOR1);
CREATE UNIQUE INDEX PK_TABLA1 ON TABLA1 (ID);
CREATE UNIQUE INDEX PK_TABLA2 ON TABLA2 (ID);


SET TERM ^ ; 

CREATE PROCEDURE DAMETIEMPOS 
RETURNS (
    TIEMPOINICIO TIMESTAMP,
    TIEMPOFINAL TIMESTAMP,
    TIEMPO INTEGER)
AS
BEGIN
  EXIT;
END
^

CREATE PROCEDURE METEENTABLA2 (
    VALORDEID INTEGER)
AS
BEGIN
  EXIT;
END
^


ALTER PROCEDURE DAMETIEMPOS 
RETURNS (
    TIEMPOINICIO TIMESTAMP,
    TIEMPOFINAL TIMESTAMP,
    TIEMPO INTEGER)
AS
DECLARE VARIABLE I INTEGER;
DECLARE VARIABLE VALORCAMPO1 VARCHAR(80);
DECLARE VARIABLE VALORCAMPO2 VARCHAR(80);
DECLARE VARIABLE tSegundosInicio INTEGER;
DECLARE VARIABLE tSegundosFinal INTEGER;
begin
     TiempoInicio = 'Now';
     tSegundosInicio =
                  (EXTRACT(Hour  from TiempoInicio) * 3600 ) +
                  (EXTRACT(Minute from TiempoInicio) * 60 ) +
                  EXTRACT(Second from TiempoInicio) ;
     I = 0;
     WHILE (I <= 5000000) DO
     BEGIN
           VALORCAMPO1 = 'Valor Campo1: ' || CAST(I as varchar(80));
           VALORCAMPO2 = 'Valor Campo2: ' || CAST(I as varchar(80));
           INSERT INTO  TABLA1  ( tabla1.id ,  tabla1.campo1, tabla1.campo2 ) values(:I, :VALORCAMPO1, :VALORCAMPO2 );
           I = I + 1;
     END

     TiempoFinal = 'Now';
     
     tSegundosFinal =
                  (EXTRACT(Hour  from TiempoFinal) * 3600 ) +
                  (EXTRACT(Minute from TiempoFinal) * 60 ) +
                  EXTRACT(Second from TiempoFinal) ;

     TIEMPO =  (tSegundosFinal - tSegundosInicio);

     Suspend;

end
^


ALTER PROCEDURE METEENTABLA2 (
    VALORDEID INTEGER)
AS
DECLARE VARIABLE IDENSTRING VARCHAR(20);
begin
  IDENSTRING = 'Valor de Id: ' || CAST(:VALORDEID as varchar(80));
  INSERT INTO  tabla2  ( tabla2 . id ,  tabla2 . valor1 ) values(:VALORDEID, :IDENSTRING );
  suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE TRIGGER INSERTAENTABLA2 FOR TABLA1 ACTIVE
AFTER INSERT POSITION 0
AS
begin
   execute procedure meteentabla2(new. id );
end
^

CREATE TRIGGER TABLA1OPTENERID FOR TABLA1 ACTIVE
BEFORE INSERT POSITION 0
AS
BEGIN
    if (new. id  is null) then
    new. id  = gen_id( sacarid , 1);
END
^

SET TERM ; ^

se hace notar que pa meterle más cañita será un alta masiva de 5.000.000 filas, tal y como se refleja en el Store Procedure

tal y como comenta Rufus:

Cita:
Hacer las dos pruebas en local sin vmware ni emulaciones extrañas, mediante un script sql que ejecutas exactamente igual tanto en windows como en linux. Mediante el script tambien se pueden sacar los tiempos preguntando al servidor firebird.
pues bien, pasando ya de historias, y dado que el mismo procedure nos devuelve el tiempo de proceso, y lanzado tanto en win2000K y linux mediante la propia consola isql,

Código SQL [-]
SELECT TIEMPO FROM DAMETIEMPOS;

tanto en async con sync los tiempos obtenidos han sido:

WIN2K Pro --- En Async = 937 y En Sync = 1.085

Mandrake 10 (kernel 2.6) --- En Async = 461 y en Sync = 523

Nota: a su vez lo he lanzado también desde la WmWare comentada, y en Async el timpo ha sido de 626.

Rufus comentó:

Cita:
Me brindo a prestar mi ayuda para realizar la prueba en red sobre windows 2003, lo que pasa que el servidor para windows o linux deberia ser la misma máquina, o una exactamente igual y no puedo poner linux en ese servidor.
En ti queda la prueba en Win2003; yo no puedo.
__________________
online
Responder Con Cita