Hallo liebe Gemeinde,
ich habe ein kleines lästiges Problem mit meinem MySQL-Server: Und zwar steigt der RAM-Verbrauch des MySQL stetig an. Entweder handelt es sich dabei um einen Memory Leak oder der Server steigt auf Grund der Konfiguration halt gerne weiter an. Vor ca. 1/2 Jahren hat sich MySQL maximal 4-6 GB nur an RAM genehmigt. Nach Änderungen und Optimierungen der Einstellungen steigt der RAM-Verbrauch (speziell der virtuelle RAM) an. Ändern kann ich das nur, indem ich den Dienst neustarte. Aber das finde ich auch eher für kontraproduktiv. Nach dem Neustart läuft der MySQL-Dienst anfänglich mit 2.5 - 4 GB frisst dann aber stetig mehr.
Das ändern der Buffers auf niedrige Werte (auch im Livebetrieb) schien keine Besserung gebracht zu haben. Ich versuch an den Einstellungen schon die ganze Zeit zu justieren aber ohne große Erfolge. Aktuell werden wieder 16 GB verwendet. Rein rechnerisch sollte sich der MySQL-Server doch nur ca. maximal 10 GB an RAM genehmigen? Ich habe keine Lust darauf, dass sich mein MySQL-Server immer mehr und mehr genehmigt und mein Server irgendwann mit ner Kernelpanic aussteigt. Pro Tag steigt der RAM-Verbrauch um ca. 750 MB an.
Hat jemand evtl. eine zündende Idee, wie man dem Einhalt gebieten kann?
Anbei noch ein paar weitere Details:
Viele Grüße
webjunky
---
Details:
Eingesetztes Betriebssystem: Debian Squeeze 6.0.8
Eingesetzte Version: 5.5.31 (aus Dotdeb Quellen)
Hauptsächlich eingesetzte Storage Engine: myisam
Es wird ein Master/Slave zu Master/Slave in einer Failover-Lösung betrieben. D.h. auch identische Konfiguration auf dem zweiten Masterserver. Der andere inaktive Server schnurrt mit ~ 1.5 GB an RAM-Verbrauch herrum.
Queries per Hour: 61,167
Query Verteilung: 68% Select, 12% Insert, 20% Rest
Die Konfiguration beruhen auf Erfahrungswerte, von mysqltuner, tuning-primer, Percona Configuration Wizard, diverse Artikel aus dem Highperformance Blog und dem Buch High Performance MySQL" vom Oreilly Verlag.
Auszug aus der jetzigen betriebenen my.cnf:
Frühere Werte vor Optimierungen der my.cnf:
Ausgabe von free:
Ausgabe von ps aux:
ich habe ein kleines lästiges Problem mit meinem MySQL-Server: Und zwar steigt der RAM-Verbrauch des MySQL stetig an. Entweder handelt es sich dabei um einen Memory Leak oder der Server steigt auf Grund der Konfiguration halt gerne weiter an. Vor ca. 1/2 Jahren hat sich MySQL maximal 4-6 GB nur an RAM genehmigt. Nach Änderungen und Optimierungen der Einstellungen steigt der RAM-Verbrauch (speziell der virtuelle RAM) an. Ändern kann ich das nur, indem ich den Dienst neustarte. Aber das finde ich auch eher für kontraproduktiv. Nach dem Neustart läuft der MySQL-Dienst anfänglich mit 2.5 - 4 GB frisst dann aber stetig mehr.
Das ändern der Buffers auf niedrige Werte (auch im Livebetrieb) schien keine Besserung gebracht zu haben. Ich versuch an den Einstellungen schon die ganze Zeit zu justieren aber ohne große Erfolge. Aktuell werden wieder 16 GB verwendet. Rein rechnerisch sollte sich der MySQL-Server doch nur ca. maximal 10 GB an RAM genehmigen? Ich habe keine Lust darauf, dass sich mein MySQL-Server immer mehr und mehr genehmigt und mein Server irgendwann mit ner Kernelpanic aussteigt. Pro Tag steigt der RAM-Verbrauch um ca. 750 MB an.
Hat jemand evtl. eine zündende Idee, wie man dem Einhalt gebieten kann?
Anbei noch ein paar weitere Details:
Viele Grüße
webjunky
---
Details:
Eingesetztes Betriebssystem: Debian Squeeze 6.0.8
Eingesetzte Version: 5.5.31 (aus Dotdeb Quellen)
Hauptsächlich eingesetzte Storage Engine: myisam
Es wird ein Master/Slave zu Master/Slave in einer Failover-Lösung betrieben. D.h. auch identische Konfiguration auf dem zweiten Masterserver. Der andere inaktive Server schnurrt mit ~ 1.5 GB an RAM-Verbrauch herrum.
Queries per Hour: 61,167
Query Verteilung: 68% Select, 12% Insert, 20% Rest
Die Konfiguration beruhen auf Erfahrungswerte, von mysqltuner, tuning-primer, Percona Configuration Wizard, diverse Artikel aus dem Highperformance Blog und dem Buch High Performance MySQL" vom Oreilly Verlag.
Auszug aus der jetzigen betriebenen my.cnf:
Code:
[mysqld]
###################################
# Global Buffers
###################################
key_buffer_size = 3G
query_cache_size = 80M
innodb_buffer_pool_size = 1M
innodb_log_buffer_size = 32M
innodb_additional_mem_pool_size = 32M
###################################
# Thread Buffer
###################################
sort_buffer_size = 4M
myisam_sort_buffer_size = 16M
read_buffer_size = 4M
join_buffer_size = 1M
read_rnd_buffer_size = 4M
thread_stack = 256K
bulk_insert_buffer_size = 8M
binlog_cache_size = 64K
###################################
# Allgemeine Einstellungen
###################################
max_connections = 250
tmp_table_size = 32M
open_files_limit = 65535
table_definition_cache = 4096
query_cache_limit = 32M
table_cache = 4096
thread_cache_size = 20
thread_concurrency = 8
max_heap_table_size = 32M
max_allowed_packet = 16M
# MySQL 5.5 Feature
event_scheduler = on
# Sonstiges
myisam-recover = BACKUP
max_connect_errors = 1000000
Frühere Werte vor Optimierungen der my.cnf:
Code:
# * Fine Tuning
#
[mysqld]
key_buffer = 256M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 10
max_connections = 500
table_cache = 1280
#thread_concurrency = 10
# * Query Cache Configuration
query_cache_limit = 4M
query_cache_size = 64M
Ausgabe von free:
Code:
total used free shared buffers cached
Mem: 32144 31944 200 0 209 13749
-/+ buffers/cache: 17985 14159
Swap: 12286 405 11881
Ausgabe von ps aux:
Code:
root 3065 0.0 0.0 3956 528 ? S Nov06 0:00 /bin/sh /usr/bin/mysqld_safe
mysql 3925 2.2 51.2 19887032 16876232 ? Sl Nov06 741:52 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/mysql.log --open-files-limit=65535 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
root 15770 0.0 0.0 138268 2988 pts/7 S+ 11:11 0:00 vim /etc/mysql/my.cnf
sgwork 26086 0.0 0.0 114380 936 pts/2 S+ 11:31 0:00 grep mysql