Laufzeit-Beschränkung bei MySQL

pseudo
Posts: 54
Joined: 2003-08-08 10:08

Laufzeit-Beschränkung bei MySQL

Post by pseudo »

Hi,

ich lese nun schon etwas länger die Foren-Einträge durch, aber so richtig bin ich nicht durchgestiegen und google fördert mir bei "mysql Laufzeit-Beschränkung" auch nur zu tage, wie man mit scripten MySQL-Tabellen backuppen kann ohne an php-Laufzeit-Beschränkungen vom Hoster zu geraten...

Folgendes Szenario:
Ich hatte letztens eine Müll-Query in meiner MySQL-DB und gesehen, dass MySQL keine weiteren Querys mehr abgearbeitet hatte bis eben diese eine Query durch war. Zudem lief diese Query dann auch noch ewig lange, so dass alle anderen, die auf MySQL zugreifen, warten mussten.

Frage 1.:
Welche Parameter muss ich bei MySQL bearbeiten, damit MySQL parallel Querys bearbeitet und nicht nacheinander?

2. Frage: Gibt es bei MySQL Optionen zur Laufzeit-Beschränkung wie ich sie von z.B. php her kenne, dass ich z.B. sagen kann: jede Query darf maximal 5 Sekunden 100% CPU-Nutzung beanspruchen? Oder muss man das mittels Speicher-Zuweisung und max_therads-Optionen machen? Weil das - meine ich mir ableiten zu können - habe ich aus einigen Postings hier herausgelesen...

Danke schon einmal für Antworten zu dem Thema :-)

Gruß, Pseudo
Top

oxygen
RSAC
Posts: 2179
Joined: 2002-12-15 00:10
Location: Bergheim

Re: Laufzeit-Beschränkung bei MySQL

Post by oxygen »

Der Query hat die Tabelle vermutlich gelocked. Durch Parameter kannst du dieses Verhalten nicht beeinflussen. Da musst du deine Anwendung schon umschreiben.
Top

pseudo
Posts: 54
Joined: 2003-08-08 10:08

Re: Laufzeit-Beschränkung bei MySQL

Post by pseudo »

Ja, bestimmt sogar. Das ist so auch OK.
Nur wenn Kunde 1 mit Datenbank1 da rummacht und Kunde 2 mit Datenbank2 dann warten muß, obwohl er mit Kunde 1 so ja eigentlich nichts zu tun hat, sollte ich das ändern, finde ich. Nur weiß ich halt nicht wie. Große Hoster, bei denen 10.000 Kunden (und mehr?) auf einen MySQL-DB-Server zugreifen, müssen das ja auch irgendwie geregelt bekommen, dass Kunde 1 nicht Kunde 2 durch seine Querys blockiert, oder denke ich da falsch?

[Update]
Ich spreche nicht von Queries in der gleichen Tabelle/Datenbank, sondern 2 Queries auf dem gleichen MySQL-Server. Sorry, falls ich das schlecht formuliert habe.
Top

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: Laufzeit-Beschränkung bei MySQL

Post by isotopp »

pseudo wrote:Ich hatte letztens eine Müll-Query in meiner MySQL-DB und gesehen, dass MySQL keine weiteren Querys mehr abgearbeitet hatte bis eben diese eine Query durch war. Zudem lief diese Query dann auch noch ewig lange, so dass alle anderen, die auf MySQL zugreifen, warten mussten.
MySQL arbeitet Queries parallel ab: Jede Verbindung zu einem MySQL-Server erzeugt im Server einen Thread, der die Connection bedient. Jede Connection arbeitet unabhängig von den anderen Connections, wenn möglich. Dabei kann Deine Hardware so viele Threads echt parallel ausführen wie Deine CPU Cores hat.

Zwei Queries sind unabhängig und beeinflussen einander innerhalb des Datenbankservers nicht, wenn die Menge der Tabellen, die von beiden Queries angesprochen wird, disjunkt ist. Wenn auf der Connection 1 also der User a eingeloggt ist, der Zugriffsrechte auf a.* hat und auf Connection 2 der User b mit Rechten auf b.*, dann können sich diese beiden Queries nicht gegenseitig innerhalb des Datenbankservers beeinflussen.

Sie konkurrieren auf Betriebssystemebene natürlich immer noch um Seeks, I/O und Speicher.

Wenn zwei Queries Überschneidungen bei den Tabellen haben, die angesprochen werden, dann kann es innerhalb des Datenbankservers zu Beeinflussungen kommen. Wie das genau gehandhabt wird, hängt zum einen von den Tabellentypen ab, die für die Tabellen in der Schnittmenge verwendet werden und von der Art der Operationen (lesend, schreibend) auf diesen Tabellen.
Welche Parameter muss ich bei MySQL bearbeiten, damit MySQL parallel Querys bearbeitet und nicht nacheinander?
Das ist automatisch der Fall.
2. Frage: Gibt es bei MySQL Optionen zur Laufzeit-Beschränkung wie ich sie von z.B. php her kenne, dass ich z.B. sagen kann: jede Query darf maximal 5 Sekunden 100% CPU-Nutzung beanspruchen?
Nein. Worand willst Du das auch fest machen. Datenbank-Queries sind um einiges komplexer als PHP-Scripte. Sie verbrauchen idR nicht viel CPU-Zeit.
Top