AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

mehrere Datenbankzugriffe gleichzeitig

Ein Thema von cult6 · begonnen am 21. Aug 2013 · letzter Beitrag vom 21. Aug 2013
Antwort Antwort
cult6

Registriert seit: 21. Aug 2013
13 Beiträge
 
#1

mehrere Datenbankzugriffe gleichzeitig

  Alt 21. Aug 2013, 09:15
Hallo! Ich habe ein kleines Problem. Ich möchte so eine Art Server Stresstest Tool entwickeln. Ich habe bereits ein Programm entwickelt, welches über Indy an den Server Anfragen schickt, dieser leitet dann direkte Abfragen an die Firebird Datenbank weiter. Die erhaltenen Daten gehen wiederum zurück an das Stresstest Tool. Mein Ziel ist es, mehrere virtuelle Clients im Stresstest tool zu erstellen, welche dann zeitgleich auf das Servertool zugreifen. Wie ist das möglich?? Ich kann zwar in einer Schleife mehrere solche virtuellen Clients anlegen und arbeiten lassen, aber die arbeiten dann wieder nur Schritt für Schritt. Ich möchte wirklich erreichen dass zB 50 Clients zeitgleich an das Servertool Anfragen schicken und die Antworten wieder erhalten. Bin für jede Hilfe dankbar und hoffe ich habe mich verständlich ausgedrückt

PS: Ich arbeite mit Delphi 2009 Professional

Crosspost: http://forum.delphi-treff.de/index.p...475#post435475

Geändert von cult6 (21. Aug 2013 um 09:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: mehrere Datenbankzugriffe gleichzeitig

  Alt 21. Aug 2013, 10:08
Die Antwort auf deine Frage lautet Threads. Jeder "virtuelle Client" wird in einem Thread realisiert und werkelt dann "gleichzeitig" mit den anderen um die Wette.
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
cult6

Registriert seit: 21. Aug 2013
13 Beiträge
 
#3

AW: mehrere Datenbankzugriffe gleichzeitig

  Alt 21. Aug 2013, 10:33
Hy, danke! Hab ich mir schon gedacht, bin auch gerade dabei dies zu versuchen. Habe probehalber mal 2 Threads erstellt und darin jeweils einen Client. Ein Thread alleine funktioniert super, also kann ich mal davon ausgehen dass ich beim Erstellen meiner Klasse und der Thread.Execute Procedur keinen Fehler gemacht habe. Jedoch wenn ich mehrere erstelle und hintereinander gleich losarbeiten lassen möchte, kommt es zu Fehlern.

"Erste Gelegenheit für Exception bei $774F4B32. Exception-Klasse EInOutError mit Meldung 'E/A-Fehler 32'. Prozess Top_Stresstest.exe (3476)"

Ich muss dazu sagen ich arbeite das 1. mal mit Threads, ich verstehe zwar ihren Sinn aber noch nicht wie man sie richtig anwendent bzw. was man alles beachten muss. Muss ich die von Hand Synchronisieren oder so? danke!!!
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: mehrere Datenbankzugriffe gleichzeitig

  Alt 21. Aug 2013, 11:25
ein kleines Tutorial gibts hier:
http://delphi.about.com/od/kbthread/a/thread-gui.htm

http://delphi.about.com/od/kbthread/..._threading.htm
Marco Warm
TUO
TheUnknownOnes.net

Geändert von MarcoWarm (21. Aug 2013 um 11:30 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

AW: mehrere Datenbankzugriffe gleichzeitig

  Alt 21. Aug 2013, 11:34
Wenn der Indy Client HTTP verwendet um mit dem Server zu sprechen, ist Apache JMeter ein praktisches Werkzeug:

http://jmeter.apache.org/

Es kann (über einen JDBC Treiber) aber auch direkt die Datenbank ansprechen und damit den Server unabhängig vom Indy Teil messen.

Die Performance Reports von JMeter sind sehr umfangreich und auch graphisch darstellbar.
Michael Justin
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: mehrere Datenbankzugriffe gleichzeitig

  Alt 21. Aug 2013, 14:28
E/A Fehler 32 sieht nach "File already opened" aus. Sieh zu, das die Threads nicht alle in das gleiche Logfile schreiben Oder bastel eine Klasse, die in das Logfile schreibt, aber von den Threads mit entsprechenden Daten gefüttert wird.
  Mit Zitat antworten Zitat
cult6

Registriert seit: 21. Aug 2013
13 Beiträge
 
#7

AW: mehrere Datenbankzugriffe gleichzeitig

  Alt 21. Aug 2013, 14:29
Danke, das hat mir sehr geholfen, aber nun zum nächsten Problem...

Ich habe zb 3 Threads erstellt und lasse sie hintereinander ablaufen:

thread1 := TThreadClient.Create(false);
thread2 := TThreadClient.Create(false);
thread3 := TThreadClient.Create(false);

das funktioniert auch ohne Probleme, die Threads laufen, ABER...

ich habe auf meiner Form1 eine Variable Counter, welche beim FormCreate mit 0 initialiesiert wird.
Beim TThreadClient.Execute() wird diese Variable jeweils um 1 hochgezählt. Soweit so gut...

Jetzt sollte ja eigentlich thread1 Nr1 beinhalten, thread2 Nr2 usw. aber alle 3 Threads haben Nr3.
Jemand ne Idee wie ich dem entgegenwirken kann?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: mehrere Datenbankzugriffe gleichzeitig

  Alt 21. Aug 2013, 15:47
Die Variable muss doch "im Thread" lokal gespeichert sein. Wenn alle auf die selbe Variable zugreifen, die in Form1 steht, muss die ja bei allen 3 sein.

Du kannst also schon so eine counter variable verwenden und bei jedem neuen Thread hochzählen. Der dann aktuelle Wert muss aber dann auch "im Thread" gespeichert werden.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
741 Beiträge
 
#9

AW: mehrere Datenbankzugriffe gleichzeitig

  Alt 21. Aug 2013, 16:22
ich habe auf meiner Form1 eine Variable Counter, welche beim FormCreate mit 0 initialiesiert wird.
Beim TThreadClient.Execute() wird diese Variable jeweils um 1 hochgezählt. Soweit so gut...
Wenn du es so umgesetzt hast, wie es sich anhört, ist es aber gar nicht gut.
Du darfst aus dem Thread auf die Variable Counter im Form nur über Synchronize oder eine critical section zugreifen.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#10

AW: mehrere Datenbankzugriffe gleichzeitig

  Alt 21. Aug 2013, 16:57
Der Constructor des Threads wird noch im Hauptthread ausgeführt, da darf man auch auf diese Variable zugreifen.
Besser wäre allerdings eine Klassenvariable in der Thread-Klasse geeignet.
Delphi-Quellcode:
type
  TMyThread = class(TThread)
  protected
    class var FLastNum: Integer;
    FMyNum: Integer;
  public
    constructor Create(ASuspended: Boolean); override;
    class property LastNum: Integer read FLastNum;
  end;

constructor TMyThread.Create(ASuspended: Boolean);
begin
  inherited;
  Inc(FLastNum);
  FMyNum := FLastNum;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:11 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