dbf mit sehr vielen gelöschten Datensätzen

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

Ich auch nicht, allerdings habe ich auch selten solche Dateien (die hätte ich gepackt).
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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

Beitrag von Tom »

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
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
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

Beitrag von Koverhage »

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.
Gruß
Klaus
Benutzeravatar
Jan
Marvin
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

Beitrag von Jan »

Hallo Tom,

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.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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

Beitrag von Tom »

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
Benutzeravatar
brandelh
Foren-Moderator
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

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
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

Beitrag von Manfred »

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!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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

Beitrag von Tom »

Wie gesagt: Index mit "FOR !Deleted()"-Bedingung.
Herzlich,
Tom
Antworten