Einzelnen Beitrag anzeigen

Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Firebird wird beim Append von Datensätze immer langsamer

  Alt 24. Jan 2009, 23:46
Hallo Bernhard Geyer,

Zitat von Bernhard Geyer:
Und dein Quellcode ist ja schrecklich was die Kapslung betrifft. Du greifst von einer unabhängigen Funktion fest auf eine globale Variable (Forms3) zu. Wenn schon definiere als mindesten die Funktion als Methode von Form3 und lass in der Methode alle Form3-Angaben weg.
Da gebe ich Dir vollkommen Recht!!! Habe Teile der Procedure aus der Anwendung schnell zusammen kopiert.

Zitat von Bernhard Geyer:
Definier Zählflüssig und deine Testumgebung?
Am Anfang hat das einfügen von ca. 500 Datensätze ca. 1sek, gedauert, jetzt nachdem ca. 0,5 Mio. Datensätze vorhanden sind dauert es ca. 25 sek.

Zitat von Bernhard Geyer:
Hast du auch den Virenscanner für deine Firebird-DB-Dateien ausgeschaltet?
Nein, hat der Virenscanner denn mit zunehmenden Anzahl an Datensätze so einen großen Einfluss?

Zitat von Bernhard Geyer:
Wie schaut es mit der Tabellendefinition (Indize, ...) aus?
SQL-Code:
ET SQL DIALECT 3;

SET NAMES NONE;

SET CLIENTLIB 'C:\Programme\Firebird\Firebird_2_0\bin\fbclient.dll';



/******************************************************************************/
/****                               Domains                                ****/
/******************************************************************************/

CREATE DOMAIN DATUMZEIT AS
TIMESTAMP;

CREATE DOMAIN MSID AS
VARCHAR(5) CHARACTER SET WIN1252
NOT NULL;

CREATE DOMAIN MSINCID AS
INTEGER
CHECK (VALUE>0);

CREATE DOMAIN MW AS
DOUBLE PRECISION;



/******************************************************************************/
/****                              Generators                              ****/
/******************************************************************************/

CREATE GENERATOR MW_ID_GEN;


/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/



CREATE TABLE MW_TABELLE (
    MW_ID MSINCID NOT NULL,
    MW_MSID MSID NOT NULL,
    MW_DATUMUHRZEIT DATUMZEIT DEFAULT 'NOWNOT NULL,
    MW_MW MW NOT NULL
);



/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE MW_TABELLE ADD CONSTRAINT PK_MW_TABELLE PRIMARY KEY (MW_ID);


/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/

CREATE INDEX MW_TABELLE_DATUM ON MW_TABELLE (MW_DATUMUHRZEIT);
CREATE INDEX MW_TABELLE_MSID ON MW_TABELLE (MW_MSID);


/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/


SET TERM ^ ;


/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: SET_MW_ID */
CREATE TRIGGER SET_MW_ID FOR MW_TABELLE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  if (new.mw_id is null) then
  new.mw_id = gen_id(mw_id_gen, 1);
end
^

SET TERM ; ^



/******************************************************************************/
/****                             Descriptions                             ****/
/******************************************************************************/

DESCRIBE DOMAIN DATUMZEIT
'Aktuelles Datum und Uhrzeit';

DESCRIBE DOMAIN MSID
'Messstellen ID besteht aus der 3
Stelligen MANr und aus der 2 Stelligen
MSNr.
';

DESCRIBE DOMAIN MSINCID
'CHECK (VALUE>0)';

DESCRIBE DOMAIN MW
'Gemessener Messwert';



/* Fields descriptions */

DESCRIBE FIELD MW_ID TABLE MW_TABELLE
'CHECK (VALUE>0)';

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat