2017-08-08 4 views
0

Ich habe einen Shop auf PHP-Plattform (schlecht entwickelt), wo es eine Menge von schlechten Abfragen (lange Abfragen ohne Indizes, Reihenfolge von rand(), dynamische Zählung, ..)MySQL Overhead - Wie Server zu beschleunigen, um schlechte Abfragen zu beschleunigen

Ich habe nicht die Möglichkeit, die Abfragen für jetzt zu ändern, aber ich muss den Server optimieren, um am Leben zu bleiben.

Ich habe alles versucht, was ich weiß, ich hatte sehr große Datenbanken, die ich mit wechselnden MySQL-Engine optimiert und es tune, aber es ist das erste Projekt, wo alles untergeht.

aktuelle Situation:

1. Frontend (PHP) - AWS m4.large Beispiel Amazon Linux (neuesten), PHP 7.0 mit opcache (Apache-Modul) aktiviert ist, mod_pagespeed mit externen Memcached auf AWS ElastiCache aktiviert (t2.micro, 5% durchschnittliche Belastung)

2. SQL - Percona DB mit TokuDB Motor auf AWS c4.xlarge Instanz (50% durchschnittliche Belastung)

ich brauche die Instanzen zu senken, vor allem der c4.xlarge, aber wenn ich auf c4.larg umschalte e, nach ein paar Stunden gibt es eine große Überlastung.

Datenbank hat nur 300MB Daten, ich habe Abfrage Cache, InnoDB, XtraDB, ... ohne Erfolg versucht, und der Verkehr ist auch sehr niedrig. PHP verwendet die MySQLi-Erweiterung.

Kennen Sie eine mögliche Lösung, wie Sie die Last ohne Refactoring der Abfragen senken können?

+3

Hässlicher Job aber muss getan werden ... Refactor diese Abfragen .. Wenn es das erste Mal richtig gemacht wurde Dann hätten Sie dieses Problem nicht: P – Matt

+3

Sie können Ihre Abfragen indizieren. Schalten Sie das langsame Abfrageprotokoll ein wenig ein und versuchen Sie dann herauszufinden, welche Abfragen indiziert werden können. Verwenden Sie Percona Toolkit für einige davon. Sie können auch auf https://dba.stackexchange.com nach weiteren Optionen suchen. – aynber

+0

Sie können ein Tool wie NewRelic installieren und die am häufigsten verwendeten Abfragen abrufen. Dann können Sie sich darauf konzentrieren, die relevanten zu refaktorieren. –

Antwort

0

Die Verwendung von www.mysqlcalculator.com wäre ein schneller Weg, um etwa ein Dutzend Speicherverbrauchsfaktoren in weniger als 2 Minuten zu überprüfen. Würde gerne Ihren SHOW GLOBAL STATUS und SHOW GLOBAL VARIABLES sehen, wenn Sie diese veröffentlichen könnten, um eine Analyse von Aktivitäten und Konfigurationsanforderungen zu ermöglichen. 3 Minuten von Ihrem GENERAL_LOG während einer beschäftigten Zeit wäre interessant und könnte lästige/zeitraubende SELECT's usw. identifizieren.

Verwandte Themen