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_size
a kiszolgáló teljes memóriájának alapmemóriáit.
A legnagyobb lehetséges méret tmp_table_size
max_heap_table_size
kiszá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:
- Készítsen másolatot egy éles adatbázisról egy új adatbázisban a mysqldump vagy a MySQL Workbench használatával.
- Frissítse az új adatbázist az adatbázishoz szükséges új sémamódosításokkal vagy frissítésekkel.
- 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.
- Tesztelje az alkalmazást az 1. lépésben frissített adatbázissal.
- 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.
- 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.