Być może część czytelników przegląda na bieżąco wiadomości z Oracle, dlatego też pozwoliłem sobie napisać ten krótki post. MySQL 5.5 już od dłuższego czasu jest dostępny jako wersja GA, wersją rozwojową jest obecnie MySQL 5.6. Co ciekawego pojawi się w kolejnej wersji MySQL?

Wbrew pozorom, trochę tego będzie. Po pierwsze, wprowadzono kilka optymalizacji optimizera MySQL. Jedna z nich, to ulepszone postępowanie w przypadku sortowania wyników zapytań typu:

SELECT * FROM tabela ORDER BY nieindeksowana_kolumna LIMIT x;

lub ewentualnie:

SELECT SQL_CALC_FOUND_ROWS * FROM tabela ORDER BY nieindeksowana_kolumna LIMIT x;

Jeśli rekordy ograniczone LIMITem zmieszczą się w pamięci, nie będzie konieczne tworzenie tabel tymczasowych aby posortować i połączyć wyniki.

Druga i trzecia zmiana w optimizerze, to modyfikacje zachowania w przypadku range scan i w przypadku gdy MySQL jest w stanie pobrać dane przy pomocy indeksu – zmiany te mają na celu zmniejszenie ilości operacji dyskowych wykonywanych w przypadku tego ty pu zapytań.

InnoDB (które oczywiście jest domyślnym silnikiem) skaluje się jeszcze lepiej niż w MySQL 5.5. Rozbity został kernel mutex, dodano możliwość tworzenia większej ilości purge thread (wątków sprzątających undo logi i rekordy, które zostały oznaczone jako skasowane), poprawiono zarządzanie cache otwartych tabel InnoDB, dodano wątek do obsługi flushowania stron na dysk, który działa w tle i przejmuje zadania wykonywane do tej pory przez główny wątek InnoDB.

Kolejne usprawnienia pojawiają się w replikacji. Bardziej wydajna replikacja „row-based” – mniejsze zużycie miejsca na dysku, szybsze wykonywanie modyfikacji na slave. Serwery slave zyskały możliwość pracy na kilku wątkach – dane są rozdzielane między wątki na podstawie nazw baz danych. Ta modyfikacja może sprawić, że serwery slave zaczną nadążać za modyfikacjami wykonywanymi na serwerze master (zakładając oczywiście, że replikujemy kilka baz danych, a nie jedną). Wprowadzono checksumy – slave jest w stanie potwierdzić poprawność otrzymanych danych. Serwery slave powinny także być w stanie poradzić sobie ze sporą częścią padów replikacji – ograniczona zostanie ilość sytuacji, w których konieczna jest interwencja administratora. O kolejnym elemencie pisałem wspominałem już kiedyś – opóźniona replikacja, która umożliwia „wyłapanie” niektórych  ludzkich błędów typu „DROP DATABASE wazna_baza;”

Do powyższego możemy dodać jeszcze rozbudowaną, lepszą, wydajniejszą (aczkolwiek patrząc po ostatnich postach na blogach, jeszcze parę poprawek co do wydajności by się przydało) i zbierającą jeszcze więcej danych PERFORMANCE_SCHEMA. Dopisać można także jeszcze kilka innych nowości, o których tu nie wspomniałem – zapraszam jak zazwyczaj do dokumentacji. W każdym razie, MySQL 5.5 było bardzo dobrym wydaniem. MySQL 5.6 zapowiada się także znakomicie.

Tak przy okazji, kilka dni temu Percona wypuściła Percona Server 5.5 w wersji stabilnej. Najnowsza stabilna wersja MySQL z (prawie) wszystkimi ficzerami Percona Server 5.1.