2011-11-04 11 views
5

Mam bardzo ładną, waniliową konfigurację mysql 5.1 i staram się ją dostroić. Znalazłem to handy scriptmysql tuning variables - current & defaults

Wykonana następujące propozycje:

query_cache_limit (> 1M, or use smaller result sets) 
query_cache_size (> 16M) 
join_buffer_size (> 128.0K, or always use indexes with joins) 
table_cache (> 64) 
innodb_buffer_pool_size (>= 14G) 

W czytania na co to znaczy i jakie są aktualnie ustawiony, stwierdziliśmy, że mogę uruchomić „zmiennych mysqladmin”

Moje bieżące wartości to:

query_cache_limit      | 1048576 
query_cache_size      | 16777216 
join_buffer_size      | 131072  
innodb_buffer_pool_size     | 8388608 

Jak mogę je przeczytać, czy są to kilobajty? więc czy 1M, 16M, 13M i 8M?

Moje pudełko ma tylko 4G pamięci RAM i na zwykły dzień miało tylko kilkaset megabajtów wolnego od pamięci. Powinienem następujące sugestie i zrobić:

#innodb_buffer_pool_size = 15G 
#table_cache = 128 
#join_buffer_size = 32M 
#query_cache_size = 64M 
#query_cache_limit = 2M 

Im mylone przez 15G, jest to dysk przestrzeń rzeczą, nie jest rzeczą pamięć? Jeśli tak, to zalecenia nie są zbyt dobre, prawda?

Czy powinienem otrzymać więcej pamięci na moje pudełko?

Więcej informacji: - Mój rozmiar db jest 34Gigs, używam wszystkich innodb, mam 71 tabel, 4 z nich są ogromne, reszta jest mała. Zastanawiałem się nad przeniesieniem dużych do SOLR i wykonaniem wszystkich zapytań, ale chciałem zobaczyć, co mogę zrobić z podstawowym strojeniem.

dzięki Joel

+0

Uważam, że jest to przydatna lektura http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/ –

+0

To może być lepiej zadane na serverfault.com –

+0

Przeczytałem perfloga, ale wciąż byłem zdezorientowany, Myślę, że zakłada on, że już wiesz, co ta zmienna jest i robi. – Joelio

Odpowiedz

0

Nie należy ustawić swoją puli bufora InnoDB wyższa niż dostępnej pamięci. Skrypt prawdopodobnie zalecił, że na podstawie liczby rekordów w tabeli i ich fizycznego rozmiaru. Wydajność Innodb jest bardzo oparta na pamięci, jeśli może pasować do indeksów w pamięci, wydajność spada szybko i zauważalnie. Tak więc ustawienie wysokości innodb_buffer_pool_size jest prawie zawsze dobrą radą.

Innodb nie jest najlepszym rodzajem tabeli dla wszystkiego, jeśli chodzi o mysql. Bardzo duże tabele, które na ogół zawierają dużo wstawek, ale niewiele odczytów i aktualizacji (np. Logowanie) są lepsze jako tabele MyISAM. Twoje bardzo aktywne tabele (wstawki, aktualizacje, usunięcia, zaznaczenia) są lepsze od Innodb. Na tej radzie może wybuchnąć wojna płomieniowa i jest to generalna rada.

Ale to powiedziawszy, nie będzie skryptu, aby powiedzieć, jakie powinny być twoje ustawienia. Może zrobić tylko najlepszego gościa. Najlepsze ustawienia są oparte na wzorcach dostępu do danych. Naprawdę musisz przeczytać, jakie są wszystkie zmienne. mysqlperformanceblog.com to doskonałe miejsce do nauki o mysql, oprócz podręcznika.

Będąc w mysql, użyj "pokaż zmienne" i "pokaż status", aby zobaczyć, co się dzieje. Możesz także uruchomić "show innodb status", ale możesz nie zrozumieć tego wyjścia, jeśli nie wiesz, czym są zmienne.

+0

Dzięki, to wydaje się jakaś dobra rada, uaktualniłem mój vm i dodałem więcej pamięci, biegając miałem wolne około 8 koncertów, więc ustawiłem innodb_buffer_pool_size na 4G. Kiedy zaczynałem mysql, spodziewałem się, że użyje tej pamięci 4G, ale ja tego nie widzę. W tej chwili po uruchomieniu dużego zadania wsadowego przez całą noc jego użycie wynosi 68 metrów i 331 metrów. Czy zrobiłem coś nie tak? – Joelio

+0

Przeczytałem twoje "show variables" i wypróbowałem to, a mysql wciąż pokazuje stary numer dla innodb_buffer_pool_size ... nie jestem pewien, co zrobiłem źle, dodałem vary do my.cnf i zrestartowałem mysql .. – Joelio

+0

Ok, pomyślałem to, duh umieściłem zmienne w niewłaściwej sekcji my.cnf, dzięki za pomysł sprawdzenia zmiennych show. – Joelio

Powiązane problemy