Januar 18, 2022, 12:10:22

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Performance Problem - Mehruser (Frontend/Backend)

Begonnen von leparain, Januar 13, 2022, 12:13:33

⏪ vorheriges - nächstes ⏩

leparain

Hallo zusammen,

wir haben ein Problem, welches erst durch das viele HomeOffice sichtbar geworden ist.

Wir haben eine Datenbank, welche auf einem Netzwerkserver liegt - Darauf wird über ein Frontend (liegt bei jedem User auf dem eigenen Rechner) zugegriffen.

Solange nur ein einziger User auf die Datenbank zugreift, funktioniert auch alles wunderbar. Doch sobald ein User dazu kommt und eine einzige Änderung in einem Datensatz vornimmt, wird die Datenbank extrem langsam und jeder Filter dauert etwa 2-3min.

Die Datenbankstruktur kann leider auf die schnelle nicht geändert werden (Leider ist diese total falsch aufgebaut): Eine große Tabelle mit sehr vielen Spalten.


Hat irgendjemand von euch einen Vorschlag, wie man die Datenbank etwas beschleunigen kann? Leider benötigt man immer vorab alle Daten und Filtert sich diese zurecht.... Es ist quasi eine Auswahlabfrage der gesamten Tabelle.

Habe schon so viel gelesen und getestet, doch leider hat nichts geholfen.
Permanente Verbindung usw. wurde ausprobiert, hat nichts geholfen.

Ich lese oft von OBDC Datenbanken, aber dafür benötigt man wohl extra Services, welche man erst ordern müsste.

Würde mich über Tipps sehr freuen.


Viele Grüße,
leparain

DF6GL

Hallo,

da wird wohl die magere DSL-(Internet-)Verbindung ihre Wikung zeigen.

Da hilft nur, auf dem Netzwerk-Server für jeden User einen (Terminal-Server-) Account einzurichten und dort in seinem Bereich Access (Office oder Runtime) und das FE zu installieren.  Der Zugriff von den lokalen Home-Office-PCs erfolgt dann über DesktopRemoteVerbindung (RDP) .

Statt TS könnten auch VMs oder Hardware-Pcs in Frage kommen.


Alternativen sind aktive SQL-Server (MSSQL, MySQL, etc.) und angepasstes DB-Design.

leparain

Vielen Dank für die Antwort.

Ja, es liegt an der DSL Leitung. Die meisten von uns nutzen eine 50k DSL Leitung.

Und bei einem MySQL Server würde er nicht jedes mal alle Daten neu laden, sondern nur diejenigen aktualisieren, welche verändert worden sind oder?

Gibt es auch eine Step by Step Anleitung für eine MySQL Datenbank (Hier im Forum?)? Welche Lizenzen benötigt werden usw?
Ich hab dazu schon so viel gelesen, aber es hört sich so an, als ob da ziemlich viel programmierarbeit dahinter steckt.

MzKlMu

Hallo,
sind die Felder in/mit denen gefiltert wird indiziert ?
Gruß
Klaus

markus888

Zitat von: leparain am Januar 13, 2022, 16:11:25Und bei einem MySQL Server würde er nicht jedes mal alle Daten neu laden, sondern nur diejenigen aktualisieren, welche verändert worden sind oder?

Eine interessante Frage.
Es gibt ja einen dynamic Cursor.

DAO lesen ich - nur bei ODBCDirect - das gibts aber nicht mehr. Ja ja der Fortschritt bei DAO.
Hat das irgend wer schon mal früher verwendet - oder noch im Einsatz.

Ansonsten grundsätzlich - Änderungen anderer User zeigt Access standardmäßig auch an.
Da die Daten bei einem Key-Cursor beim Scrollen automatisch ständig neu ausgelesen werden.
Nur neue Datensätze oder Löschungen werden nicht angezeigt.
Aber bei jedem Filtern müssen alle Daten neu ausgelesen werden.
Da ändert auch ein SQL-Server nichts - das Filtern geht aber trotzdem schneller - so lange das der Server macht.

Einzige Lösung ein Client Cursor - wo für das Filtern keine Datenbank erforderlich ist.
Aber da braucht man dann eine eigene Strategie um Änderungen anderer User anzuzeigen.
Da wird's es recht schwierig.
10 Jahre Access

leparain

Zitat von: MzKlMu am Januar 13, 2022, 17:08:29Hallo,
sind die Felder in/mit denen gefiltert wird indiziert ?


Ja, die Spalten an denen meistens gefiltert wird, sind indiziert.
Dennoch dauert es dann z.B. ewig wenn man auf "Filter entfernen" drückt, da er dann komplett neu lädt (sind etwa 150MB die er dann jedesmal neu laden muss).
Und irgendwie ist die Geschwindigkeit auf 1,5mb/s begrenzt, obwohl die Leitung mehr könnte (Liegt das ggf. am VPN Client?).

Zitat von: markus888 am Januar 13, 2022, 17:52:20
Zitat von: leparain am Januar 13, 2022, 16:11:25Und bei einem MySQL Server würde er nicht jedes mal alle Daten neu laden, sondern nur diejenigen aktualisieren, welche verändert worden sind oder?

Eine interessante Frage.
Es gibt ja einen dynamic Cursor.

DAO lesen ich - nur bei ODBCDirect - das gibts aber nicht mehr. Ja ja der Fortschritt bei DAO.
Hat das irgend wer schon mal früher verwendet - oder noch im Einsatz.

Ansonsten grundsätzlich - Änderungen anderer User zeigt Access standardmäßig auch an.
Da die Daten bei einem Key-Cursor beim Scrollen automatisch ständig neu ausgelesen werden.
Nur neue Datensätze oder Löschungen werden nicht angezeigt.
Aber bei jedem Filtern müssen alle Daten neu ausgelesen werden.
Da ändert auch ein SQL-Server nichts - das Filtern geht aber trotzdem schneller - so lange das der Server macht.

Einzige Lösung ein Client Cursor - wo für das Filtern keine Datenbank erforderlich ist.
Aber da braucht man dann eine eigene Strategie um Änderungen anderer User anzuzeigen.
Da wird's es recht schwierig.

Wenn es bei einem SQL Server so wäre, dass er die ganzen Daten einmalig laden würde und daraufhin das Filtern usw sehr schnell wäre und daraufhin nicht jedesmal neu laden müsste, wäre es optimal - Gibt es da Erfahrungen?

Vielen Dank für die Antworten !

markus888

Zitat von: leparain am Januar 14, 2022, 18:30:54Wenn es bei einem SQL Server so wäre, dass er die ganzen Daten einmalig laden würde und daraufhin das Filtern usw sehr schnell wäre und daraufhin nicht jedesmal neu laden müsste, wäre es optimal - Gibt es da Erfahrungen?


Vom Prinzip her gibt es zwei Möglichkeiten.
Du hast einen Server.
Die Abfrage muss so übermittelt werden, dass die Abfrage vom Server ausgeführt wird.
Dann kommen nur noch die gefilterten Daten übers Netz - müssen aber trotzdem jedes mal neu geladen werden.

Bei der zweiten Möglichkeit werden einfach alle Daten über einen Client Cursor geladen - also nicht nur die Schlüssel, sondern tatsächlich alles.
Da ist es egal ob Server oder Access Datenbank.
Sobald alle Daten einmal abgerufen wurden, werden sie nur noch vom Frontend gefiltert und sortiert.
Auch neue Datensätze werden sortiert eingefügt ohne Daten neu zu laden.
Da nimmt man einfach ein ADO Recordset.
Du erfährst aber nicht, wenn irgend wer zwischenzeitlich die Daten ändert.
Bei modernen Softwareumgebungen, kann der Server das dem Client direkt mitteilen und ausschließlich die Änderungen werden geladen.
Da ist Access im Nachteil und man muss sich überlegen wie man damit umgeht, damit Access nur die Änderungen laden muss.
Filtern dauert aber nur noch Millisekunden, auch ohne Index.
10 Jahre Access