AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ADO/MSSQL mit Multi Prozessor Board

ADO/MSSQL mit Multi Prozessor Board

Ein Thema von bernhard_LA · begonnen am 15. Apr 2016 · letzter Beitrag vom 20. Apr 2016
Antwort Antwort
Seite 1 von 2  1 2   
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.120 Beiträge
 
Delphi 11 Alexandria
 
#1

ADO/MSSQL mit Multi Prozessor Board

  Alt 15. Apr 2016, 22:49
Datenbank: MSSQL • Version: 12 • Zugriff über: ADO
wir haben eine Clients Server Anwendung mit folgenden Merkmalen

a) ca. 1 Mio .... 50 Mio Datensätze
b) komplexere Mathematische Operationen im Client pro Datensatz
c) Zurückschreiben der geänderten Daten des Clients

wir haben Multi-Threading ADO Zugriff auf die Datenbank und separate Rechnen-Threads im Client implementiert.
Die Erhöhung des Thread Counts von 1 ...6 bringt einen deutlichen Performance-Gewinn, danach bleibt die Ausführungszeit konstant unabhängig von der Anzahl der Threads.

Vermutlich liegt der Flaschenhals am Datendurchsatz der Festplatte. Lohnt sich hier der Aufbau eines RAID 0 Systems , anhand obiger Beschreibung ?
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.364 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: ADO/MSSQL mit Multi Prozessor Board

  Alt 15. Apr 2016, 22:58

Vermutlich liegt der Flaschenhals am Datendurchsatz der Festplatte. Lohnt sich hier der Aufbau eines RAID 0 Systems , anhand obiger Beschreibung ?
Klar - zumindest für euren Lieferanten wird es sich lohnen....

Vielleicht liegt der Flaschenhals auch am billigen Cat4 Kabel das der Admin in seiner verstaubten Kiste gefunden hat und das zufällig die richtige Länge hat Daher: stellt konkret fest WAS der Flaschenhals ist und behebt dann das Problem - sprich messt während eines Laufs die CPU, Ram, Netzwerk, HDD-Auslastung von Client und Server und fangt an zu analysieren.
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.120 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: ADO/MSSQL mit Multi Prozessor Board

  Alt 15. Apr 2016, 23:04
CPU Nutzung < 10 %
RAM Nutzung < 10 %
HDD ~ 40 % der Zeit mit 100 % lt. performance Analysis tool
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: ADO/MSSQL mit Multi Prozessor Board

  Alt 16. Apr 2016, 06:57
Erst Zustimmung an Lemmy.
Bei den Angaben die Du insgesamt gemacht hast, finde ich nicht, wieviel Benutzer im Spiel sind.

Ansonsten:
Datenbanken warten (fast) immer auf die Festplatten. Deine Zahlen sind also nicht ungewöhnlich.
Was mich irritiert, alles was Last machen könnte (Berechnung) findet auf dem Client statt. Was quält also
die Festplatten so?

50 Mio ist nicht wenig, aber mit einem RAID 0 verdoppelst Du "nur" die Geschwindigkeit.
Also IO wäre dann nur noch 20% der Zeit auf 100% Last, richtig?

Nichts gegen RAID 0, man könnte das sicher noch mit SSD toppen.
In der Optimierung der Zugriffe softwareseitig liegt meist aber der Schlüssel für eine viel größere Optimierung. Hier spräche man dann nicht von Verdoppelung, sondern von 2 oder 3 stelligen Faktoren.
Diese Zahl ist konkret hier natürlich vollkommen aus der Luft gegriffen, eher ein Erfahrungswert. Manchmal reicht ein Index mehr, manchmal auch einer weniger,.., es ist jedesmal anders.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: ADO/MSSQL mit Multi Prozessor Board

  Alt 16. Apr 2016, 09:56
Eine Optimierung des Clients kann man mit einer Pipeline hinbekommen die grob wie folgt aussieht:
  1. Daten lesen (1 Thread)
  2. Daten berechnen (CPU-Count Threads)
  3. Daten schreiben (1 Thread)
Dadurch fallen die Wartezeiten beim Lesen/Schreiben nicht mehr ins Gewicht.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: ADO/MSSQL mit Multi Prozessor Board

  Alt 16. Apr 2016, 10:17
wir haben Multi-Threading ADO Zugriff auf die Datenbank und separate Rechnen-Threads im Client implementiert.
Die Erhöhung des Thread Counts von 1 ...6 bringt einen deutlichen Performance-Gewinn, danach bleibt die Ausführungszeit konstant unabhängig von der Anzahl der Threads.
Wenn Du sagen wir 3 Threads für das Holen der Daten und 7 Threads für das Berechnen hast, wundert mich das nicht.
Die Rechenthreads drehen Däumchen während sie auf die Daten warten.

Vermutlich liegt der Flaschenhals am Datendurchsatz der Festplatte. Lohnt sich hier der Aufbau eines RAID 0 Systems , anhand obiger Beschreibung ?
Welche Festplatte? Server oder Client?
Bei der geringen Speicherauslastung (des Servers?) solltest Du unbedingt einmal die Konfiguration der DB prüfen.

Ansonsten kann ich mich nur den Ausführungen meiner Vorschreiber anschließen. Ohne eine vollständige und detailierte Analyse ist das nur ein Stochern im Nebel.
(eine WLAN-Connection mit 47k ist nicht eben eine Autobahn)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.120 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: ADO/MSSQL mit Multi Prozessor Board

  Alt 17. Apr 2016, 19:56
ich habe als Ergänzung den Algo - als PAP dargestellt, es macht hoffentlich unseren Ansatz klar.

Primar habe ich an Info's Tips zum Thema
  1. a) Hardware Upgrade
  2. b) Sofware Upgrade am MSSQL Server, Konfiguration MSSQL Server
interesse, weil diese Aktionen schnell und mit wenig finanziellem Aufwand verbunden sind.

die Option
  • c) neue SW Konzept für unseren Algo

bedeutet eine längere Entwicklungszeit ggf. ohne Nutzen wenn ich schon heute nicht den Flaschenhals verstanden habe. Hier ist die Frage nach einer effektiven Analysemethode.
Miniaturansicht angehängter Grafiken
ado_db_thread.jpg  
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: ADO/MSSQL mit Multi Prozessor Board

  Alt 17. Apr 2016, 22:28
Also sicherheitshalbe nochmal:
Unter idealen Bedingungen skaliert das System sauber bis 6 Threads.
Der Client hat nichts anderes zu tun?
Der Server hat nichts anderes zu tun?
Die Sessions sind pro Client nicht limitiert?
Das geschieht bei einem Client? Oder auch bei mehreren?
Das ist unabhängig von der Leistungsfähigkeit des Clients?
Es gibt keine "wahrnehmbaren" Störungen im Serverbetrieb (außer der IO Last selbst)?
Gibt es anhaltende Locks auf dem Server?
Wieviel Datensätze werden pro Thread bearbeitet? = 1
Verändert die Berechnung die Auswahlkriterien der Datensätze für den Client bzw. für weitere Threads?
Gibt es administrationsseitig jemand, der Ausführungspläne der Lese und Schreib Anweisungen geprüft hat?

Mich irritiert die Zahl 6, sofern sie immer konstant bleibt, wie hier dargestellt.
Hat die Zahl 6 etwas mit den komplexen Berechnungen zu tun?
Gruß, Jo

Geändert von jobo (18. Apr 2016 um 14:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

AW: ADO/MSSQL mit Multi Prozessor Board

  Alt 17. Apr 2016, 22:48
Mich irritiert die Zahl 6, sofern sie immer konstant bleibt, wie hier dargestellt.
Hat die Zahl 6 etwas mit den komplexen Berechnungen zu tun?
Sie könnte mit der Anzahl an CPU-Kernen zusammenhängen. Bspw. bei einem 5820k würde ich über 6 Thread keine signifiaknten Zuwächse mehr erwarten.

Wenn es wirklich an der HDD liegt (aber wer hat heutzutage noch io intensive Datenbanken auf magnetischen Speichermedien??) sollte das Problem mit einer Samsung 950 Pro für die Datenbank erledigt sein, um hier mal eine konkrete Empfehlung zu äußern.
  Mit Zitat antworten Zitat
Benutzerbild von frankyboy1974
frankyboy1974

Registriert seit: 7. Apr 2015
Ort: SH
169 Beiträge
 
Delphi XE7 Professional
 
#10

AW: ADO/MSSQL mit Multi Prozessor Board

  Alt 18. Apr 2016, 07:19
Hallo,

wenn ich lese, dass laut PAP die Berechnung circa eine Sekunde dauert, würde ich vermuten, dass der Flaschenhals dort liegt und nicht im I/O Bereich. Mein erster Gedankengang war, zu empfehlen, die Berechnung direkt auf der Serverseite auszuführen (gespeicherte Prozedur) und somit zumindestens die Netzwerkkommunikation einzusparen, aber das würde die Berechnungszeit natürlich nicht grundsätzlich verändern. Wenn man den Berechnungsalgo nicht wirklich mehr optimieren kann, würde natürlich schnellere Hardware, ggf. mehrere Clients die parallel die Arbeit verrichten, helfen den Zeitaufwand zu minimieren.
Bei einer Berechnungszeit von 1 Sekunde, würde ich mir den Berechnungsalgo allerdings auch noch einmal anschauen, ob da nicht doch ein wenig Optimierungspotenzial drinne steckt.

mfg
Java ist auch eine Insel.
Ist Delphi von Oracle?
In meiner Buchstabensuppen fehlt das C++!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz