dbf mit sehr vielen gelöschten Datensätzen
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14641
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 87 Mal
- Kontaktdaten:
dbf mit sehr vielen gelöschten Datensätzen
Gestern hatte ich bei einem Kunden ein interessantes Phänomen: Ich hatte in einer dbf mit insgesamt ca. 6.200 Datensätzen bei ca. 6.100 Datensätze die Feldinhalte geleert und dann den Satz deleted. Soweit so OK.
Dann kam aber das Überraschende: Diese dbf inkl. der sechs dazugehörigen NTX zu öffnen dauert normalerweise ein Fingerschnippen. Nach der Löschaktion dauerte das plötzlich mehrere Minuten. Erst als die dbf gepackt worden ist, lief die wieder schnell.
Ist jemandem von Euch bekannt, das solche Löschaktionen derartige Auswirkungen haben können?
Jan
Dann kam aber das Überraschende: Diese dbf inkl. der sechs dazugehörigen NTX zu öffnen dauert normalerweise ein Fingerschnippen. Nach der Löschaktion dauerte das plötzlich mehrere Minuten. Erst als die dbf gepackt worden ist, lief die wieder schnell.
Ist jemandem von Euch bekannt, das solche Löschaktionen derartige Auswirkungen haben können?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: dbf mit sehr vielen gelöschten Datensätzen
Was genau hat so lange gedauert ?
Wenn du SET DELETED ON und einen Browser hast, dann ist das verständlich, das er sequentiell erstmal viele Datensätze überspringen muss, bis er die 100 anzeigbaren hat.
Seltsam wäre es aber wenn es schon beim Öffnen ohne Anzeige länger dauert.
Wenn du SET DELETED ON und einen Browser hast, dann ist das verständlich, das er sequentiell erstmal viele Datensätze überspringen muss, bis er die 100 anzeigbaren hat.
Seltsam wäre es aber wenn es schon beim Öffnen ohne Anzeige länger dauert.
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14641
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 87 Mal
- Kontaktdaten:
Re: dbf mit sehr vielen gelöschten Datensätzen
Hallo Hubert,
klar, wenn ich da einen browse drauf setzen würde, dann würde ich das ja noch verstehen können. Aber ein einfaches USE? Ich hab sowas noch nie gehört.
Jan
klar, wenn ich da einen browse drauf setzen würde, dann würde ich das ja noch verstehen können. Aber ein einfaches USE? Ich hab sowas noch nie gehört.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: dbf mit sehr vielen gelöschten Datensätzen
Ich auch nicht, allerdings habe ich auch selten solche Dateien (die hätte ich gepackt).
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9345
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 100 Mal
- Danksagung erhalten: 359 Mal
- Kontaktdaten:
Re: dbf mit sehr vielen gelöschten Datensätzen
Das USE selbst sollte diese Wirkung nicht haben, denn USE bewegt/setzt eigentlich nicht den Dateizeiger. Da müsste schon irgendwo ein DbGoTop() sein. Das hätte zur Folge, dass der erste nichtgelöschte Datensatz gesucht wird.
Herzlich,
Tom
Tom
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2470
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: dbf mit sehr vielen gelöschten Datensätzen
es liegt ja vermutlich nicht am Use selbst, sondern an den Index Dateien.
Wenn es viele gelöschte Sätze in einer DBF mit Index Dateien gibt, kann das schon mal vorkommen.
Wenn es viele gelöschte Sätze in einer DBF mit Index Dateien gibt, kann das schon mal vorkommen.
Gruß
Klaus
Klaus
- Jan
- Marvin
- Beiträge: 14641
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 87 Mal
- Kontaktdaten:
Re: dbf mit sehr vielen gelöschten Datensätzen
Hallo Tom,
das passierte definitiv beim USE inkl. Index-Öffnen. Alles andere kann ich ausschließen.
Jan
das passierte definitiv beim USE inkl. Index-Öffnen. Alles andere kann ich ausschließen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9345
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 100 Mal
- Danksagung erhalten: 359 Mal
- Kontaktdaten:
Re: dbf mit sehr vielen gelöschten Datensätzen
Ein USE mit INDEX setzt den Dateizeiger auf den ersten Datensatz gemäß führendem Index. Dabei wird so lange geskippt, bis ein nichtgelöschter Datensatz gefunden wird, wenn SET DELETED auf ON steht. Workaround: Ein konditionaler Index mit FOR !Deleted().
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15689
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: dbf mit sehr vielen gelöschten Datensätzen
mit oder ohne SET DELETED ON ?
Trenne die Öffnung der Indexdatei vom USE ab und du siehst wo es dauert !
USE // macht nichts, das müsste schnell gehen.
SET INDEX TO // hier kommt es auf die Einstellung von SET DELETED an !
mit SET DELETED OFF wird ein einfacher DbGoTop() implizit durchgeführt und der nach dem index kleinste Satz genommen. FALLS die 6000 mit blankem Indexfeld hast könnte das auch hier stören.
mit SET DELETED ON wird auch DbGoTop() schnell durchgeführt, danach muss aber intern ein dbLocate() auf den ersten Satz mit ! deleted() durchgeführt werden - das dauert. 6000 gleiche Indexfelder können zusätzlich bremsen.
Trenne die Öffnung der Indexdatei vom USE ab und du siehst wo es dauert !
USE // macht nichts, das müsste schnell gehen.
SET INDEX TO // hier kommt es auf die Einstellung von SET DELETED an !
mit SET DELETED OFF wird ein einfacher DbGoTop() implizit durchgeführt und der nach dem index kleinste Satz genommen. FALLS die 6000 mit blankem Indexfeld hast könnte das auch hier stören.
mit SET DELETED ON wird auch DbGoTop() schnell durchgeführt, danach muss aber intern ein dbLocate() auf den ersten Satz mit ! deleted() durchgeführt werden - das dauert. 6000 gleiche Indexfelder können zusätzlich bremsen.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Re: dbf mit sehr vielen gelöschten Datensätzen
Das Problem kenne ich auch. Öffnen mit Index und großer Zahl gelöschter Sätze erfordert Zeit. nach eine Pack geht es wieder ratz fatz.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9345
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 100 Mal
- Danksagung erhalten: 359 Mal
- Kontaktdaten:
Re: dbf mit sehr vielen gelöschten Datensätzen
Wie gesagt: Index mit "FOR !Deleted()"-Bedingung.
Herzlich,
Tom
Tom