2016-09-20 11 views
1

Ich habe eine wirklich große Website altmodisch mit PHP & MYSQL gebaut.Mysql "Speichernutzung" erhöht und erhöht

Ich habe mehr als 1.000 verschiedene Abfragen in meiner Website, auf verschiedenen PHP-Seiten, und es ist wirklich schwer, alle von ihnen auf MYSQLI zu aktualisieren.

Ich kaufte VPS-Server mit 4 GB RAM und in den vergangenen Monaten erlebe ich wirklich langsame Seitenlasten.

Wenn ich meinen Server neustarten, läuft alles reibungslos, aber nach ein paar Stunden/Tage wird die Website viel langsamer mit Ladezeit von 3+ Sekunden für eine Seitenladung. Ich stelle fest, dass der mysqld Service steigt und die Speicherauslastung steigt, von 80MB auf Server neu starten, erreichte es etwa 400MB und mehr der Nutzung.

Ich lege das Ende meiner index.php mysql_close(), aber es scheint, als ob die Verbindungsnummer noch zunimmt.

Fragen Was kann unbegrenzte Inkrement in mysql Speichernutzung verursachen? Aktualisieren aller meine Abfragen zu MYSQLI kann die Leistung verbessern?

Einige Informationen:

innodb_version 
5.5.31 
protocol_version 
10 
slave_type_conversions 
version 
5.5.31-log 
version_comment 
MySQL Community Server (GPL) 
version_compile_machine 
x86_64 
version_compile_os 
Linux 

Speicher-Engine: Mixed (Somes Tabellen sind INNODB, einige Tische sind MyISAM my.cnf.

[mysqld] 
datadir=/var/lib/mysql 
socket=/var/lib/mysql/mysql.sock 
user=mysql 
max-connections=100000 
# Disabling symbolic-links is recommended to prevent assorted security risks 
symbolic-links=0 
thread_cache_size=5 
table_open_cache=99390 
sort_buffer_size=512M 
read_rnd_buffer_size=512M 
query_cache_size=512M 
query_cache_limit = 16M 
query_cache_type = 1 
slow_query_log=1 
slow_query_log_file=slow_query_log.log # 
long_query_time=5 
log-queries-not-using-indexes=1 


[mysqld_safe] 
log-error=/var/log/mysqld.log 
pid-file=/var/run/mysqld/mysqld.pid 

ich habe ~ 6-7 Ausführen von Abfragen wenn ich show processlist

+0

erste der ersten, wenn Ihre Website langsam geht, in der Konsole mysql führen 'show processlist' Abfrage von der Wurzel, um zu sehen, was los ist –

+0

Ich habe eine Reihe von Fragen: Welche Version von MySQL? Welche Speicher-Engine verwenden Sie? Wie lauten die Puffereinstellungen in my.cnf? Wie viele Sorten machst du in deinem Code? Entschuldigung - diese Frage kann aufgrund Ihrer Aussagen nicht beantwortet werden. Und MySQLI wird nicht viel Performance-Unterschied machen. –

+0

Aktualisiert meine Frage mit all diesen Informationen, @TGray. Ich kann nicht sagen, wie viel ich mache, aber nicht viel, denke ich. Mein Hauptproblem ist von einer Tabelle mit fast 300k Zeilen bei der Verwendung von SELECT und ORDER BY, obwohl die Abfragen für bestimmte user_id sind. – TheUnreal

Antwort

0

max-connections=100000 - Huch bis 1000 Tropfen

table_open_cache=99390 - drop, sagen wir, 2000

sort_buffer_size=512M - Tropfen auf 1% des RAM, sagen wir, 40M

read_rnd_buffer_size=512M - dito

query_cache_size=512M - zu groß; verlangsamt die Dinge; fallen auf 40M

long_query_time=5 - nicht niedrig genug, um viel zu fangen; fallen auf 2

log-queries-not-using-indexes=1 - stopft den Slowlog ohne viel Info zur Verfügung zu stellen; Wechsel zu 0

Sie haben nicht gesagt, welche Engine Sie verwenden. Lesen Sie this für Ratschläge zu MyISAM und InnoDB.

1000 Seiten - das ist nicht zu viel.

Welcher Webserver? Wenn Apache, setzen Sie nicht MaxClients auf mehr als 20.

+0

Ich habe in meinem Beitrag erwähnt, dass meine Tabellen eine Mischung aus MyIsam und InnoDB sind. Ich habe diesen Stab gelesen, aber es ist wirklich schwer, darüber eine Entscheidung zu treffen. Versuchen Sie Ihre Konfiguration, danke. Und es ist Apache – TheUnreal

+0

Mysqld wird immer größer, wie alle geöffneten Verbindungen nicht schließen, ich habe keine Ahnung, warum es ist. – TheUnreal

+0

Die Speicherauslastung für mysqld wird wachsen, bis es ein Limit trifft, dann wird es leicht schwanken. Meine Vorschläge zielen darauf ab, diese Grenze gefährlich groß zu halten. Swapping ist _terrible_ für MySQL. –