![Begrenzen Sie die Größe von tmpdir](https://rvso.com/image/1417411/Begrenzen%20Sie%20die%20Gr%C3%B6%C3%9Fe%20von%20tmpdir.png)
Ich muss die Festplattennutzung von MySQL tmpdir begrenzen, damit es nicht den gesamten verfügbaren Speicherplatz „auffrisst“. Es sind etwa 30 GB verfügbar, aber ich habe gesehen, dass mysqld diesen komplett nutzt, um eine temporäre Tabelle zu erstellen.
Mein erster Ansatz war, ein Festplattenkontingent zu implementieren, aber ich bin auf Probleme gestoßen, weil ich nicht weiß, wie ich das Kontingent festlegen kann, während die Festplatte verwendet wird. Das könnte wahrscheinlich beim Booten im Init-Skript erfolgen, aber ich weiß nicht, ob das eine gute Idee ist.
Irgendwelche Vorschläge? Was wären in dieser Situation die besten Vorgehensweisen?
Betriebssystem ist RedHat
uname -a
Linux www.myservername.com 2.6.18-194.17.1.el5 #1 SMP Mon Sep 20 07:12:06 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
mysql --version
mysql Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (x86_64) using readline 5.1
Antwort1
Bist du dir da sicher? Soweit ich weiß, existieren die temporären Tabellen so lange, wie sie benötigt werden – für eine Abfrage, aber danach verschwinden sie. Wenn du so viele aktive Abfragen hast, die 30 GB temporäre Tabellen benötigen, wird dir das viel mehr Probleme bereiten, als den gesamten freien Speicherplatz zu nutzen (ich meinte Festplatten-E/A usw.).
Sie können immer noch mit ulimit spielen, aber dazu ist zumindest ein Neustart des Dienstes erforderlich. Daher bin ich nicht sicher, ob das besser ist, als Kontingente einzurichten.
Antwort2
Wenn Sie LVM haben, erstellen Sie eine separate Partitionsbereitstellung in der erforderlichen Größe. Sie können die Option --tmpdir für mysqld verwenden.
Überprüfen Sie dies.http://dev.mysql.com/doc/refman/5.0/en/temporary-files.html
Antwort3
Nach vielen Versuchen in einer virtuellen Maschine bin ich zu dem Schluss gekommen, dass es für eine Produktionsumgebung ein zu großes Risiko darstellt, das Kontingent auf (-m) zu erzwingen. Das Problem ist nur einmal aufgetreten, seit ich mich um diese Infrastruktur kümmere, und ich vermute, dass es mit einer zwielichtigen Abfrage auf dem Server zusammenhängt, die eine riesige temporäre Tabelle erstellt.
Vielen Dank an alle für die Vorschläge.