2010-05-27 8 views
10

Kilka dni temu dostałem następujący błąd z bazą danych MySQL: stackParametr thread_stack serwera MySQL - co to jest? Jak duży powinien być?

Temat opanowane: 68744 bajtów używanych stosu 196608 bajtów i 128000 bajtów potrzebnych. Użyj "mysqld -O thread_stack = #", aby określić większy stos.

Wszystkie dokumenty, które znalazłem, mówi, że:

Domyślnie jest 64KB przed MySQL 4.0.10 i 192kB później. Jeśli wielkość stosu wątków jest zbyt mała, ogranicza to złożoność instrukcji SQL obsługiwanych przez serwer, głębokość rekursji zapisanych procedur i inne operacje powodujące zużycie pamięci.

Ustawiłem zmienną thread_stack na 256K, ale była to tylko losowa wartość. Na razie rozwiązał problem, ale naprawdę chciałbym wiedzieć, jak duże powinno być, uzyskać przykładowe wartości lub zwyczaje. Np .:

  • Co może i czego nie mogę zrobić przy stosie nici 96 KB (x KB)?
  • Jak obliczyć, ile stosu wątków potrzebuję?
+0

co robiłeś, co spowodowało to? masz jakieś duże sprzężenia lub rekursywne przechowywane procy? – oedo

+0

Rekursywnie przechowywane procy są powodem, dla którego myślę. Mam również łączenia na wielkich stołach (500M rekordów), ale zazwyczaj najpierw wycinam tylko mały podzestaw stołu, a następnie łączę go z drugim, który jest względnie mały. Nigdy nie robię złączeń na dwóch stołach z milionami rekordów ani złączeń, które produkują miliony rekordów. Ale jaki wpływ ma na sprzężenie thread_stack? – ssobczak

+0

@ssobczak, wszelkie wskazówki dotyczące wpływu thread_stack na łączenia? –

Odpowiedz

10

Wystąpił po prostu podobny błąd dzisiaj. Zmienna MySQL documentation zawiera podpowiedź dla wartości domyślnych, które powinny wystarczyć (192K dla systemów 32-bitowych i 256K dla systemów 64-bitowych), a także dla wersji MySQL Benchmark suite.