Jeśli ktoś śledzi agregator blogów o MySQL, czyli po prostu Planet MySQL, miał okazję ostatnio dowiedzieć się sporo nowości na temat MySQL 5.6. 10 kwietnia Oracle wydało kolejny milestone na drodze do stabilnej wersji MySQL. W tym poście chciałbym podzielić się kilkoma uwagami w tym właśnie temacie.

Dla każdego, kto stosuje bardziej skomplikowane topologie replikacji prawie na pewno najważniejszą wiadomością jest to, że MySQL 5.6.5 ma zaimplementowane globalne id transakcji. Dzięki temu normalne zarządzanie replikacją staje się możliwe. Koniec już z grzebaniem w binlogach i szukaniem jak przekłada się dana pozycja w logach głównego mastera na pozycję w binlogu kolejnego serwera, który służy jako źródło danych dla slave. Ot, taki pierwszy z brzegu przykład. Zmniejszy się ryzyko że slave, podczas failover, zacznie czytać nie te dane co trzeba. Kolejny zysk – wreszcie będzie można w łatwy i przyjemny sposób wykonać kontrolowany failover. Do tej pory tego typu funkcjonalność udostępniana była przez zewnętrzne oprogramowanie (choćby Tungsten udostępniał właśnie ten feature), teraz dostępna będzie out of the box, wraz z każdym serwerem MySQL.

Druga, także istotna sprawa, to znaczny wzrost wydajności InnoDB w przypadku pracy na silnych, wieloprocesorowych maszynach. Oracle twierdzi że wzrost sięga nawet do 6x przy ruchu tylko do odczytu i nawet 2x w przypadku DML (UPDATE, DELETE, INSERT). Testy wykonywane były przy pomocy Sysbench’a. Cóż, trudno mi z tym dyskutować jako że nie mam dostępu do 64 wątków, w jakim to środowisku całość była testowana przez inżynierów z Oracle. Czystko testowo uruchomiłem benchmark na maszynie 8C/16T i efekty widać, choć na pewno nie takie spektakularne.

Testy wykonywane były także przy pomocy SysBench’a:

./sysbench --test=oltp --mysql-host=xx --mysql-user=xx --mysql-password=xx --max-time=300 --max-requests=0  --oltp-read-only=on/off --oltp-table-size=10000000 --num-threads=64 run

Jeśli chodzi o efekty, to:

MySQL 5.6.5
read-only : 2890 tps
rw : 2045 tps

Percona Server 5.5.20 rel.21
read-only : 2588 tps
rw : 1828 tps

W obydwu przypadkach procesor został wysycony. Oczywiście, trudno tu mówić o zaletach MySQL 5.6.5 konkretnie, bo tego typu różnice mogą być także efektem dokładniejszej instrumentacji Percona Server – więcej danych o działaniu serwera jest zbieranych, więcej zasobów jest do tego potrzebnych.

Jesli o instrumentację chodzi, to oczywiście wraz z MySQL 5.6 pojawia się także nowa, lepsza, bardziej wydajna Performance Schema. Nie jest to coś, co można zostawić włączone na okrągło, bo spadek wydajności po włączeniu tak dokładnego logowania jest znaczny, ale w przypadku wystąpienia problemów i konieczności uzyskania dodatkowych informacji o tym, co dzieje się wewnątrz MySQL, jest już opcja żeby takie dane zebrać bez uciekania w stronę GDB czy też jakiegoś profilera.

Powyższe to nie wszystko, zmiany zaszły także w innych aspektach (choćby to, że pewne operacje typu zmiana nazwy kolumny, dodanie indeksu i parę innych, mogą być już wykonywane online, bez blokowania innych zapytań). Zainteresowanych zapraszam do lektury Planet MySQL