Große Performance-Probleme nach Tausch von Grid
-
Hallo!
Nach dem ich mir nicht sicher war in welcher Kategorie mein Beitrag besser aufgehoben ist, hab ich mir ausnahmsweise erlaubt hier auch noch einen Beitrag zu posten. Nun aber zu meinem Problem.
Ich habe in meinem aktuellen Projekt ein 'CRDBGrid' durch ein 'TDBAdvGrid' ersetzt. Das sieht ganz schick aus, allerdings habe ich nun große Probleme mit der Performance, will heißen ein Scrollen ist fast nicht mehr möglich. Die Option 'PageMode' habe ich bereits aktiviert. Das hat leider nichts gebracht. Auch ein nachträglich indexieren verschiedener Tabellen hat nicht zum Erfolg geführt. Hervorgerufen wird die schlechte Performance durch nachfolgende Routine:
void __fastcall Tdatenbankkomponenten::D_kundenverwaltungDataChange (TObject *Sender, TField *Field) { // Nur Filtern falls Tabelle 'kundenverwaltung' nicht bearbeitet wird if (Q_kundenverwaltung->State == 1) { // Nur Filtern falls Datensaetze in 'kundenliste' vorhanden sind if (Q_kundenverwaltung->RecordCount > 0) { // Ansicht fuer zugeordnete Automaten aktualisieren Q_automatenverwaltung->SQL->Clear(); Q_automatenverwaltung->SQL->Add ("SELECT * FROM automatenverwaltung"); Q_automatenverwaltung->SQL->Add(" WHERE KUNDENNUMMER = '" + IntToStr(iKundenverwaltungKundennummer) + "' OR VORGEMERKT_KUNDENNUMMER = '" + IntToStr(iKundenverwaltungKundennummer) + "' ORDER BY TYP ASC, BEZEICHNUNG ASC"); Q_automatenverwaltung->Open(); } }
Die Datenbank basiert übrigens auf MySQL Server 5.5, Engine ist InnoDB. Auch mit MyISAM ist es nicht schneller.
Auch ein kurzfristiges verstecken des Grid führt nicht zum Erfolg. Leider bin ich gezwungen diese Abfrage nach jedem 'OnChange' auszuführen, da auch verschiedene Parameter übergeben werden.
Hat jemand eine Idee für einen eleganteren Weg?
Ich freu mich über jeden Lösungsansatz.
Viele Grüße
Maik
-
Um wie viele Zeilen geht es denn so ca?
Hast du mal gewartet ob sich das Problem irgendwann gibt (z.B. wenn das Result fertig geladen ist), oder bleibt es auch nach mehreren Minuten bestehen?
Wie sieht die CPU Auslastung des GUI Programms aus während man scrollt?
Wie sieht die CPU Auslastung des MySQL Servers aus während man scrollt?
Hast du mal versucht das ORDER BY wegzulassen? Das WHERE wegzulassen?
Hast du auch Probleme bei wenig Zeilen, sagen wir so 1000-10000?
Hast du irgendwelche Message-Handler überschrieben?
Hast du abgesehen vom PageMode noch irgendwelche Optionen des TDBAdvGrid vom Default-Wert geändert?
Hast du was daran geändert wie das SELECT zusammengebaut wird?EDIT: ansonsten mal Hersteller anschreiben. Das Ding kostet schliesslich Geld, dann kann der auch mal Support leisten.