Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) mysql, slowqueries (edit)
 
Reply to this topicStart new topicStart Poll
> mysql, laufzeit beschränkung, maximale Ausführungszeit thread
Alain_Aubert
  Geschrieben am: Di 10.07.2007, 16:26
Report PostQuote Post

Ayom Slave
Group Icon

Gruppe: Admin
Beiträge: 4794
Mitglied seit: 25.09.2003


Irgendwie steh ich auf dem Schlauch:

Ich möchte gerne einstellen, dass jeder Prozess der länger als x Sekunden läuft (egal was er macht) gekillt wird.
Ich möchte nicht die slowqueries loggen, ich möchte beschränken.

... danke
Top
PMEmail PosterUsers Website
Top
 
 
Marc Schuler
Host2Day ISP International
#2 Geschrieben am: Di 10.07.2007, 16:54 (+00:27)
Report PostQuote Post

AyomRank 7
**************

Gruppe: Member (aktiv)
Beiträge: 1486
Mitglied seit: 1.11.2005


Könnte event. etwas sein:

http://dev.mysql.com/doc/refman/5.0/en/kill.html (unter Comments)


--------------------
----------------------------------------------------------------------------------------
Premium Webhosting [neu an der Tössfeldstrasse 37 (2. Stock) in Winterthur]
----------------------------------------------------------------------------------------
Top
PMEmail PosterUsers Website
Top
 
Duvi
#3 Geschrieben am: Di 10.07.2007, 16:58 (+00:04)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 498
Mitglied seit: 4.10.2006


einen mysql-einstellungsparameter kenne ich jetzt auch nicht.

aber ich habe noch einen alten bookmark bei mir gefunden:
http://web.bii.a-star.edu.sg/~james/mlfd/s...logger-0.1/bin/

schau dir mal sql.kill_slow_queries an.
die variablenwerte werden in sql.functions gesetzt.

vielleicht hilft dir das ja weiter ...
Top
PMEmail Poster
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#4 Geschrieben am: Di 10.07.2007, 17:05 (+00:06)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2302
Mitglied seit: 4.02.2006


Details zu mySql kenne ich nicht. Aber ich vermute, daß das ähnlich komplex ist wie bei MS-Sqlserver:

1. Verbindungsparameter Connection Timeout: Legt fest, wie lange der Client wartet, bis der Db-Server auf einen Verbindungsversuch antworten muß.

2. Verbindungsparameter Command Timeout: Legt den Gesamtzeitbedarf für die Befehlsfolge fest, die der Client akzeptiert. Danach bricht er ab.

3. Set Lock_Timeout 5000: Legt fest, wie lange der MS-SqlServer auf das Aufheben einer einzelnen Sperre wartet. Bei mehreren Anweisungen in einem Block kann dieser Wert (5 Sekunden) natürlich pro Anweisung auftreten.

Sprich: Es geht nicht direkt innerhalb des Db-Servers, sondern entweder vom Client (der sich dann verschämt zurückzieht rolleyes.gif ) oder innerhalb einer Anweisung, die nur begrenzt Geduld hat. Ist diese Anweisung die einzigste derzeit ausgeführte, dann hat sie freie Fahrt, es gibt keine Blockaden - gibt es 1000 andere parallele Zugriffe, dann muß sie warten und bricht womöglich ab.

Kill hilft ja nur, wenn alle paar Sekunden ein Script alle Prozesse auf Laufzeitüberschreitungen überprüft.

Die Verbindungsparameter müßten dagegen in der Clientbibliothek definiert sein, also MyODBC oder ähnliches.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung.
Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - die Datenbank funktioniert.
Top
PMEmail PosterUsers Website
Top
 
Alain_Aubert
#5 Geschrieben am: Di 10.07.2007, 17:35 (+00:30)
Report PostQuote Post

Ayom Slave
Group Icon

Gruppe: Admin
Beiträge: 4794
Mitglied seit: 25.09.2003


Danke für eure Antworten, leider noch nicht gelesen, werde das später noch tun, habe follow Up question:
Hat Mysql logging und recovery wie oracle oä? D.h. wenn 10 procs auf einen lockenden warten und der ganze DBMS abgestellt wird, kann mysql dann wie oracle aus den scheduler die übrigen durchballern wenn ich ihn wieder anstelle oder verschwinden die im Nirvana?

QUOTE
Kill hilft ja nur, wenn alle paar Sekunden ein Script alle Prozesse auf Laufzeitüberschreitungen überprüft.

Ist mir ins Auge gesprungen, steht (leider) nicht zur Debatte.

Komme heute wieder
Top
PMEmail PosterUsers Website
Top
 
Alain_Aubert
#6 Geschrieben am: Di 10.07.2007, 23:35 (+05:59)
Report PostQuote Post

Ayom Slave
Group Icon

Gruppe: Admin
Beiträge: 4794
Mitglied seit: 25.09.2003


OK, danke für euer Antworten.

Mysql hat interactive_timeout. Nutz mir nichts. wait_timeout nutzt mir auch nichts. Keine TCP Verbindung.
Zugebenermassen war meine letzte grössere mysql manual session Version 3.x
http://dev.mysql.com/doc/refman/5.1/de/ser...-variables.html
Finde nicht wirklich eine Lösung.

Mein Probem ist wenn ich einen grausamen Fehler mache (beispielsweise kann man mal eine Klammer um ein paar ors vergessen). Diese Query lockt mir dann Tabellen und sendet ein paar Tausend Sekunden lang das Kreuprodukt von einer Tabelle mit sich selber... wink.gif

Weil shared hosting, blockieren die startenden und wartenden mysqls das proc Kontingent. D.h. ich darf dann in der Shell nicht mal mehr dir machen, und fork gibt mri nicht mal mehr n Löffel... D.h. ich kann nicht mir kill arbeiten wenns dumm läuft.

Konkret such ich eine Einstellung die einem Prozess killt, wenn der seit mehr als 100 Sekunden sending data macht.
Aber ich werd wohl mit mehr Disziplin vorlieb nehmen müssen.

command timeout wär nicht schlecht.
Top
PMEmail PosterUsers Website
Top
 
Marc Schuler
Host2Day ISP International
#7 Geschrieben am: Mi 11.07.2007, 07:22 (+07:47)
Report PostQuote Post

AyomRank 7
**************

Gruppe: Member (aktiv)
Beiträge: 1486
Mitglied seit: 1.11.2005


Funktioniert das den so nicht?

CODE

$result = mysql_query("SHOW FULL PROCESSLIST");
while ($row=mysql_fetch_array($result)) {
$process_id=$row["Id"];
if ($row["Time"] > 200 ) {
$sql="KILL $process_id";
mysql_query($sql);
}
}


--------------------
----------------------------------------------------------------------------------------
Premium Webhosting [neu an der Tössfeldstrasse 37 (2. Stock) in Winterthur]
----------------------------------------------------------------------------------------
Top
PMEmail PosterUsers Website
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#8 Geschrieben am: Mi 11.07.2007, 08:30 (+01:07)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2302
Mitglied seit: 4.02.2006


Marc: Das funktioniert schon.

Aber das setzt voraus, daß man - nachdem der kritische Befehl bereits läuft - noch eine neue Verbindung zum Datenbankserver aufmachen kann. Das klappt bei den oben genannten Bedingungen (shared Hosting und - aufgrund der Blockade - eskalierend wartende Anfragen) nicht mehr.

Oder daß man sich davor - präventiv - immer eine zusätzliche interaktive Verbindung aufgemacht hat und die PID des kritischen Prozesses kennt.

Und Command_Timeout nutzt womöglich gar nichts. Denn das ist in der Clientbibliothek implementiert - und ich wüßte nicht auf die Schnelle, ob diese noch ein Kill absetzt. Falls nicht, würde die Abfrage auch weiterlaufen - nur wäre der Client eben nicht mehr blockiert.

Alain: Welchen Client verwendest Du denn? In Konsolen hilft ja manchmal Strg + D, Strg + C oder eine entsprechende Befehlszeilenoption.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung.
Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - die Datenbank funktioniert.
Top
PMEmail PosterUsers Website
Top
 
Alain_Aubert
#9 Geschrieben am: Mi 11.07.2007, 14:54 (+06:24)
Report PostQuote Post

Ayom Slave
Group Icon

Gruppe: Admin
Beiträge: 4794
Mitglied seit: 25.09.2003


Jürgen, Danke für Dein wertvolles Feedack.

PHP. Die Interactive Flag nutzt mir eben nichts.

QUOTE
Und Command_Timeout nutzt womöglich gar nichts. Denn das ist in der Clientbibliothek implementiert - und ich wüßte nicht auf die Schnelle, ob diese noch ein Kill absetzt.

Genau das war meine Frage. Und ich hab nach meiner Recherche schliessen müssen, dass ich a) mal wieder das Manual knuspern sollte und b) die von mir gewünschte Funktion so einfach nicht funktioniert.

Wenns wirklich ganz dumm läuft krieg ich in der Konsole des Servers nur noch "bash: fork: Resource temporarily unavailable" Krieg also nicht mal mehr n Löffel...
Das führt zur nächsten Frage, wie konfigurier ich Linux, dass ich immer noch einen prorisierter abforken darf. Dass muss doch gehen, die Frage für mich ist ob es mit dem gleichen User (linux user) machbar ist.

Top
PMEmail PosterUsers Website
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#10 Geschrieben am: Mi 11.07.2007, 17:11 (+02:17)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2302
Mitglied seit: 4.02.2006


QUOTE (jAuer @ Mi 11.07.2007, 08:30)
Und Command_Timeout nutzt womöglich gar nichts. Denn das ist in der Clientbibliothek implementiert - und ich wüßte nicht auf die Schnelle, ob diese noch ein Kill absetzt. Falls nicht, würde die Abfrage auch weiterlaufen - nur wäre der Client eben nicht mehr blockiert.

So, jetzt hat mich das doch mal interessiert. Und siehe da, auf dem MS-SqlServer klappt das.

Script in der Datei kill-me.sql

QUOTE
Select @@Spid
go

WaitFor Delay '00:00:50'
go


Ergebnis vom Aufruf:

QUOTE
C:\sd\temp>sqlcmd -S .\SQL2005 -E -i kill-me.sql -t 5

------
    64

(1 Zeilen betroffen)
Das Timeout ist abgelaufen.


-i: Eingabe aus der Datei kill-me.sql lesen
-t 5: Abfragetimeout von 5 Sekunden, also kürzer als die 50 Sekunden, die das Script warten soll.

Ergebnis: Kontrolliert man über eine zweite Verbindung die aktuell laufenden Prozesse, dann ist die SPID, die oben rauskommt, für fünf Sekunden sichtbar und verschwindet dann wieder.

Sprich: Auf dem MS-SqlServer könnte man bsp. ein solches Script mit -t 10 starten, dann wäre spätestens nach zehn Sekunden Schluß.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung.
Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - die Datenbank funktioniert.
Top
PMEmail PosterUsers Website
Top
 
Sascha Ahlers
#11 Geschrieben am: Mi 11.07.2007, 18:17 (+01:05)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1699
Mitglied seit: 27.12.2004


Such mal nach lock_wait_timeout, vielleicht findet sich dort eine entsprechende Option, so auf die schnelle weiß ich sonst keine Lösung.


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/19358

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Suche Freelancer: Ajax, XML, PHP, MySQL omc 151 2 Mo 6.10.2008, 20:14
Lösung für: Content Slider-Java Script-PHP-MySql Antoine Johannes 127 2 Fr 26.09.2008, 12:54
PHP + MySQL 2 Fragen an euch Coach 152 1 Do 18.09.2008, 10:52
PHP und MySQL Probleme Swisstiger 501 4 So 14.09.2008, 22:23
PHP/MySQL Entwickler für Projekt gesucht BigRed 129 0 Fr 5.09.2008, 12:05
[MYSQL] ø bei Suche nach o finden MarkusH 122 1 Mi 20.08.2008, 09:10
Suche PHP/MYSQL Programmierer Paidunion 179 0 So 17.08.2008, 12:56
Suche kleinere Jobs (HTML, PHP, MySQL...) Oliver Pester 271 2 Do 14.08.2008, 14:08
Diskussion: Login-Skript mit Sessions, PHP und ... Ayom-Team 303 2 Mo 11.08.2008, 03:33
MySQL Abfrage von einer Tabelle webdoktor 435 19 Sa 9.08.2008, 17:45




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen


[Interessiert an einer Anzeige?]