SQL-Anfragen brauchen ziemlich lange und zwingen Server in die Knie

Prolamer

Registered User
Hallo,
ich habe zwar bereits einen hread geöffnet, aus dem ergibt sich aber nicht wirklich mein Problem.
Ersteinmal Serverhardware:

i5 4* 2,66ghz
16gb ram
Isgenug Server
Software: Debian 6 inkl. ISPConfig 3 direkt als Image von OVH

Funktion des Servers:
Hosting eines Webshops mit ca. 10.000 Besucher/Tag und steigend.
Ein Teamspeak-Server läuft auch drauf
VBulletin Board

Problemstellung:
Der Server geht bei einer bestimmten SQL Anfrage total in die Knie.
Ich weiß nicht woran es liegt.
Das Script ruft alle 20 Minuten per Cron-Job die Datenbank ab und prüft, ob bestimmte Waren versendet wurden, als bezahlt markiert wurden etc. wenn das alles passt, dann sendet er die Sachen per Email raus.


Hier mal der ein Auszug des Cods:

Code:
orderq = Db::getInstance()->executeQuery("SELECT a.firstname, a.lastname, a.email, a.id_customer, e.id_order, e.id_customer, (SELECT sign FROM currency WHERE currency = e.currency) AS currency, e.total_paid, e.date_add FROM customer a JOIN (SELECT o.id_order, o.id_customer, o.id_currency, o.total_paid, o.date_add FROM _orders o JOIN (SELECT order FROM order_history WHERE date_add IN (SELECT MAX(date_add) FROM order_history GROUP BY id_order) AND id_order_state IN (12,2)) h ON o.id_order = h.id_order) e ON a.id_customer = e.id_customer WHERE DATE_SUB(NOW(),INTERVAL (SELECT tage FROM xxxx LIMIT 0,1) SECOND) <= e.date_add");

die my.cnf:
Code:
user		= mysql
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
port		= 3306
basedir		= /usr
datadir		= /var/lib/mysql
tmpdir		= /tmp
language	= /usr/share/mysql/english
skip-external-locking
read_buffer_size = 32M
tmp_table_size = 128M
max_heap_table_size = 128M
join_buffer_size = 16M
table_cache = 2048


#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address		= 127.0.0.1
#
# * Fine Tuning
#
key_buffer		= 16M
max_allowed_packet	= 16M
thread_stack		= 192K
thread_cache_size       = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit	= 1M
query_cache_size        = 16M

Ich habe mal ein Paar screens angehangen von atop, einmal ohne script und 4 mit Script in bestimmten Zeitabständen.

Ich hoffe, dass Ihr mir helfen könnt bzw. sagen könnt woran es liegt?
 

Attachments

  • 4140d1321064100-brauche-empfehlung-fuer-rootserver-script_aus.jpg
    4140d1321064100-brauche-empfehlung-fuer-rootserver-script_aus.jpg
    128.5 KB · Views: 151
  • 4141d1321064108-brauche-empfehlung-fuer-rootserver-script_10sek.png
    4141d1321064108-brauche-empfehlung-fuer-rootserver-script_10sek.png
    105.7 KB · Views: 137
  • 4142d1321064102-brauche-empfehlung-fuer-rootserver-script_30sek.png
    4142d1321064102-brauche-empfehlung-fuer-rootserver-script_30sek.png
    71.1 KB · Views: 137
  • 4143d1321064110-brauche-empfehlung-fuer-rootserver-script_2min.png
    4143d1321064110-brauche-empfehlung-fuer-rootserver-script_2min.png
    58.8 KB · Views: 143
  • 4144d1321064215-brauche-empfehlung-fuer-rootserver-script_5min.png
    4144d1321064215-brauche-empfehlung-fuer-rootserver-script_5min.png
    30.6 KB · Views: 164
Last edited by a moderator:
Führe den Query bitte mal mit einem EXPLAIN auf der MySQL-Console manuell aus und poste das Ergebnis.
 
Pauschal kann man keine für jeden Server passende Config anbieten. ich habe dir ja schon oben ein Tool genannt, womit du dich an für deinen Server passende Config heranarbeiten kannst...
 
Back
Top