MySQL du serveur thread_stack paramètre - ce que c'est? Quelle taille doit-il être?

Il ya quelques jours j'ai reçu suite à l'erreur de base de données MySQL:

Fil débordements de pile: 68744 octets utilisés d'une 196608 octets de la pile, et 128000 octets nécessaires. Utiliser 'mysqld -O thread_stack=#' pour spécifier un plus gros stack.

Toute la documentation que j'ai trouvé dit, que:

La valeur par défaut est de 64 ko avant MySQL 4.0.10 et 192KB par la suite. Si la taille de la pile est trop petit, il permet de limiter la complexité des instructions SQL que le serveur peut gérer, la profondeur de récursivité des procédures stockées, et d'autres à la mémoire de consommer des actions.

J'ai défini la variable thread_stack 256K, mais c'était juste une valeur aléatoire. Pour l'instant, il a résolu le problème, mais j'aimerais vraiment savoir de quelle taille doit-elle être obtenir quelques exemples de valeurs, ou les usages. E. g.:

  • Ce qui peut et ce qu'on ne peut pas faire avec 96KO (x KO) de la pile de thread?
  • Comment calculer quelle taille de pile de thread ai-je besoin?
que faisiez-vous qui en est la cause? vous disposez de tous les GRANDS jointures, ou récursive stockées procs?
Récursive stockées procs sont la raison pour laquelle je pense. J'ai aussi rejoint sur d'immenses tables (à 500M de dossiers), mais généralement, j'ai d'abord coupé seulement petit sous-ensemble de la table, puis de le joindre avec la seconde, ce qui est relativement peu. Je ne fais jamais rejoint sur deux tableaux avec des millions d'enregistrements, ni jointures qui produit des millions d'enregistrements. Mais quel est l'impact de thread_stack sur les jointures?
des indices sur la façon thread_stack a de l'impact sur les jointures?

OriginalL'auteur ssobczak | 2010-05-27