Najlepsze rozwiązania dotyczące tworzenia aplikacji z użyciem usługi Azure Database for MySQL

DOTYCZY: Azure Database for MySQL — pojedynczy serwer usługi Azure Database for MySQL — serwer elastyczny

Ważne

Pojedynczy serwer usługi Azure Database for MySQL znajduje się na ścieżce wycofania. Zdecydowanie zalecamy uaktualnienie do serwera elastycznego usługi Azure Database for MySQL. Aby uzyskać więcej informacji na temat migracji do serwera elastycznego usługi Azure Database for MySQL, zobacz Co się dzieje z usługą Azure Database for MySQL — pojedynczy serwer?

Poniżej przedstawiono kilka najlepszych rozwiązań, które ułatwiają tworzenie aplikacji gotowej do użycia w chmurze przy użyciu usługi Azure Database for MySQL. Te najlepsze rozwiązania mogą skrócić czas programowania aplikacji.

Konfiguracja zasobów aplikacji i bazy danych

Zachowaj aplikację i bazę danych w tym samym regionie

Upewnij się, że wszystkie zależności znajdują się w tym samym regionie podczas wdrażania aplikacji na platformie Azure. Rozłożenie wystąpień między regionami lub strefami dostępności powoduje opóźnienie sieci, które może mieć wpływ na ogólną wydajność aplikacji.

Zabezpieczanie serwera MySQL

Skonfiguruj serwer MySQL tak, aby był bezpieczny i niedostępny publicznie. Użyj jednej z tych opcji, aby zabezpieczyć serwer:

W celu zapewnienia bezpieczeństwa należy zawsze nawiązać połączenie z serwerem MySQL za pośrednictwem protokołu SSL i skonfigurować serwer MySQL oraz aplikację do używania protokołu TLS 1.2. Zobacz Jak skonfigurować protokół SSL/TLS.

Korzystanie z zaawansowanej sieci w usłudze AKS

Po włączeniu przyspieszonej sieci na maszynie wirtualnej występuje mniejsze opóźnienie, mniejsze zakłócenia i mniejsze wykorzystanie procesora CPU na maszynie wirtualnej. Aby dowiedzieć się więcej, zobacz Najlepsze rozwiązania dotyczące usług Azure Kubernetes Service i Azure Database for MySQL.

Dostrajanie parametrów serwera

W przypadku obciążeń wymagających odczytu dostrajania parametrów tmp_table_size serwera i max_heap_table_size może pomóc w optymalizacji pod kątem lepszej wydajności. Aby obliczyć wartości wymagane dla tych zmiennych, zapoznaj się z sumą na połączenie i wartościami pamięci podstawowej. Suma parametrów pamięci na połączenie, z wyłączeniem tmp_table_size, w połączeniu z kontami pamięci podstawowej dla całkowitej pamięci serwera.

Aby obliczyć największy możliwy rozmiar tmp_table_size i max_heap_table_size, użyj następującej formuły:

(total memory - (base memory + (sum of per-connection memory * # of connections)) / # of connections

Uwaga

Łączna ilość pamięci wskazuje łączną ilość pamięci, jaką serwer ma w aprowizowanych rdzeniach wirtualnych. Na przykład na serwerze usługi Azure Database for MySQL z dwoma rdzeniami wirtualnymi ogólnego przeznaczenia całkowita pamięć będzie wynosić 5 GB * 2. Więcej szczegółów dotyczących pamięci dla każdej warstwy można znaleźć w dokumentacji warstwy cenowej.

Pamięć podstawowa wskazuje zmienne pamięci, takie jak query_cache_size i innodb_buffer_pool_size, które program MySQL zainicjuje i przydziela na początku serwera. Pamięć na połączenie, na przykład sort_buffer_size i join_buffer_size, jest pamięcią przydzieloną tylko wtedy, gdy zapytanie go potrzebuje.

Tworzenie użytkowników niebędących administratorami

Utwórz użytkowników niebędących administratorami dla każdej bazy danych. Zazwyczaj nazwy użytkowników są identyfikowane jako nazwy baz danych.

Resetowanie hasła

Hasło dla serwera MySQL można zresetować przy użyciu witryny Azure Portal.

Zresetowanie hasła serwera dla produkcyjnej bazy danych może spowodować wyłączenie aplikacji. Dobrym rozwiązaniem jest zresetowanie hasła dla obciążeń produkcyjnych poza godzinami szczytu, aby zminimalizować wpływ na użytkowników aplikacji.

Wydajność i odporność

Poniżej przedstawiono kilka narzędzi i rozwiązań, które ułatwiają debugowanie problemów z wydajnością aplikacji.

Włączanie dzienników wolnych zapytań w celu identyfikowania problemów z wydajnością

Dzienniki wolnych zapytań i dzienniki inspekcji można włączyć na serwerze. Analizowanie dzienników wolnych zapytań może pomóc w zidentyfikowaniu wąskich gardeł wydajności na potrzeby rozwiązywania problemów.

Dzienniki inspekcji są również dostępne za pośrednictwem dzienników Diagnostyka Azure w dziennikach usługi Azure Monitor, usłudze Azure Event Hubs i kontach magazynu. Zobacz Jak rozwiązywać problemy z wydajnością zapytań.

Użycie buforowania połączeń

Zarządzanie połączeniami bazy danych może mieć znaczący wpływ na wydajność aplikacji jako całości. Aby zoptymalizować wydajność, należy zmniejszyć liczbę nawiązań połączeń oraz czas nawiązywania połączeń w kluczowych ścieżkach kodu. Użyj buforowania połączeń, aby nawiązać połączenie z usługą Azure Database for MySQL, aby zwiększyć odporność i wydajność.

Aby efektywnie zarządzać połączeniami, możesz użyć programu puli połączeń ProxySQL . Użycie modułu puli połączeń może zmniejszyć bezczynne połączenia i ponownie użyć istniejących połączeń, co pomaga uniknąć problemów. Aby dowiedzieć się więcej, zobacz Jak skonfigurować serwer ProxySQL .

Logika ponawiania prób umożliwiająca obsługę błędów przejściowych

Aplikacja może napotkać błędy przejściowe, w których połączenia z bazą danych są przerywane lub sporadycznie utracone. W takich sytuacjach serwer jest uruchomiony po jednym do dwóch ponownych prób w ciągu od 5 do 10 sekund.

Dobrym rozwiązaniem jest odczekanie 5 sekund przed pierwszym ponowieniem próby. Następnie wykonaj każdą ponowną próbę, stopniowo zwiększając czas oczekiwania do 60 sekund. Ogranicz maksymalną liczbę ponownych prób, w którym momencie aplikacja uzna, że operacja nie powiodła się, aby można było dokładniej zbadać tę operację. Aby dowiedzieć się więcej, zobacz Jak rozwiązywać problemy z błędami połączenia.

Włączanie replikacji odczytu w celu ograniczenia trybu failover

W przypadku scenariuszy trybu failover można użyć replikacji typu data-in. Podczas korzystania z replik do odczytu nie odbywa się automatyczne przełączanie w tryb failover między serwerami źródłowymi i replikami.

Zauważysz opóźnienie między źródłem a repliką, ponieważ replikacja jest asynchroniczna. Opóźnienie sieci może mieć wpływ na wiele czynników, takich jak rozmiar obciążenia uruchomionego na serwerze źródłowym i opóźnienie między centrami danych. W większości przypadków opóźnienie repliki waha się od kilku sekund do kilku minut.

Wdrażanie bazy danych

Konfigurowanie zadania usługi Azure Database for MySQL w potoku wdrażania ciągłej integracji/ciągłego wdrażania

Czasami należy wdrożyć zmiany w bazie danych. W takich przypadkach można użyć ciągłej integracji (CI) i ciągłego dostarczania (CD) za pośrednictwem usługi Azure Pipelines i użyć zadania dla serwera MySQL, aby zaktualizować bazę danych, uruchamiając na nim skrypt niestandardowy.

Używanie efektywnego procesu ręcznego wdrażania bazy danych

Podczas ręcznego wdrażania bazy danych wykonaj następujące kroki, aby zminimalizować przestoje lub zmniejszyć ryzyko niepowodzenia wdrożenia:

  1. Utwórz kopię produkcyjnej bazy danych w nowej bazie danych przy użyciu narzędzia mysqldump lub MySQL Workbench.
  2. Zaktualizuj nową bazę danych przy użyciu nowych zmian schematu lub aktualizacji wymaganych dla bazy danych.
  3. Umieść produkcyjną bazę danych w stanie tylko do odczytu. Byłoby to najlepsze, jeśli nie masz operacji zapisu w produkcyjnej bazie danych, dopóki wdrożenie nie zostanie ukończone.
  4. Przetestuj aplikację przy użyciu nowo zaktualizowanej bazy danych z kroku 1.
  5. Wdróż zmiany aplikacji i upewnij się, że aplikacja korzysta teraz z nowej bazy danych z najnowszymi aktualizacjami.
  6. Zachowaj starą produkcyjną bazę danych, aby wycofać zmiany. Następnie możesz ocenić usunięcie starej produkcyjnej bazy danych lub wyeksportować ją w usłudze Azure Storage w razie potrzeby.

Uwaga

Jeśli aplikacja jest jak aplikacja do handlu elektronicznego i nie możesz umieścić jej w stanie tylko do odczytu, wdróż zmiany bezpośrednio w produkcyjnej bazie danych po utworzeniu kopii zapasowej. Te zmiany powinny wystąpić w godzinach poza godzinami szczytu z niskim ruchem do aplikacji, aby zminimalizować wpływ, ponieważ niektórzy użytkownicy mogą napotkać nieudane żądania.

Upewnij się, że kod aplikacji obsługuje również wszelkie żądania, które zakończyły się niepowodzeniem.

Użyj metryk natywnych mySQL, aby sprawdzić, czy obciążenie przekracza rozmiary tabeli tymczasowej w pamięci

W przypadku obciążenia z dużym obciążeniem odczytu zapytania względem serwera MySQL mogą przekraczać tymczasowe rozmiary tabel w pamięci. Obciążenie z dużym obciążeniem odczytu może spowodować przełączenie serwera na zapisywanie tabel tymczasowych na dysku, co wpływa na wydajność aplikacji. Aby ustalić, czy serwer zapisuje na dysku w wyniku przekroczenia tymczasowego rozmiaru tabeli, zapoznaj się z następującymi metrykami:

show global status like 'created_tmp_disk_tables';
show global status like 'created_tmp_tables';

created_tmp_disk_tables Metryka wskazuje, ile tabel zostało utworzonych na dysku. Biorąc pod uwagę obciążenie, metryka informuje, created_tmp_table ile tabel tymczasowych należy utworzyć w pamięci. Aby określić, czy określone zapytanie używa tabel tymczasowych, uruchom instrukcję EXPLAIN w zapytaniu. Szczegóły w kolumnie extra wskazują Using temporary , czy zapytanie jest uruchamiane przy użyciu tabel tymczasowych.

Aby obliczyć procent obciążenia przy użyciu zapytań rozlających się na dyski, użyj wartości metryk w następującej formule:

(created_tmp_disk_tables / (created_tmp_disk_tables + created_tmp_tables)) * 100

W idealnym przypadku ta wartość procentowa powinna być mniejsza niż 25%. Jeśli wartość procentowa wynosi 25% lub większa, sugerujemy zmodyfikowanie dwóch parametrów serwera, tmp_table_size i max_heap_table_size.

Schemat bazy danych i zapytania

Poniżej przedstawiono kilka wskazówek, które należy zapamiętać podczas tworzenia schematu i zapytań bazy danych.

Użyj poprawnego typu danych dla kolumn tabeli

Użycie poprawnego typu danych na podstawie typu danych, które chcesz przechowywać, może zoptymalizować magazyn i zmniejszyć błędy spowodowane nieprawidłowymi typami danych.

Korzystanie z indeksów

Aby uniknąć wolnych zapytań, można użyć indeksów. Indeksy mogą pomóc szybko znaleźć wiersze z określonymi kolumnami. Zobacz How to use indexes in MySQL (Jak używać indeksów w programie MySQL).

Używanie funkcji EXPLAIN dla zapytań SELECT

Użyj instrukcji EXPLAIN , aby uzyskać szczegółowe informacje o tym, co robi program MySQL, aby uruchomić zapytanie. Może to pomóc w wykrywaniu wąskich gardeł lub problemów z zapytaniem. Zobacz How to use EXPLAIN to profile query performance (Jak używać funkcji WYJAŚNIj do profilowania wydajności zapytań).