staging.inyokaproject.org

Programme debugen/profilen in ubuntu

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

fu_mm

Anmeldungsdatum:
6. März 2020

Beiträge: Zähle...

Hallo,

ich habe einen Test gemacht bei dem ein Programm in einer Schleife gestartet und beendet wird und bin dabei darauf gestoßen, dass mein OS (ubuntu) ca. 15 Millisekunden braucht um es zu starten, bzw. um dieses "wiederzustarten". Ich konnte die Zeitpunkte der eigentlichen Arbeit des Programms (Pakete per Wireshark) feststellen und kam so also auf die 15 ms.

Der Test sieht so in etwa aus:

1
2
3
4
5
6
7
8
9
#!/bin/bash

for i in {0..1000000} 
do
#  echo ${i}

  mysql -u remoteuser -h 192.168.178.123 -ppassw0rd -s -e"use mydb;insert into table2 (table2col) values (MD5(${i}))" >/dev/null 2>&1
 
done

Der Zeitverbrauch der sql Verbindung ist quasi 4-5ms. Also zwischen TCP Sync und dem TCP Finish. Danach kommen die 15ms bis eine neue Verbindung aufgebaut wird.

Wie kann ich herausfinden, was in den 15 ms im Detail passiert?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

fu_mm schrieb:

Wie kann ich herausfinden, was in den 15 ms im Detail passiert?

Starten mit strace mit Zeitausgaben (Option "-tt").

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Heißt das, Du hast die Zeit für die ganze Schleife gemessen, und dann durch 1.000.001 geteilt?

Und dann nur die Verbindung aufgebaut ohne Insertstatement?

Was interessiert Dich daran - die Arbeit der Datenbank, intern? Wie Du das beschleunigen kannst? Bestimmt ist es möglich sich nur einmal zu verbinden und die 1M inserts als Bulk abzusetzen und sich dann erst wieder zu trennen.

fu_mm

(Themenstarter)

Anmeldungsdatum:
6. März 2020

Beiträge: Zähle...

Danke, ich denke strace ist genau das was ich brauche.

Um die sql statements auszuführen wird pro programmaufruf eine neue tcp verbindung genutzt. Die Zeitpunkte des Aufbaus und Abbaus konnte ich messen und so zu den Werten kommen.

Wenn es um die funktionalität gehen würde, würde man vermutlich eine stored procedure aufrufen können, die datenbankseitig die schleife ausführt. bisher keine ahnung ob das asynchron gehen könnte.

mich interessiert daran das verständniss der shell programmierung und einen mental sichereren umgang mit der shell ☺

Antworten |