Bekijk Volledige Versie : mysql zuipt geheugen ?
Hi,
Ik heb zo'n 3 dagen geleden een VPS bestelt en hier op monitorings software gezet.. nu draait er dus een noc tooltje met een mysql backend (de enigste database die op mysql draait) en toch zuipt mysql ontzettend veel geheugen, is dit normaal? Normaal gesproken zonder mysql zit ik op 62 MB geheugen en nu 171 mb?
Bedankt, Niels.
Ramon Fincken
11/07/07, 20:55
hoe optimaal is je scripting en worden je connecties weer keurig afgesloten?
hoevaak draait dit script ?
Elke minuut word er één query weggeschreven, en mysql connectie word ook elke keer weer netjes afgesloten.
Je hebt wel je my.cnf geoptimaliseerd voor een VPS?
Als je dat niet wilt moet je je buffers omlaag schroeven. (Denk aan key buffer) MySQL blijft geheugen bij-eten tot het maximum van deze buffers. Het resultaat is echter dat de load en de disk i/o waarschijnlijk omhoog gaan.
Met een tool als mysql administrator kun je het effect van je buffers meten.
@ Deimos: Nee, nog nooit van gehoord eigelijk, zal eens gaan zoeken.
@ Almar: Ik heb verder vrijwel geen verstand van de mysql daemon. Alleen scripting, dus wil je iets meer uitleggen, ik ga ondertussen ook even daarna zoeken.
Even gezocht en ben tot de volgende config gekomen:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
skip-locking
# skip innodb if you don't need it
skip-innodb
# skip networking, bdb, ndbcluster suggested by Mark
skip-networking
skip-bdb
skip-ndbcluster
#size the buffers etc. down a bit
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysqldump]
quick
max_allowed_packet = 16M
mysql]
no-auto-rehash
socket = /var/lib/mysql/mysql.sock
# these checks should be fine with just these resources, will increase later if not
[isamchk]
key_buffer = 1M
sort_buffer_size = 64K
[myisamchk]
key_buffer = 1M
sort_buffer_size = 64K
[mysqlhotcopy]
interactive-timeout
Ben nu van 171 naar 67 mb memory gedaan, thanks everyone.. iemand nog tips? :)
Ramon Fincken
11/07/07, 22:24
wellicht een kleine opmerking, crons komen ook uit je database, is het niet mogelijk dat het querien van je DB en het daadwerkelijk cron-commando sturen + het uitvoeren ervan RAM nodig heeft welke je eerst niet gebruikte?
( ik ben geen linux/unix expert, maar dit zou een klein deel van je RAM kunnen verklaren )
Die cron die kan wel ietjes memory vragen maar geen hele mb's.. :)
Hoeveel geheugen heb je in het totaal in de VDS? Je kan beter al je geheugen gebruiken, zodat je zo weinig mogelijk disk-io dient te doen. Linux gaat van nature proberen zoveel mogelijk te cachen, en mysql doet dit ook, voor zover de ingestelde limieten gerespecteerd blijven. Helemaal niets mis mee... met vrij, ongebruikt geheugen ben je toch niets. Met gebruikt geheugen, dat kan vrijgegeven worden als het nodig zou zijn, daar zit je met een optimale configuratie...
64 mb, 256 burstable.. Ik heb nog wat ram nodig, mysql is gierig genoeg :)
Persoonlijk zou ik voor de minimale key_buffer naar 4 of 8 Mb zetten, als je merkt dat het systeem te traag wordt. Dan zal het wel goed gaan.
Je moet in jouw geval idd spaarzaam zijn, anders klappen andere applicaties er op een gegeven moment uit of je performance is gewoon dramatisch. We hebben hier een paar machines staan met key_buffers van 2 Gb, dat is wel even iets anders :D
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
skip-locking
# skip innodb if you don't need it
skip-innodb
# skip networking, bdb, ndbcluster suggested by Mark
skip-networking
skip-bdb
skip-ndbcluster
#size the buffers etc. down a bit
key_buffer = 8MB
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysqldump]
quick
max_allowed_packet = 16M
mysql]
no-auto-rehash
socket = /var/lib/mysql/mysql.sock
# these checks should be fine with just these resources, will increase later if not
[isamchk]
key_buffer = 8M
sort_buffer_size = 64K
[myisamchk]
key_buffer = 8M
sort_buffer_size = 64K
[mysqlhotcopy]
interactive-timeout
Ik heb je raad opgevolgd, heb er zelf totaal geen ervaring met configuratie's van mysql server(s). :(
Ziet er goed uit, download op je eigen pc even de mysql administrator dan kun je zien wat het resultaat is van je wijzigingen.