MySQL blockiert

earlgrey

New Member
Hallo,

hab da nochmal ein Problem, wo ich wahrscheinlich den Baum vor lauter Wald nicht sehe.

MySQL Server: 4.1.22
Linux Distribution: Debian woody minimal, mit PD-ADMIN Serverumgebung SE-0.083

Das Problem:

Ein Forum mit PHPKIT und einer widerspenstigen Datenbank. Ab und zu, unregelmässig, meistens aber Abends um diese Uhrzeit, hakt die Datenbank.

Ein Auszug der Process List:
Code:
+--------+----------+-----------+------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------
| Id     | User     | Host      | db               | Command | Time | State        | Info                                                                                          
+--------+----------+-----------+------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------
| 900501 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 287  | Sending data | SELECT forumthread_catid, forumthread_id FROM phpkit_forumthread WHERE (forumthread_id='32679'
| 900611 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 213  | Sending data | SELECT forumthread_catid, forumthread_id FROM phpkit_forumthread WHERE (forumthread_id='32679'
| 900621 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 160  | Locked       | SELECT * FROM phpkit_forumthread WHERE forumthread_id='32678'                                 
| 900622 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 160  | Locked       | SELECT p.forumpost_id,p.forumpost_autor,p.forumpost_autorid,p.forumpost_time, t.forumthread_id
| 900625 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 160  | Locked       | SELECT * FROM phpkit_forumthread WHERE forumthread_id='32659'                                 
...
| 900838 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 2    | Locked       | SELECT * FROM phpkit_forumthread WHERE forumthread_id='32680' OR forumthread_id='32393' OR for
| 900839 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 1    | Locked       | SELECT * FROM phpkit_forumthread WHERE forumthread_id='32680' OR forumthread_id='32393' OR for
| 900840 | root     | localhost |                  | Query   | 0    |              | show processlist                                                                              
+--------+----------+-----------+------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------

Neustart der Datenbank.

Kurze Zeit später wieder:
Code:
+------+----------+-----------+------------------+---------+------+--------------+-------------------------------------------------------------------------------------------------
| Id   | User     | Host      | db               | Command | Time | State        | Info                                                                                            
+------+----------+-----------+------------------+---------+------+--------------+-------------------------------------------------------------------------------------------------
| 2528 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 109  | Sending data | SELECT forumthread_catid, forumthread_id FROM phpkit_forumthread WHERE (forumthread_id='32235' O
| 2542 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 106  | Locked       | UPDATE phpkit_forumthread SET forumthread_viewcount=forumthread_viewcount+1,forumthread_replycou
| 2543 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 105  | Locked       | SELECT phpkit_forumpost.forumpost_threadid, phpkit_forumpost.forumpost_id FROM phpkit_forumpost 
...
| 2685 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 3    | Locked       | SELECT COUNT(*) FROM phpkit_forumthread WHERE forumthread_catid='4'                             
| 2686 | hdbq     | localhost | usrdb_hdbq_1     | Query   | 2    | Locked       | SELECT phpkit_forumpost.forumpost_threadid, phpkit_forumpost.forumpost_id FROM phpkit_forumpost 
| 2687 | hdbq     | localhost | usrdb_hdbq_1     | Sleep   | 2    |              |                                                                                                 
| 2688 | hdbq     | localhost | usrdb_hdbq_1     | Sleep   | 1    |              |                                                                                                 
| 2689 | root     | localhost |                  | Query   | 0    |              | show processlist                                                                                
+------+----------+-----------+------------------+---------+------+--------------+-------------------------------------------------------------------------------------------------

Beim ersten mal warteten also 218 User auf eine Möglichkeit auf die Datenbank zuzugreifen, im zweiten Fall 146 User.

Warum hakt aber die erste Abfrage ? Es ist ein einfacher Beitrag, der dort abgefragt wurde. Was genau macht die Datenbank im Status "Sending data" ?

Wie kann ich herausfinden, was dort genau die Datenbank blockiert.

TOP zeigt für den mysqld ca. 99% Prozessorlast.

Log Files hab ich mir schonmal erstellen lassen, aber ehrlich: Das sind zuviel Daten um diese gezielt auszuwerten. Ich habe es jedenfalls nicht geschafft.

Das Forum hat um diese Uhrzeit weit über 200 User aktiv. Aktiv heißt hier wirklich: schreiben und lesen.

Hat jemand eine Idee, wo ich noch suchen kann um den Übeltäter wirklich zu finden und dann Gegenmaßnahmen zu ergreifen ?

Gruß
Chris
 
TOP zeigt für den mysqld ca. 99% Prozessorlast.
ähnliches Problem wurde hier im Forum breits behandelt:


Lass mal Tuning-Primer.sh laufen und optimiere dein Apache Konfiguration incl. Modules.

Zur Orientierung
Code:
Timeout 30
KeepAlive On
MaxKeeAliveRequests 200
KeepAliveTimeout 2

<IfModule prefork.c>
StartServers       2
MinSpareServers    5
MaxSpareServers    10
ServerLimit       300
MaxClients        300
MaxRequestsPerChild  8000
</IfModule>

HostnameLookups off
und die /etc/my.cnf
Code:
[mysqld]
key_buffer = 512K
table_cache = 512
sort_buffer_size = 128K
net_buffer_length = 8K
read_buffer_size = 128k
read_rnd_buffer_size = 512K
join_buffer_size = 512K
myisam_sort_buffer_size = 4M
thread_cache = 8
query_cache_size = 512K
max_connections = 300
long_query_time = 2
je weniger RAM zur Verfügung desto kleiner müssen die Buffers sein.
 
Last edited by a moderator:
SELECT forumthread_catid, forumthread_id FROM phpkit_forumthread WHERE (forumthread_id='32679'
SELECT forumthread_catid, forumthread_id FROM phpkit_forumthread WHERE (forumthread_id='32679'
SELECT forumthread_catid, forumthread_id FROM phpkit_forumthread WHERE (forumthread_id='32235'
Ist es immer wieder der selbe SELECT? (Prüfe es anhand des Slow-Query-Logs.)
Wenn, dann würde ich mal die Tabelle optimieren. Prüfe die Indizes und laß mal einen myisamchk (bei beendeten MySQL) drüber laufen.

huschi.
 
Danke für die Tips.

Das Tuning Script musste ich erstmal zum laufen bringen. Die PD-ADMIN SE ist ja nicht im "linux" Standard. Da musste erstmal ein Path neu gesetzt werden, damit das ging.

Nun gibt es einige Anmerkungen und ich werde schauen, die Parameter besser einzustellen und die Fehler in der Datenbank zu finden. PHPKIT ist leider eine ziemlich schlechte Software (meine Meinung), aber leider muss ich im Moment damit das Forum bestreiten. Ein Umstieg ist aber in Aussicht.

@HornOx: Es ist doch ein Debian Sarge. Hatte mich vertippt :) (nicht nachgesehen vor dem Posten und es schlichtweg vergessen).

Ich suche erstmal weiter nach den hakenden SQL Befehlen.

Gruß
Chris
 
Back
Top