APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / WinXP

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

Moderator: Moderatoren

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: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von Koverhage »

Damit nicht, bei Express wird das über DLL Calls gemacht,
hat ot4xb vielleicht so was ähnliches ?
Gruß
Klaus
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: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von Tom »

Ich bin grundsätzlich kein Freund davon, wenn wir, als Softwareentwickler/-häuser mit irgendwelchen Registrysachen kommen und die Kunden auffordern, da herumzuschrauben und "auszuprobieren". Und ich bin erfahrungsbasiert der Meinung, dass die meisten Probleme hausgemacht sind; die Häuser, in denen sie gemacht werden, sind in aller Regel unsere. Aus meiner ganz persönlichen Sicht hat sich beispielsweise alles rund ums Thema "Opportunistic Locking" als Märchen herausgestellt; die Systematik kann genutzt werden und erzeugt mit aktuellen Betriebssystemen auch keine Fehler. Ihre Abschaltung verlangsamt Netze allerdings drastisch.

Im vorliegenden Fall verlangsamt sich also das Anhängen von Daten an eine exklusiv genutzte Datei. Nach dem Ausschluss der üblichen Verdächtigen (Controller im Eimer, hereinfunkende Virenscanner) durch einen Wechsel des Testsystems würde ich die Datei zunächst reduzieren und dann schrittweise (Felder, Anzahl der Datensätze) vergrößern, um herauszubekommen, ob hier irgendwas nicht stimmt bzw. ab wann das Phänomen auftritt. Außerdem würde ich Filemon/Procmon installieren (lokal und im Netz), um die Schreibprozesse zu überwachen - und auch zu sehen, ob Fremdsoftware eingreift bzw. wo Latenzen entstehen. Zu allererst würde ich allerdings prüfen, ob in der Routine, die die Daten schreibt, nicht doch etwas steckt, das die Verlangsamung verursachen könnte. Eine unglücklich programmierte Schleife kann solche Folgen haben, die sich möglicherweise lokal nicht zeigen, weil man dort den immer vorhandenen Bottleneck "Netz" nicht so bemerkt. Hier können die deutlich größeren Ressourcen einen Designfehler vertuschen.

Usw.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von brandelh »

Tom hat geschrieben:Ich bin grundsätzlich kein Freund davon, wenn wir, als Softwareentwickler/-häuser mit irgendwelchen Registrysachen kommen und die Kunden auffordern, da herumzuschrauben und "auszuprobieren".
Ich auch nicht, insbesondere weil ich bisher gut ohne ausgekommen bin.
Das hat sich allerdings mit der Einführung der neuen Server geändert und wenn Microsoft sogar solche Einträge für filebasierte Anwendungen vorschlägt ...
Tom hat geschrieben:Und ich bin erfahrungsbasiert der Meinung, dass die meisten Probleme hausgemacht sind; die Häuser, in denen sie gemacht werden, sind in aller Regel unsere. Aus meiner ganz persönlichen Sicht hat sich beispielsweise alles rund ums Thema "Opportunistic Locking" als Märchen herausgestellt; die Systematik kann genutzt werden und erzeugt mit aktuellen Betriebssystemen auch keine Fehler. Ihre Abschaltung verlangsamt Netze allerdings drastisch.
das Hauptproblem besteht ja meist darin, dass man im eigenen Testnetz keinerlei Fehler findet und die Zielumgebung nicht immer testen oder beeinflussen kann.
Insbesondere wenn die betreffende Anwendung nicht die Hauptanwendung der Firma ist.

Je nach Anwenderzahl im Zielnetz treten auch ganz andere Antwortzeiten wie im kleinen Testnetz auf.
z.b. Datensicherung um 12:00, automatischer Virenscan (auch wenn er nicht die Dateien trifft, die Platten werden langsamer) ...
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: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von Tom »

Die Frage ist doch, ob überhaupt ein Fehler vorliegt. Dieser APPEND-FROM-Code setzt quasi eine Filterbedingung für die Quelltabelle, jedenfalls einen Ausdruck, der für jeden Datensatz evaluiert wird. Ich weiß nicht, wie gut das (DbImport) programmiert ist, hoffe aber mal, dass es halbwegs optimal ist. Jedenfalls. Für jeden Treffer wird in der Zieltabelle ein Datensatz angelegt und mit den Originalfeldern befüllt. Bei 20.000 Datensätzen, die zu prüfen sind, ist das im Netz schon erheblicher Traffic. Die Zieltabelle muss übrigens nicht exklusiv geöffnet sein; wenn das nicht der Fall ist, erfolgt das Locking implizit. Wahrscheinlich fällt es weg, wenn die Datei exklusiv geöffnet ist. Ob das was bringt, müsste man mal messen.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von brandelh »

APPEND FROM FOR ...

führt zwar für jeden Datensatz diese Prüfung durch, aber genau einmal.
Das Filterproblem beim Browsen (mit Index) liegt genau darin, dass jeder Datensatz bei jedem Durchgang erneut gesucht und angezeigt werden muss.
Das ist bei APPEND FROM anders, ABER je nach Feldtyp (Memofelder können sehr viel Inhalt haben) und Datensatzlänge dauert das bei 20.000 natürlich schon seine Zeit.

Ich habe vor einiger Zeit EXCLUSIV mit SHARED verglichen und meine so um den Faktor 10 war exclusive schneller, wobei mir einfällt ...

Die ZIELDATEI sollte EXCLUSIVE und OHNE INDEX geöffnet sein. Wenn man einen braucht, nachträglich erzeugen.
Automatisch sperren tut der Befehl nicht, bei SHARED muss man mit FLOCK() arbeiten ...
Es kann auch Sinn machen, die Quelldatei mit COPY FILE erstmal lokal zu holen und von dort aus nochmals zu lesen.

Je nach RAM Ausstattung und Dateigröße macht es auch Sinn die Datei auf virtuelle RAM-DISKs auszulagern, es gibt dafür Treiber.
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: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von Tom »

und OHNE INDEX
Das ist ein wichtiger Hinweis.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von AUGE_OHR »

Tom hat geschrieben:... alles rund ums Thema "Opportunistic Locking" als Märchen herausgestellt
jaja ... und die Kinder kommen vom Klapperstorch.
SMB wurde mit Windows NT eingeführt und ist auch für neue Techniken wie Hyper-V in SMB2.2 definiert. Ohne SMB ware KEIN "share" Zugriff möglich !!!

da in "diesem" Fall Daniel schreibt das er "alleine" im Netzwerk arbeitet sollte es KEINE SMB Probleme geben ... es gehören eben "mindesten" 2 Workstationen dazu und der "Effekt" tritt nur bei der beschriebenen Konstellation auf.

***

@Daniel

meine "Regel" für Netzwerk : entweder "lesen" oder "schreiben" wobei letzteres immer langsamer ist.

du "liest" die Daten vom Server, wertest die im Client aus und sendest das "Ergebniss" zurück.
je nachdem (.T. /.F.) wird dann der Datensatz in die 2nd DBF geschrieben.

nun sollte die 2nd DBF aber möglichst nicht auf dem Server liegen, sondern LOKAL, denn das "schreiben" verlangsamt das ganze nochmals und wenn der "Cache" voll ist bricht die Transferrate ein.

"wenn" es nun SQL "wäre" dann würde der Server die Bedingungen "auswerten" und eine Table anlegen was vermutlich viel schneller geht.
gruss by OHR
Jimmy
Daniel

Re: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von Daniel »

Also das Programm macht eine Auswertung, deshalb läuft es allein - es macht ja keinen Sinn, dass mehrere Leute die gleiche Auswertung laufen lassen.
Nachdem wir einige Schwierigkeiten angetroffen hatten - das Programm lief zwei - oder dreimal schnell ab, wurde es bei erneutem Starten plötzlich seeeehhhr langsam. Und blieb so langsam, auch bei weiteren Versuchen.

In einer Testumgebung mit einem Win2008 Server, einem WinXP- , einem Win7-Client und einer Win8-Workstation haben wir dann den Server neu gestartet. Dann passierte wieder das Gleiche:
Zuerst auf Win7 lief es dreimal schnell ab. Dann beendigte ich das Programm, und startete es neu auf XP. Es lief seehr seeehr langsam ab, statt ca. 1-2min etwa 15-20 min!!

Ich sagte dem Kunden, die Win8-WS müsse raus aus dem Netz, weil er sonst auch mehrere XP und eine Win7-Station hat.
Doch er meinte, die sei ja im Moment nicht aktiv.

Unterdessen war der Netzwerk-Verantwortliche da - wie oben erwähnt - und sie haben angeblich alles durchgecheckt. Es sei alles in Ordnung und das Problem müsse beim Programm liegen.
Ich kann nicht beurteilen, ob das mit "Opportunistic Locking" zu tun hat oder ob das, wie Tom sagt, ein Märchen sei. Auf jeden Fall sind diese Vorgänge äusserst seltsam.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von brandelh »

Und wenn man es NUR auf dem XP Rechner startet, dauert es dann auch lang ?
Wenn man nach einem langen Durchlauf auf dem XP Rechner das Programm auf dem Win7 Rechner startet, ist es dann wieder schnell ?

Ich lege in solchen Fällen gerne eine ALTERNATE Datei (lokal) an und schreibe Protokollinfos:

? date(),time(),"Ich bin hier ..."

So könnte man sehen welche Befehlszeilen so lange brauchen.
Schau dir auch mal im Taskmanager den Speicherverbrauch an, DLLs oder so nutzt du aber nicht oder ?
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: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von Tom »

Hallo, Daniel.

Steffen hatte auf der DevCon oder auf dem Forentreffen kurz am Rande etwas zu heterogenen Netzwerken gesagt, und darüber, welche Konsequenzen die morgendliche Login-Folge haben kann. Dazu hatte er kurz angedeutet, dass es Tools gibt, die man auf dem Server laufen lassen kann, um für eine demokratisch verteilte Priorität zu sorgen - ich erinnere mich nur leider nicht daran, um welche es ging. Außerdem sollte im vorliegenden Fall mal geprüft werden, ob sich diese Situation auch außerhalb der Anwendung auswirkt, also ob beispielsweise das Kopieren großer Datenmengen von/zum betroffenen Arbeitsplatz langsamer wird.
Herzlich,
Tom
Daniel

Re: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von Daniel »

Ich würde auch liebend gerne darauf verzichten, Untersuchungen über Registry-Einträge und Net-Manager-Einstellungen zu machen. Als Applikationsentwickler würde ich mich gerne darauf beschränken und darauf vertrauen, dass M$ ein verlässliches OS und Alaska einen verlässlichen Compiler/Linker liefert. Eigentlich kann ich es mir gar nicht leisten, solchen LAN-Detailfragen bis in alle Einzelheiten (und Unklarheiten!) nachzugehen.
brandelh hat geschrieben:Und wenn man es NUR auf dem XP Rechner startet, dauert es dann auch lang ?
Kann ich im Moment nicht beantworten. Wenn es normal, dh. schnell lief, war XP etwa gleich schnell wie Win7, also kaum ein Unterschied.
Wenn man nach einem langen Durchlauf auf dem XP Rechner das Programm auf dem Win7 Rechner startet, ist es dann wieder schnell ?
Nein, soweit ich mich erinnere, blieb es langsam. Wie wenn im Netz etwas verstopft wäre.
Ich lege in solchen Fällen gerne eine ALTERNATE Datei (lokal) an und schreibe Protokollinfos.
Ja, das verwende ich zeitweise auch. Hier habe ich die Meldezeilen genutzt und vermehrt, so dass ich sagen kann, dass die Verlangsamung beim (zuoberst zitierten) APPEND FROM geschieht.
Schau dir auch mal im Taskmanager den Speicherverbrauch an, DLLs oder so nutzt du aber nicht oder ?
All diese Utils habe ich - bei mir auf meinem kleinen NAS-Netz mit XP und Win7 - angewendet, auch den "ProcMon", aber es gibt keine übermässigen Auffälligkeiten, zwar Belastungsspitzen, die aber wieder abflachen, Netzwerk so um 20%, Speicher um 50% und teilweise recht intensive Disk-Aktivität. Allerdings kann ich auch diese extreme Verlangsamung um Faktor 10 bei mir nicht nachstellen. - Nein, keine DLLs. - An Optimierungen arbeite ich noch -
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von brandelh »

Wenn ich recht gezählt habe gibt es dort ...

Server 2008
1 x Win XP
1 x Win 7
1 x Win 8

Ich würde testen, ob es am Kopieren liegt, indem ich auf beiden Rechnern eine Batch öffne, die
die Datei jeweils lokal kopiert, immer einer nach dem anderen.

Code: Alles auswählen

@echo off
:warten
pause
xcopy \\server\freigabe\datei.dbf c:\temp
echo ... nun anderer Rechner ...
goto warten
Wenn das Verhalten auch hierbei auftritt, muss es an einem Programm auf dem Server bzw. Fehlerhafter Hardware liegen.
Wenn nicht, würde ich so die Lösung einbauen ;-)

PS: wenn die Auswertungsdatei vorher leer war, kannst du auch versuchen ob COPY (fields ...) TO (cLokalerName) FOR AuswahlBedinung() auch die Probleme machen würde.

Ich denke, dass irgendeine Optimierung / Prüfung / Software auf dem Server loslegt und die Platten beansprucht.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: APPEND FROM resp. DbIMPORT verlangsamt in LAN W2k8 / Win

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Hierbei wollte ich eigentlich die Liste aller enthaltenen Keys/Variablen eines Keys abfragen :KeyList() und :ValueList() finden aber nichts.
Muss man da bei XP SP 3 ff. etwas ändern ?
warum sollte sich da was ändern ... dann wären die ja nicht mehr "gültig" ?

Code: Alles auswählen

STATIC FUNCTION CheckSub(cHKLM)
LOCAL oReg
LOCAL cPart
LOCAL aList
LOCAL nPosi

   cPart := STRTRAN(cHKLM,"\Parameters","")
   oReg := XbpReg():NEW(cPart)
   IF .NOT. oReg:Status()
      MSGBOX("Registry Key "+cPart+" not found")
      RETURN .F.
   ENDIF

   aList := oReg:KeyList()
so damit hat du dann ein Array mit den "Key".
als nächstes kommt der "Value"

Code: Alles auswählen

STATIC FUNCTION GETREGKEY(cHKLM,cKEY,cWHATTYPE)
LOCAL oReg
LOCAL cRet := ""

   oReg := XbpReg():NEW(cHKLM)
   IF oReg:Status()
      DO CASE
         CASE cWHATTYPE = "DWORD"  ; oReg:ReadBinType := "C"
         CASE cWHATTYPE = "REG_SZ" ; oReg:ReadBinType := "C"
         CASE cWHATTYPE = "REGBIN" ; oReg:ReadBinType := "B"
      ENDCASE
      cRet := oReg:GetValue(cKEY)
   ENDIF
RETURN cRet

wenn du mein altes "Ops-lock" Modul hast wurde ja folgenden Structure angelegt.

Code: Alles auswählen

STATIC FUNCTION Cre_OPSLOCK(datei)
LOCAL field_list  := {}
LOCAL aKeys       := {}
LOCAL aExtra      := {}
LOCAL i, iMax     := 0

  IF !FILE(datei)
    aadd(field_list,{"HKLM"    ,"C",200,0})
    aadd(field_list,{"KEY"     ,"C", 70,0})
    aadd(field_list,{"ACTIVE"  ,"L",  1,0})
    aadd(field_list,{"MUSTHAVE","N",  1,0})
    aadd(field_list,{"SOW"     ,"C",  1,0})
    aadd(field_list,{"DWORD"   ,"C",  8,0})
    aadd(field_list,{"ISTDWORD","C",  8,0})
    aadd(field_list,{"ORGDWORD","C",  8,0})
    aadd(field_list,{"WHATTYPE","C",  8,0})
    aadd(field_list,{"WHEREURL","C",200,0})
    aadd(field_list,{"COMMENT" ,"M",  8,0})

    DBCREATE(datei,field_list)
  endif
  USE (datei) EXCLUSIV
wenn man die "erweitert"*** mit Einträgen kann man die mit dem "Ops-lock" Modul auch für andere Registry Setting verwenden.
*** nicht die DBSTRUC() verändert sonderen Records anhängen !
gruss by OHR
Jimmy
Antworten