Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zoptymalizuj wydajność zapisu dla instancji AWS Aurora

Z mojego doświadczenia wynika, że ​​Amazon Aurora nie nadaje się do obsługi bazy danych o dużym natężeniu ruchu zapisu. Przynajmniej w jego wdrożeniu około 2017 roku. Może z czasem się poprawi.

Wcześniej w 2017 roku pracowałem nad kilkoma testami porównawczymi dla aplikacji o dużym obciążeniu zapisem i odkryliśmy, że RDS (bez Aurora) był znacznie lepszy od Aurory pod względem wydajności zapisu, biorąc pod uwagę naszą aplikację i bazę danych. Zasadniczo Aurora była o dwa rzędy wielkości wolniejsza niż RDS. Twierdzenia Amazona o wysokiej wydajności Aurory są najwyraźniej całkowicie marketingową bzdurą.

W listopadzie 2016 uczestniczyłem w konferencji Amazon re:Invent w Las Vegas. Próbowałem znaleźć doświadczonego inżyniera Aurora, który odpowie na moje pytania dotyczące wydajności. Wszystko, co udało mi się znaleźć, to młodszych inżynierów, którym polecono powtórzyć twierdzenie, że Aurora jest magicznie 5-10 razy szybsza niż MySQL.

W kwietniu 2017 uczestniczyłem w konferencji Percona Live i zobaczyłem prezentację o tym, jak opracować architekturę rozproszonej pamięci masowej typu Aurora przy użyciu standardowego MySQL z CEPH dla warstwy rozproszonej pamięci masowej o otwartym kodzie źródłowym. Tutaj jest seminarium internetowe na ten sam temat:https://www.percona. com/resources/webinary/mysql-and-ceph , współprezentowane przez Yvesa Trudeau, inżyniera, którego widziałem na konferencji.

Co stało się jasne w przypadku używania MySQL z CEPH, to fakt, że inżynierowie musieli wyłączyć Bufor zmian MySQL ponieważ nie ma możliwości buforowania zmian w indeksach pomocniczych, a jednocześnie ma rozproszoną pamięć masową. Spowodowało to ogromne problemy z wydajnością podczas zapisu do tabel, które mają drugorzędne (nieunikalne) indeksy.

Było to zgodne z problemami z wydajnością, które widzieliśmy podczas testów porównawczych naszej aplikacji z Aurora. Nasza baza danych zawierała wiele indeksów wtórnych.

Więc jeśli absolutnie musisz używać Aurory dla bazy danych, która ma duży ruch zapisu, polecam pierwszą rzeczą, którą musisz zrobić, to porzucić wszystkie swoje indeksy pomocnicze.

Oczywiście jest to problem, jeśli indeksy są potrzebne do optymalizacji niektórych zapytań. Oczywiście oba zapytania SELECT, ale także niektóre zapytania UPDATE i DELETE mogą używać indeksów pomocniczych.

Jedną ze strategii może być utworzenie repliki do odczytu klastra Aurora innej niż Aurora i utworzenie indeksów pomocniczych tylko w replice do odczytu w celu obsługi zapytań SELECT. Nigdy tego nie robiłem, ale najwyraźniej jest to możliwe, według https://aws.amazon.com/premiumsupport/knowledge-center/enable-binary-logging-aurora/

Ale to nadal nie pomaga w przypadkach, w których instrukcje UPDATE/DELETE wymagają indeksów pomocniczych. Nie mam żadnych sugestii na ten scenariusz. Możesz nie mieć szczęścia.

Doszedłem do wniosku, że nie wybrałbym Aurory w aplikacji wymagającej dużej ilości zapisu. Może to się zmieni w przyszłości.

Aktualizacja z kwietnia 2021:

Od czasu napisania powyższego uruchomiłem testy porównawcze sysbench z Aurora w wersji 2. Nie mogę udostępnić konkretnych liczb, ale dochodzę do wniosku, że obecne ulepszenia Aurory są lepsze w przypadku dużego obciążenia związanego z zapisem. Aby się upewnić, przeprowadziłem testy z wieloma indeksami wtórnymi. Ale zachęcam każdego, kto poważnie zaadoptuje Aurorę, do prowadzenia własnych testów porównawczych.

Przynajmniej Aurora jest znacznie lepsza niż konwencjonalny Amazon RDS dla MySQL przy użyciu pamięci EBS. To prawdopodobnie tam, gdzie twierdzą, że Aurora jest 5x szybsza niż MySQL. Ale Aurora nie jest szybsza niż niektóre inne testowane przeze mnie alternatywy i w rzeczywistości nie może się równać:

  • MySQL Server zainstalowałem się na instancjach EC2 przy użyciu lokalnej pamięci masowej, szczególnie instancje i3 z lokalnie podłączonym NVMe. Rozumiem, że przechowywanie instancji nie jest niezawodne, więc należałoby uruchomić nadmiarowe węzły.

  • MySQL Server zainstalowałem się na fizycznych hostach w naszym centrum danych, korzystając z bezpośrednio podłączonej pamięci masowej SSD.

Korzyścią z używania Aurory jako zarządzanej bazy danych w chmurze nie jest tylko wydajność. Posiada również automatyczne monitorowanie, kopie zapasowe, przełączanie awaryjne, aktualizacje itp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Schemat bazy danych dla czatu:prywatny i grupowy

  2. NodeJS odpowiedział, że strefa czasowa MySQL jest inna, gdy pobieram bezpośrednio z MySQL

  3. Dlaczego liczność indeksu w MySQL pozostaje niezmieniona po dodaniu nowego indeksu?

  4. ASP, MySQL i UTF-8

  5. Wybierz średnią z tabeli MySQL z LIMIT