2010-05-27 15 views
10

Paar Tagen habe ich von MySQL-Datenbank folgende Fehlermeldung:Der thread_stack-Parameter des MySQL-Servers - was ist das? Wie groß sollte es sein?

Thread-Stack überrannt: 68744 Bytes eines 196.608 Byte-Stack verwendet, und 128,000 Bytes benötigt. Verwenden Sie 'mysqld -O thread_stack = #', um einen größeren Stapel anzugeben.

Alle Unterlagen, die ich so gefunden, dass:

Der Standard 64KB vor MySQL ist danach 4.0.10 und 192KB. Wenn die Thread-Stack-Größe zu klein ist, begrenzt dies die Komplexität der SQL-Anweisungen, die der Server verarbeiten kann, die Rekursionstiefe gespeicherter Prozeduren und andere speicherintensive Aktionen.

Ich legte die Variable thread_stack auf 256K, aber es war nur ein zufälliger Wert. Vorerst hat es das Problem gelöst, aber ich würde wirklich gerne wissen, wie groß es sein sollte, einige Beispielwerte oder Verwendungen zu bekommen. Zum Beispiel:

  • Was kann und was kann ich nicht mit 96KB (x KB) Thread Stack?
  • Wie berechnet man, wie groß Thread Stack brauche ich?
+0

Was hast du dafür verursacht? Haben Sie große Joins oder rekursive gespeicherte Procs? – oedo

+0

Rekursive gespeicherte Procs sind der Grund, denke ich. Ich habe auch Joins auf riesigen Tabellen (500M Datensätze), aber in der Regel zuerst schneide ich nur kleine Teilmenge der Tabelle und dann mit der zweiten, die relativ klein ist. Ich verbinde niemals zwei Tabellen mit Millionen von Datensätzen oder Verbindungen, die Millionen von Datensätzen erzeugen. Aber welche Auswirkung hat thread_stack auf Joins? – ssobczak

+0

@ssobczak, führt alle auf wie thread_stack Auswirkungen auf Joins hat? –

Antwort

10

Gerade lief in einen ähnlichen Fehler heute. Die MySQL documentation über die Variable bietet einen Hinweis für Standardwerte, die ausreichen sollten (192 KB für 32-Bit-Systeme und 256 KB für 64-Bit-Systeme), sowie auf die MySQL Benchmark suite zu sehen.