Best practices for building an application with Azure Database for MySQL

A következőkre vonatkozik: Azure Database for MySQL – Egykiszolgálós Azure Database for MySQL – Rugalmas kiszolgáló

Fontos

Az önálló Azure Database for MySQL-kiszolgáló a kivonási útvonalon van. Határozottan javasoljuk, hogy frissítsen rugalmas Azure Database for MySQL-kiszolgálóra. További információ a rugalmas Azure Database for MySQL-kiszolgálóra való migrálásról: Mi történik az önálló Azure Database for MySQL-kiszolgálóval?

Az alábbiakban bemutatunk néhány ajánlott eljárást, amelyekkel felhőalapú alkalmazásokat hozhat létre az Azure Database for MySQL használatával. Ezek az ajánlott eljárások csökkenthetik az alkalmazás fejlesztési idejét.

Alkalmazás- és adatbázis-erőforrások konfigurálása

Az alkalmazás és az adatbázis megőrzése ugyanabban a régióban

Győződjön meg arról, hogy minden függőség ugyanabban a régióban található az alkalmazás Azure-ban való üzembe helyezésekor. A példányok régiók vagy rendelkezésre állási zónák közötti terjesztése hálózati késést okoz, ami befolyásolhatja az alkalmazás általános teljesítményét.

A MySQL-kiszolgáló biztonságának megőrzése

Konfigurálja a MySQL-kiszolgálót úgy, hogy biztonságos legyen, és ne legyen nyilvánosan elérhető. A kiszolgáló védelméhez használja az alábbi lehetőségek egyikét:

A biztonság érdekében mindig SSL-en keresztül kell csatlakoznia a MySQL-kiszolgálóhoz, és konfigurálnia kell a MySQL-kiszolgálót és az alkalmazást a TLS 1.2 használatára. Tekintse meg az SSL/TLS konfigurálását ismertető témakört.

Speciális hálózatkezelés használata az AKS-sel

Ha a gyorsított hálózatkezelés engedélyezve van egy virtuális gépen, kisebb a késés, csökken a jitter, és csökken a processzorhasználat a virtuális gépen. További információkért tekintse meg az Azure Kubernetes Service és az Azure Database for MySQL ajánlott eljárásait.

Kiszolgálóparaméterek finomhangolása

Írásvédett számítási feladatok esetén finomhangolhatja a kiszolgáló paramétereit, tmp_table_size és max_heap_table_size optimalizálhatja a jobb teljesítményt. A változókhoz szükséges értékek kiszámításához tekintse meg a kapcsolatonkénti és az alapmemória-értékeket. A kapcsolatonkénti memóriaparaméterek összege, kivéve tmp_table_sizea kiszolgáló teljes memóriájának alapmemóriáit.

A legnagyobb lehetséges méret tmp_table_sizemax_heap_table_sizekiszámításához használja a következő képletet:

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

Megjegyzés:

A teljes memória azt jelzi, hogy a kiszolgáló mennyi memóriával rendelkezik a kiosztott virtuális magok között. Egy Általános célú két virtuális magos Azure Database for MySQL-kiszolgálón például a teljes memória 5 GB * 2 lesz. Az egyes szintek memóriájáról a tarifacsomag dokumentációjában talál további információt.

Az alapmemória azokat a memóriaváltozókat jelzi, például query_cache_size és innodb_buffer_pool_size, amelyeket a MySQL inicializál és lefoglal a kiszolgáló indításakor. Kapcsolatonkénti memória, például sort_buffer_size és join_buffer_size, csak akkor van lefoglalva, ha egy lekérdezésnek szüksége van rá.

Nem adminfelhasználók létrehozása

Hozzon létre nem felügyelt felhasználókat az egyes adatbázisokhoz. A felhasználónevek általában adatbázisnevekként vannak azonosítva.

Új jelszó kérése

A MySQL-kiszolgáló jelszavát az Azure Portalon állíthatja vissza.

Az éles adatbázis kiszolgálói jelszavának alaphelyzetbe állítása le tudja állítani az alkalmazást. Az alkalmazás felhasználóira gyakorolt hatás minimalizálása érdekében célszerű a csúcsidőn kívül bármilyen éles számítási feladat jelszavát alaphelyzetbe állítani.

Teljesítmény és rugalmasság

Íme néhány eszköz és gyakorlat az alkalmazás teljesítményproblémáinak hibakereséséhez.

Lassú lekérdezési naplók engedélyezése a teljesítményproblémák azonosításához

Engedélyezheti a lassú lekérdezési naplókat és az auditnaplókat a kiszolgálón. A lassú lekérdezési naplók elemzése segíthet azonosítani a hibaelhárítási teljesítmény szűk keresztmetszeteit.

Az auditnaplók az Azure Diagnostics naplóin keresztül is elérhetők az Azure Monitor-naplókban, az Azure Event Hubsban és a tárfiókokban. Tekintse meg a lekérdezési teljesítmény hibáinak elhárítását ismertető témakört.

Use connection pooling

Az adatbázis-kapcsolatok kezelése jelentős hatással lehet az alkalmazás egészének teljesítményére. A teljesítmény optimalizálásához csökkentenie kell a kapcsolatok létrehozásának számát és a kulcskód elérési útjaiban a kapcsolatok létrehozásának idejét. Kapcsolatkészletezéssel csatlakozhat az Azure Database for MySQL-hez a rugalmasság és a teljesítmény javítása érdekében.

A ProxySQL kapcsolatkészletezővel hatékonyan kezelheti a kapcsolatokat. A kapcsolatkészletező használata csökkentheti az inaktív kapcsolatokat, és újra felhasználhatja a meglévő kapcsolatokat, ami segít elkerülni a problémákat. További információ: A ProxySQL beállítása.

Újrapróbálkozási logika az átmeneti hibák kezeléséhez

Előfordulhat, hogy az alkalmazás átmeneti hibákat tapasztal, amikor az adatbázishoz való kapcsolatok megszakadnak vagy időnként megszakadnak. Ilyen esetekben a kiszolgáló egy-két újrapróbálkozás után 5–10 másodperc alatt működik.

Érdemes legalább 5 másodpercet várni az első újrapróbálkozás előtt. Ezután kövesse az egyes újrapróbálkozásokat a várakozás fokozatos növelésével, akár 60 másodpercig. Korlátozza az újrapróbálkozások maximális számát, amely időpontban az alkalmazás sikertelennek tekinti a műveletet, hogy további vizsgálatot végezhet. További információkért tekintse meg a csatlakozási hibák hibaelhárítását ismertető témakört.

Olvasási replikáció engedélyezése a feladatátvételek csökkentése érdekében

Feladatátvételi forgatókönyvek esetén használhatja a data-in replikációt. Olvasási replikák használatakor nem történik automatikus feladatátvétel a forrás- és replikakiszolgálók között.

A forrás és a replika közötti eltérést észleli, mert a replikáció aszinkron. A hálózati késést számos tényező befolyásolhatja, például a forráskiszolgálón futó számítási feladat mérete és az adatközpontok közötti késés. A replika késése a legtöbb esetben néhány másodperctől néhány percig tart.

Adatbázis üzembe helyezése

Azure Database for MySQL-feladat konfigurálása a CI/CD üzembehelyezési folyamatában

Időnként módosításokat kell üzembe helyeznie az adatbázisban. Ilyen esetekben használhatja a folyamatos integrációt (CI) és a folyamatos kézbesítést (CD) az Azure Pipelineson keresztül, és a MySQL-kiszolgáló feladatával frissítheti az adatbázist egy egyéni szkript futtatásával.

Hatékony folyamat használata manuális adatbázis-üzembe helyezéshez

A manuális adatbázis-üzembe helyezés során kövesse az alábbi lépéseket az állásidő minimalizálásához vagy a sikertelen üzembe helyezés kockázatának csökkentéséhez:

  1. Készítsen másolatot egy éles adatbázisról egy új adatbázisban a mysqldump vagy a MySQL Workbench használatával.
  2. Frissítse az új adatbázist az adatbázishoz szükséges új sémamódosításokkal vagy frissítésekkel.
  3. Az éles adatbázis írásvédett állapotba helyezése. Az lenne a legjobb, ha az üzembe helyezés befejezéséig nem rendelkezne írási műveletekkel az éles adatbázisban.
  4. Tesztelje az alkalmazást az 1. lépésben frissített adatbázissal.
  5. Telepítse az alkalmazás módosításait, és győződjön meg arról, hogy az alkalmazás az új adatbázist használja a legújabb frissítésekkel.
  6. Tartsa meg a régi éles adatbázist a módosítások visszaállításához. Ezután kiértékelheti, hogy törli-e a régi éles adatbázist, vagy szükség esetén exportálja azt az Azure Storage-ba.

Megjegyzés:

Ha az alkalmazás olyan, mint egy e-kereskedelmi alkalmazás, és nem tudja írásvédett állapotba helyezni, telepítse a módosításokat közvetlenül az éles adatbázisban a biztonsági mentés elvégzése után. Ezeknek a módosításoknak csúcsidőn kívül kell történniük, és alacsony az alkalmazás felé irányuló forgalom, hogy minimálisra csökkenjen a hatás, mert egyes felhasználók sikertelen kéréseket tapasztalhatnak.

Győződjön meg arról, hogy az alkalmazáskód a sikertelen kéréseket is kezeli.

Natív MySQL-metrikák használatával állapítsa meg, hogy a számítási feladat túllépi-e a memórián belüli ideiglenes táblaméreteket

Olvasási terhelés esetén előfordulhat, hogy a MySQL-kiszolgálóra irányuló lekérdezések túllépik a memóriabeli ideiglenes táblaméreteket. Az írásvédett számítási feladatok miatt a kiszolgáló ideiglenes táblák lemezre írására válthat, ami hatással van az alkalmazás teljesítményére. Annak megállapításához, hogy a kiszolgáló lemezre ír-e az ideiglenes táblaméret túllépése miatt, tekintse meg a következő metrikákat:

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

A created_tmp_disk_tables metrika azt jelzi, hogy hány tábla lett létrehozva a lemezen. A számítási feladat alapján a created_tmp_table metrika azt jelzi, hogy hány ideiglenes táblát kell formázni a memóriában. Annak megállapításához, hogy egy adott lekérdezés ideiglenes táblákat használ-e, futtassa a EXPLAIN utasítást a lekérdezésen. Az oszlopban lévő extra részletek azt jelzik Using temporary , hogy a lekérdezés ideiglenes táblák használatával fut-e.

Ha ki szeretné számítani a számítási feladatok százalékos arányát a lemezekre kiömlő lekérdezésekkel, használja a metrikaértékeket a következő képletben:

(created_tmp_disk_tables / (created_tmp_disk_tables + created_tmp_tables)) * 100

Ideális esetben ennek a százaléknak kevesebbnek kell lennie, mint 25%. Ha a százalékos érték 25% vagy nagyobb, javasoljuk, hogy módosítsa két kiszolgálóparamétert, tmp_table_size és max_heap_table_size.

Adatbázisséma és lekérdezések

Az alábbiakban néhány tippet talál az adatbázisséma és -lekérdezések létrehozásakor.

A táblázatoszlopok megfelelő adattípusának használata

A tárolni kívánt adatok típusától függően a megfelelő adattípus használata optimalizálhatja a tárolást, és csökkentheti a helytelen adattípusok miatti hibákat.

Indexek használata

A lassú lekérdezések elkerülése érdekében indexeket használhat. Az indexek segítségével gyorsan megtalálhatja az adott oszlopokat tartalmazó sorokat. Lásd : Indexek használata a MySQL-ben.

A EXPLAIN használata a Standard kiadás LECT-lekérdezésekhez

EXPLAIN Az utasítás segítségével betekintést nyerhet abba, hogy a MySQL mit tesz a lekérdezés futtatásához. Segíthet észlelni a lekérdezés szűk keresztmetszeteit vagy problémáit. Lásd : A EXPLAIN használata a lekérdezési teljesítmény profilkészítéséhez.