ADS Last hoch
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 4 Mal
ADS Last hoch
Hallo,
ich setze von mehreren Klienten aus, in einem separaten Thread, einem Filter auf eine Datenbank. Dieser Thread tickert in einem Intervall von 3 Sekunden immer wieder neu. Ich prüfe damit, ob ein Eintrag in der Datenbank vorhanden ist, der einen bestimmten wert hat, um festzusstellen ob ein neuer Auftrag eingegangen ist.
Dieses Vorgehen erzeugt aber leider eine hohe CPU Last beim ADS selbst, welches sich bei diversen anderen SQL abfragen als hinderlich und Zeitraubend rausstellt.
Welche Wege gibt es um die Serverlast zu senken? Kann ich mich vom ADS über neue Aufträge benachrichtigen lassen?
ich setze von mehreren Klienten aus, in einem separaten Thread, einem Filter auf eine Datenbank. Dieser Thread tickert in einem Intervall von 3 Sekunden immer wieder neu. Ich prüfe damit, ob ein Eintrag in der Datenbank vorhanden ist, der einen bestimmten wert hat, um festzusstellen ob ein neuer Auftrag eingegangen ist.
Dieses Vorgehen erzeugt aber leider eine hohe CPU Last beim ADS selbst, welches sich bei diversen anderen SQL abfragen als hinderlich und Zeitraubend rausstellt.
Welche Wege gibt es um die Serverlast zu senken? Kann ich mich vom ADS über neue Aufträge benachrichtigen lassen?
Gruß Dominik
- Marcus Herz
- 1000 working lines a day
- Beiträge: 861
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: ADS Last hoch
ADS kann Notifications versenden. Diese können z.B. in einem After Insert Trigger erzeugt werden.
- Warum erezugt deine SQL Abfrage eine so hohe AUslastung? Hast du die mal im ARC analysieren lassen?
- Wie leutet das SQL?
- Warum erezugt deine SQL Abfrage eine so hohe AUslastung? Hast du die mal im ARC analysieren lassen?
- Wie leutet das SQL?
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
-
- Rookie
- Beiträge: 10
- Registriert: Di, 19. Jul 2011 9:31
- Wohnort: Ebensfeld
- Hat sich bedankt: 45 Mal
- Danksagung erhalten: 4 Mal
Re: ADS Last hoch
Hallo,
ich hatte ein ähnliches Problem(vielleicht das gleiche?) mit AOF-Filtern.
Ich hatte auch mehrere PCs die mehrere Filter erstellten um etwas anzuzeigen, was den Server zum schwitzen brachte.
Da dies in meinem Fall nur zur Anzeige benötigt wird konnte ich mir helfen in dem nur noch 1 PC den Filter aufbaut und das nötige Ergebnis dann in eine Datenbank schreibt.
Die anderen PCs lesen dann nur noch das Ergebnis aus der Datenbank.
Vielleicht hilft der Ansatz bei dir.
ich hatte ein ähnliches Problem(vielleicht das gleiche?) mit AOF-Filtern.
Ich hatte auch mehrere PCs die mehrere Filter erstellten um etwas anzuzeigen, was den Server zum schwitzen brachte.
Da dies in meinem Fall nur zur Anzeige benötigt wird konnte ich mir helfen in dem nur noch 1 PC den Filter aufbaut und das nötige Ergebnis dann in eine Datenbank schreibt.
Die anderen PCs lesen dann nur noch das Ergebnis aus der Datenbank.
Vielleicht hilft der Ansatz bei dir.
Gruß
Joern
Joern
- Marcus Herz
- 1000 working lines a day
- Beiträge: 861
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: ADS Last hoch
Ich würd immer die Wurzel des Problems suchen und mir keine Workarounds basteln. Ist fehleranfälliger und mehr Verwaltungsaufwand.
Es muss doch einen Grund geben warum ein AOF Filter so langsam ist oder ob es eine performantere Möglichkeit gibt, deas Ergebnis zu bekommen.
Es muss doch einen Grund geben warum ein AOF Filter so langsam ist oder ob es eine performantere Möglichkeit gibt, deas Ergebnis zu bekommen.
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- nightcrawler
- 1000 working lines a day
- Beiträge: 653
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 4 Mal
Re: ADS Last hoch
Das mit den Notifications kenne ich tatsächlich noch nicht, habe aber mal davon gehört.Marcus Herz hat geschrieben: ↑Di, 25. Jul 2023 9:41 ADS kann Notifications versenden. Diese können z.B. in einem After Insert Trigger erzeugt werden.
- Warum erezugt deine SQL Abfrage eine so hohe AUslastung? Hast du die mal im ARC analysieren lassen?
- Wie leutet das SQL?
Die SQL abfrage ist nicht das übel.
Wie analysiere ich sowas denn?
Ich muss dazusagen, dass ich mit der Tobax Klasse arbeite:
Zu beginn, setze ich auf eine Tabelle einen Felter
Code: Alles auswählen
::oADAuftrag:SetFilter( ' astand = "9" .AND. aufneu = "2" ' )
::oADAuftrag:GoTop()
Code: Alles auswählen
::nSleep := 300
DO WHILE ::lRunning
BEGIN SEQUENCE
::oADAuftrag:GoTop()
::AlarmierungSuchen()
RECOVER
END SEQUENCE
Sleep(::nSleep)
ENDDO
Code: Alles auswählen
IF ::oADAuftrag:RecCount() > 0 .AND. ::oADAuftrag2:Seek(::oADAuftrag:aufnr:asString)
oDlgAlarm := PortaAlarmWin():New(,::oOwner,,,,,::oADAuftrag,::oADAuftrag2):CREATE()
IF Application:ShowModal(oDlgAlarm)
...
ENDIF
oDlgAlarm:Destroy()
ENDIF
Es ist also ein Menachnismus der neue Aufträge signalisieren soll.
Die SQL abfrage hat nichts hiermit zu tun. Man merkt jedoch das SQL deutlich langsamer ist, umso mehr Disponenten den Thread laufen haben.
Wenn ich diese Programmstelle auskommentiere, gibt es keine Last auf dem ADS und SQL ist auch kein Problem mehr.
Gruß Dominik
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 4 Mal
Re: ADS Last hoch
Das ist übrigens der SQL Befehl
Code: Alles auswählen
SELECT ad_1.renr,ad_1.datum,ad_1.aufa,f_rech.standfahrzeug,f_rech.standkennz,f_rech.stellplatzname,f_rech.leitzahl,ad_1.auftrag,ad_1.adgrund,ad_1.hname,ad_1.adort,ad_1.ftext1,ad_1.sicherg,ad_1.sichergam,ad_1.standortid,ad_1.vorgangnr,ad_1.merker3 FROM ad_1 INNER JOIN f_rech ON ad_1.renr = f_rech.renr WHERE ad_1.merker3 ='s' AND f_rech.standgeld=true ORDER BY ad_1.datum
Gruß Dominik
- Marcus Herz
- 1000 working lines a day
- Beiträge: 861
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: ADS Last hoch
Seh ich das richtig: ::dbAuftrag ist das Ergebnis des SQL Befehls?
- und du machst eine SetFilter. Ich kenne nicht so genau die Klasse von Gottfried, aber es sollte auch eine Setaof() oder so ähnlich geben. SetAof kann optimiert auf dem Server ausgeführt werden, Setfilter wird wohl auf dem Client ausgeführt (Es sei denn, die Klasse macht intern ein SetAof() draus).
- Falls das ein SQL ist, warum ist dann die Filterbedinguing nicht Teil des Where ...
- Du kannst dir ja mal AdsClass Demo runterladen, dort ist ein Beipiel mit ADS Notification dabei. Ich mach das bei vielen Kunden, wenn irgendwo ein Ereignis auftritt, kann konfigurriert werden, wer eine Benachrichtigung erhält. Klappt prima und ist stabil
- und du machst eine SetFilter. Ich kenne nicht so genau die Klasse von Gottfried, aber es sollte auch eine Setaof() oder so ähnlich geben. SetAof kann optimiert auf dem Server ausgeführt werden, Setfilter wird wohl auf dem Client ausgeführt (Es sei denn, die Klasse macht intern ein SetAof() draus).
- Falls das ein SQL ist, warum ist dann die Filterbedinguing nicht Teil des Where ...
- Du kannst dir ja mal AdsClass Demo runterladen, dort ist ein Beipiel mit ADS Notification dabei. Ich mach das bei vielen Kunden, wenn irgendwo ein Ereignis auftritt, kann konfigurriert werden, wer eine Benachrichtigung erhält. Klappt prima und ist stabil
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 4 Mal
Re: ADS Last hoch
Hallo Marcus,
Er wird an anderer Stelle im Programm ausgeführt, dauert aber bei der Serverlast die durch den/die Filter entsteht deutlich länger, da meines Erachtens nach nicht genügend Rechenleistung vorhanden ist.
Mit Gottfried meinst du wahrscheinlich Friedhelm
Ich habe den Source von Ihm. Ich schaue mal nach ob es SetAof ist.
Die AdsClass lade ich mir gerne mal runter, danke für die Info.
Apropos ADS: Gibt es in diesem Thema mit SAP eigentlich irgendwas neues ?
nein, das stimmt so nicht. Der SQL Befehl hat mit der Programmstelle die ich gepostet habe nichts zu tun.Marcus Herz hat geschrieben: ↑Mi, 26. Jul 2023 17:24 Seh ich das richtig: ::dbAuftrag ist das Ergebnis des SQL Befehls?
- und du machst eine SetFilter. Ich kenne nicht so genau die Klasse von Gottfried, aber es sollte auch eine Setaof() oder so ähnlich geben. SetAof kann optimiert auf dem Server ausgeführt werden, Setfilter wird wohl auf dem Client ausgeführt (Es sei denn, die Klasse macht intern ein SetAof() draus).
- Falls das ein SQL ist, warum ist dann die Filterbedinguing nicht Teil des Where ...
- Du kannst dir ja mal AdsClass Demo runterladen, dort ist ein Beipiel mit ADS Notification dabei. Ich mach das bei vielen Kunden, wenn irgendwo ein Ereignis auftritt, kann konfigurriert werden, wer eine Benachrichtigung erhält. Klappt prima und ist stabil
Er wird an anderer Stelle im Programm ausgeführt, dauert aber bei der Serverlast die durch den/die Filter entsteht deutlich länger, da meines Erachtens nach nicht genügend Rechenleistung vorhanden ist.
Mit Gottfried meinst du wahrscheinlich Friedhelm
Ich habe den Source von Ihm. Ich schaue mal nach ob es SetAof ist.
Die AdsClass lade ich mir gerne mal runter, danke für die Info.
Apropos ADS: Gibt es in diesem Thema mit SAP eigentlich irgendwas neues ?
Gruß Dominik
- nightcrawler
- 1000 working lines a day
- Beiträge: 653
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
Re: ADS Last hoch
nopeDominik Krebs hat geschrieben: ↑Do, 27. Jul 2023 14:55 Apropos ADS: Gibt es in diesem Thema mit SAP eigentlich irgendwas neues ?
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 4 Mal
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 4 Mal
Re: ADS Last hoch
Also ja, ist bereits SetAOFMarcus Herz hat geschrieben: ↑Mi, 26. Jul 2023 17:24 Seh ich das richtig: ::dbAuftrag ist das Ergebnis des SQL Befehls?
- und du machst eine SetFilter. Ich kenne nicht so genau die Klasse von Gottfried, aber es sollte auch eine Setaof() oder so ähnlich geben. SetAof kann optimiert auf dem Server ausgeführt werden, Setfilter wird wohl auf dem Client ausgeführt (Es sei denn, die Klasse macht intern ein SetAof() draus).
- Falls das ein SQL ist, warum ist dann die Filterbedinguing nicht Teil des Where ...
- Du kannst dir ja mal AdsClass Demo runterladen, dort ist ein Beipiel mit ADS Notification dabei. Ich mach das bei vielen Kunden, wenn irgendwo ein Ereignis auftritt, kann konfigurriert werden, wer eine Benachrichtigung erhält. Klappt prima und ist stabil
Gruß Dominik
- Marcus Herz
- 1000 working lines a day
- Beiträge: 861
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: ADS Last hoch
Hoffentlich hat Friedhelm das nicht gelesen, entschuldige mich dafür, hab auch lange nichts mehr von ihm gehörtMit Gottfried meinst du wahrscheinlich Friedhelm :D :D
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 4 Mal
Re: ADS Last hoch
Ich habe Jahresanfang öfters mal mit Ihm telefoniert. Damals war er wieder mehr in die Firma eingebunden...
Gruß Dominik