AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Updates mit Zeos/MySQL dauert zu lange?

Updates mit Zeos/MySQL dauert zu lange?

Ein Thema von dbdeath74 · begonnen am 11. Dez 2006 · letzter Beitrag vom 13. Dez 2006
Antwort Antwort
Seite 2 von 2     12
dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#11

Re: Updates mit Zeos/MySQL dauert zu lange?

  Alt 13. Dez 2006, 11:49
Zitat von hoika:
Hallo,

so wie es in den Quellen (6.5.1. Alpha) aussieht,
wird immer prepared.
Ab 4.1 wird das Prepare von mysql übrigens erst unterstützt.

Solange das Statement sich nicht ändert,
bleibt die Query prepared.
Das heisst in deinem Fall, einfach eine parametrisierte Query
benutzen und den SQL-Text NICHT jedesmal zuweisen,
oder anderes gesagt.
Nimm eine separate Query, schreibe den SQL-Text (parametrisiert) einmal rein
und rufe dann immer nur Open bzw. Execute auf.


Heiko
PS: es muss doch auch nen SQL-Monitor geben,
wo man das Preparen der Query sehen kann.
Ich gehe ohne den sqlmonitor gar nicht ausser Haus
Hallo,

hörte sich in der Theorie klasse an *g

Hat leider fast keine Geschwindigkeitsvorteile gebracht

Gruß Oliver
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Updates mit Zeos/MySQL dauert zu lange?

  Alt 13. Dez 2006, 14:07
Hallo,

dann zeige doch noch mal diese Stelle,
wie sieht es eigentlich mit Transaktionen aus ?
Vor der Schleife StartTransaction und danach ein Commit;

Und knips endlich den SQL-Monitor an


Heiko
Heiko
  Mit Zitat antworten Zitat
dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#13

Re: Updates mit Zeos/MySQL dauert zu lange?

  Alt 13. Dez 2006, 15:37
Hallo,

öhmm welchen SQL Monitor meinst du?
Für mySQL kenne ich nur das was mir der mySQL Administrator mitliefert.

Hier mal 3 Sekunden Ausschnitt mit parametriesiertem Query.
Benutzt wird ZQuery Komponente. Meine Applikation bremst es auch nicht, die langweilt sich bei 5% Prozessorlast.
Beim der MSSQL version habe ich an dieser Stelle Prozessorlast ca 80%, einfach weil es viel schneller geht und er viel mehr zu tun hat.

MySQL schafft einfach nicht mehr wie ca 10 Updates pro sekunde
Aber auch der mySQL Dienst langweilt sich und hat kaum Prozessorauslastung(5%).

Die Tabelle aufm mySQL ist im InnoDB Format, hat einfach 4 Integer, 2 varchars und ein bit feld. Primary Key ist auf der ID über die ich ja auch das Update mache.
Ansonsten hat die Tabelle nur noch einen weiteren Index auf ein weiteres Feld das ich woanderst häufig zur Suche brauche.

Ich frage mich halt wer hier auf wenn und warum wartet *g

So baue ich die Query jetzt auf:
Delphi-Quellcode:
with QryLastScan do
    begin
      SQL.Clear;
      SQL.Add('UPDATE CMDB_Software_Scan SET LastScan =:ScanDate ');
      SQL.Add(', Aktiv = 1');
      SQL.Add(' WHERE ID = :ID');
    end;
Und so Rufe ich sie auf:
Delphi-Quellcode:
with QryLastScan do
begin
  ParamByName('ScanDate').AsString := QuotedStr(DateTimeToStr(scanDate));
  ParamByName('Id').AsInteger:= ScanId;
  ExecSQL;
end;
Und hier mal ein 3sec AUsschnitt ausm mySQL Administrator

SQL-Code:
061213 13:29:09    5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2240
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2241
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2242
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2243
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2244
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2245
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2246
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2247
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2248
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2249
061213 13:29:10    5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2250
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2251
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2252
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2253
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2254
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2255
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2256
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2257
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2258
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2259
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2260
061213 13:29:11    5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2261
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2262
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2263
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2264
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2265
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2266
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2267
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2268
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2269
            5 Query UPDATE CMDB_Software_Scan SET LastScan ='\'13.12.2006 13:10:58\'' , Aktiv = 1 WHERE ID = 2270
Ich habe jetzt mal testweise etwas gebastelt mit directSQL. Der Schafft auch nicht mehr wie 10 Updates pro sekunde

Transaktionen verwende ich nicht, da ich erstens alleine schreibzugriff habe und zweitens einfach nur ein Update machen will :p
Transaktionen sollten doch auch meines Wissens nichts mit der Geschwindigkeit zu tun haben, sondern es eher noch langsamer machen weil er ja Rollbackpunkte etc... bereithalten muss. Lasse mich aber gerne eines besseren belehren

Gruß Oliver
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#14

Re: Updates mit Zeos/MySQL dauert zu lange?

  Alt 13. Dez 2006, 15:49
Bei den Zeos gibt es eine Komponente TZSQLMonitor. Falls diese aktiv ist protokolliert die alle Befehle und Fehlermeldungen mit, die über deine TZConnection wandern Falls man nur bestimmte Meldungen protokollieren will, sollte man sich das Ereignis OnLogTrace anschauen.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Updates mit Zeos/MySQL dauert zu lange?

  Alt 13. Dez 2006, 15:53
Hallo,

also unter Firebird (BDE, jaja ) ist das so:

Wird keine Transaktion manuell (DataBase.StartTransaction) gestartet,
erzeugt die BDE für JEDE Abfrage eine Transaktion und Committed die.
Das ist bei bestimmten Sachen um Faktor 20 langsamer,
als einmal eine Transaktion zu starten,
alle Updates machen und dann Committen.

Sind die IDs eigentlich immer aufsteigend ohne Lücken ?
Dann würde ja ein Where Id>=Min and Id<=Max reichen

Heiko
Heiko
  Mit Zitat antworten Zitat
dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#16

Re: Updates mit Zeos/MySQL dauert zu lange?

  Alt 13. Dez 2006, 16:54
Zitat von hoika:
Hallo,

also unter Firebird (BDE, jaja ) ist das so:

Wird keine Transaktion manuell (DataBase.StartTransaction) gestartet,
erzeugt die BDE für JEDE Abfrage eine Transaktion und Committed die.
Das ist bei bestimmten Sachen um Faktor 20 langsamer,
als einmal eine Transaktion zu starten,
alle Updates machen und dann Committen.

Sind die IDs eigentlich immer aufsteigend ohne Lücken ?
Dann würde ja ein Where Id>=Min and Id<=Max reichen

Heiko
Hallo,

GENIAL !!!!

Faktor 20 ist gar kein Ausdruck *g hab jetzt 1/3 Sekunde pro Gerät statt 8 sec.
Er macht wirklich wenn man nichts sagt jedesmal eine Transaction.

Achja, MSSQL mit ADO Komponenten macht dies anscheinend nicht. Hier brachte Transaktion keinerlei Vorteile.

Und nein die IDs sind nicht immer aufsteigend, das war nur Zufall weil es auf der Testversion war.

Gruß Oliver
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#17

Re: Updates mit Zeos/MySQL dauert zu lange?

  Alt 13. Dez 2006, 17:34
Hm,

jetzt habe ich dich noch mehr an mysql rangebracht,
statt dich für Firebird zu begeistern, ich Dussel

Egal.


Heiko
Heiko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz