Serverparametrar i Azure Database for MySQL – flexibel server
GÄLLER FÖR: Azure Database for MySQL – flexibel server
Den här artikeln innehåller överväganden och riktlinjer för att konfigurera serverparametrar i Azure Database for MySQL – flexibel server.
Kommentar
Den här artikeln innehåller referenser till termen slave, som Microsoft inte längre använder. När termen tas bort från programvaran tar vi bort den från den här artikeln.
Vad är serverparametrar?
MySQL-motorn innehåller många serverparametrar (kallas även variabler) som du kan använda för att konfigurera och finjustera motorbeteende. Vissa parametrar kan anges dynamiskt under körning. Andra är statiska och kräver en omstart av servern när du har angett dem.
I Azure Database for MySQL – flexibel server kan du ändra värdet för olika MySQL-serverparametrar med hjälp av Azure Portal och Azure CLI för att matcha dina arbetsbelastningsbehov.
Konfigurerbara serverparametrar
Du kan hantera konfigurationen av en flexibel Azure Database for MySQL-server med hjälp av serverparametrar. Serverparametrarna konfigureras med standardvärdena och rekommenderade värden när du skapar servern. Fönstret Serverparametrar i Azure Portal visar både de modifierbara och icke-modifierbara parametrarna. De icke-modifierbara serverparametrarna är inte tillgängliga.
Listan över serverparametrar som stöds växer ständigt. Du kan använda Azure Portal för att regelbundet visa den fullständiga listan över serverparametrar och konfigurera värdena.
Om du ändrar en statisk serverparameter med hjälp av portalen måste du starta om servern för att ändringarna ska börja gälla. Om du använder automationsskript (via verktyg som Azure Resource Manager-mallar, Terraform eller Azure CLI) bör skriptet ha en etablering för att starta om tjänsten så att inställningarna börjar gälla, även om du ändrar konfigurationen som en del av skapandet.
Om du vill ändra en icke-modifierad serverparameter för din miljö kan du publicera en idé via communityns feedback eller rösta om feedbacken redan finns (vilket kan hjälpa oss att prioritera).
I följande avsnitt beskrivs gränserna för de vanliga serverparametrarna. Beräkningsnivån och storleken (virtuella kärnor) på servern avgör gränserna.
lower_case_table_names
För MySQL version 5.7 är 1
standardvärdet lower_case_table_names
för i Azure Database for MySQL – flexibel server. Även om det är möjligt att ändra värdet som stöds till 2
, är det inte tillåtet att återgå från 2
tillbaka till 1
. Om du vill ha hjälp med att ändra standardvärdet skapar du en supportbegäran.
För MySQL version 8.0+ kan du bara konfigurera lower_case_table_names
när du initierar servern. Läs mer. lower_case_table_names
Det är förbjudet att ändra inställningen när servern har initierats.
Värden som stöds för MySQL version 8.0 är 1
och 2
i Azure Database for MySQL – flexibel server. Standardvärdet är 1
. Om du vill ha hjälp med att ändra standardvärdet när servern skapas skapar du ett supportärende.
innodb_tmpdir
Du använder parametern innodb_tmpdir i Azure Database for MySQL – Flexibel server för att definiera katalogen för temporära sorteringsfiler som skapas under onlineåtgärder ALTER TABLE
som återskapas.
Standardvärdet innodb_tmpdir
för är /mnt/temp
. Den här platsen motsvarar den tillfälliga lagringen (SSD) och är tillgänglig i gibibyte (GiB) med varje serverberäkningsstorlek. Den här platsen är perfekt för åtgärder som inte kräver mycket utrymme.
Om du behöver mer utrymme kan du ange innodb_tmpdir
till /app/work/tmpdir
. Den här inställningen använder den tillgängliga lagringskapaciteten på din flexibla Azure Database for MySQL-server. Den här inställningen kan vara användbar för större åtgärder som kräver mer tillfällig lagring.
Tänk på att användningen resulterar /app/work/tmpdir
i långsammare prestanda jämfört med standardvärdet för tillfällig lagring (SSD). /mnt/temp
Gör valet baserat på de specifika kraven för åtgärderna.
Den information som tillhandahålls gäller för innodb_tmpdir
parametrarna innodb_temp_tablespaces_dir, tmpdir och slave_load_tmpdir där:
- Standardvärdet
/mnt/temp
är vanligt. - Den alternativa katalogen
/app/work/tmpdir
är tillgänglig för att konfigurera ökad tillfällig lagring, med en kompromiss i prestanda baserat på specifika driftskrav.
log_bin_trust_function_creators
I Azure Database for MySQL – flexibel server är binära loggar alltid aktiverade (det vill: log_bin
är inställt på ON
). Parametern log_bin_trust_function_creators
är som standard inställd ON
på flexibla servrar.
Det binära loggningsformatet är alltid ROW
, och anslutningar till servern använder alltid radbaserad binär loggning. Med radbaserad binär loggning finns inte säkerhetsproblem och binär loggning kan inte brytas, så du kan på ett säkert sätt tillåta log_bin_trust_function_creators
att kvar som ON
.
Om log_bin_trust_function_creators
är inställt på OFF
och du försöker skapa utlösare kan du få fel som liknar: "Du har inte superprivilegier och binär loggning är aktiverad (du kanske vill använda den mindre säkra log_bin_trust_function_creators
variabeln)."
innodb_buffer_pool_size
Mer information om parametern finns i innodb_buffer_pool_size
MySQL-dokumentationen.
Den fysiska minnesstorleken i följande tabell representerar det tillgängliga ramminnet (random-access memory), i gigabyte (GB) på din flexibla Azure Database for MySQL-server.
Prisnivå | Virtuella kärnor | Storlek på fysiskt minne (GB) | Standardvärde (byte) | Minsta värde (byte) | Maxvärde (byte) |
---|---|---|---|---|---|
Burstbar (B1s) | 1 | 1 | 134217728 | 33554432 | 268435456 |
Burstbar (B1ms) | 1 | 2 | 536870912 | 134217728 | 1073741824 |
Burstbar (B2s) | 2 | 4 | 2147483648 | 134217728 | 2147483648 |
Burstbar (B2ms) | 2 | 8 | 4294967296 | 134217728 | 5368709120 |
Burstbar | 4 | 16 | 12884901888 | 134217728 | 12884901888 |
Burstbar | 8 | 32 | 25769803776 | 134217728 | 25769803776 |
Burstbar | 12 | 48 | 51539607552 | 134217728 | 51539607552 |
Burstbar | 16 | 64 | 2147483648 | 134217728 | 2147483648 |
Burstbar | 20 | 80 | 64424509440 | 134217728 | 64424509440 |
Generell användning | 2 | 8 | 4294967296 | 134217728 | 5368709120 |
Generell användning | 4 | 16 | 12884901888 | 134217728 | 12884901888 |
Generell användning | 8 | 32 | 25769803776 | 134217728 | 25769803776 |
Generell användning | 16 | 64 | 51539607552 | 134217728 | 51539607552 |
Generell användning | 32 | 128 | 103079215104 | 134217728 | 103079215104 |
Generell användning | 48 | 192 | 154618822656 | 134217728 | 154618822656 |
Generell användning | 64 | 256 | 206158430208 | 134217728 | 206158430208 |
Affärskritisk | 2 | 16 | 12884901888 | 134217728 | 12884901888 |
Affärskritisk | 4 | 32 | 25769803776 | 134217728 | 25769803776 |
Affärskritisk | 8 | 64 | 51539607552 | 134217728 | 51539607552 |
Affärskritisk | 16 | 128 | 103079215104 | 134217728 | 103079215104 |
Affärskritisk | 20 | 160 | 128849018880 | 134217728 | 128849018880 |
Affärskritisk | 32 | 256 | 206158430208 | 134217728 | 206158430208 |
Affärskritisk | 48 | 384 | 309237645312 | 134217728 | 309237645312 |
Affärskritisk | 64 | 504 | 405874409472 | 134217728 | 405874409472 |
innodb_file_per_table
MySQL lagrar InnoDB-tabellen i olika tabellområden baserat på den konfiguration som du angav när tabellen skapades. Systemtabellområdet är lagringsområdet för InnoDB-dataordlistan. En tabellyta för fil per tabell innehåller data och index för en enda InnoDB-tabell, och den lagras i filsystemet i sin egen datafil. Parametern innodb_file_per_table server styr det här beteendet.
Inställningen innodb_file_per_table
gör att OFF
InnoDB skapar tabeller i systemtabellområdet. Annars skapar InnoDB tabeller i tabellutrymmen för fil per tabell.
Azure Database for MySQL – Flexibel server stöder högst 8 terabyte (TB) i en enda datafil. Om databasstorleken är större än 8 TB bör du skapa tabellen i innodb_file_per_table
tabellområdet. Om du har en tabellstorlek som är större än 8 TB bör du använda partitionstabellen.
innodb_log_file_size
Värdet för innodb_log_file_size är storleken (i byte) för varje loggfil i en logggrupp. Loggfilernas sammanlagda storlek (innodb_log_file_size * innodb_log_files_in_group) får inte överskrida ett maximalt värde som är något mindre än 512 GB.
En större loggfilstorlek är bättre för prestanda, men nackdelen är att återställningstiden efter en krasch är hög. Du måste balansera återställningstiden för den sällsynta händelsen av en krasch jämfört med att maximera dataflödet under hög belastning. En större loggfilstorlek kan också resultera i längre omstartstider.
Du kan konfigurera innodb_log_size
till 256 MEGABYTE (MB), 512 MB, 1 GB eller 2 GB för Azure Database for MySQL – flexibel server. Parametern är statisk och kräver en omstart.
Kommentar
Om du har ändrat parametern innodb_log_file_size
från standardvärdet kontrollerar du om värdet show global status like 'innodb_buffer_pool_pages_dirty'
för stannar kvar i 0
30 sekunder för att undvika omstartsfördröjning.
max_connections
Serverns minnesstorlek avgör värdet max_connections
för . Den fysiska minnesstorleken i följande tabell representerar det tillgängliga RAM-minnet i gigabyte på din flexibla Azure Database for MySQL-server.
Prisnivå | Virtuella kärnor | Storlek på fysiskt minne (GB) | Standardvärde | Minvärde | Maxvärde |
---|---|---|---|---|---|
Burstbar (B1s) | 1 | 1 | 85 | 10 | 171 |
Burstbar (B1ms) | 1 | 2 | 171 | 10 | 341 |
Burstbar (B2s) | 2 | 4 | 341 | 10 | 683 |
Burstbar (B2ms) | 2 | 4 | 683 | 10 | 1365 |
Burstbar | 4 | 16 | 1365 | 10 | 2731 |
Burstbar | 8 | 32 | 2731 | 10 | 5461 |
Burstbar | 12 | 48 | 4097 | 10 | 8193 |
Burstbar | 16 | 64 | 5461 | 10 | 10923 |
Burstbar | 20 | 80 | 6827 | 10 | 13653 |
Generell användning | 2 | 8 | 683 | 10 | 1365 |
Generell användning | 4 | 16 | 1365 | 10 | 2731 |
Generell användning | 8 | 32 | 2731 | 10 | 5461 |
Generell användning | 16 | 64 | 5461 | 10 | 10923 |
Generell användning | 32 | 128 | 10923 | 10 | 21845 |
Generell användning | 48 | 192 | 16384 | 10 | 32768 |
Generell användning | 64 | 256 | 21845 | 10 | 43691 |
Affärskritisk | 2 | 16 | 1365 | 10 | 2731 |
Affärskritisk | 4 | 32 | 2731 | 10 | 5461 |
Affärskritisk | 8 | 64 | 5461 | 10 | 10923 |
Affärskritisk | 16 | 128 | 10923 | 10 | 21845 |
Affärskritisk | 20 | 160 | 13653 | 10 | 27306 |
Affärskritisk | 32 | 256 | 21845 | 10 | 43691 |
Affärskritisk | 48 | 384 | 32768 | 10 | 65536 |
Affärskritisk | 64 | 504 | 43008 | 10 | 86016 |
När anslutningar överskrider gränsen kan du få följande fel: "FEL 1040 (08004): För många anslutningar."
Det tar tid att skapa nya klientanslutningar till MySQL. När du har upprättat dessa anslutningar upptar de databasresurser, även när de är inaktiva. De flesta program begär många kortvariga anslutningar, vilket förvärrar den här situationen. Resultatet är färre resurser som är tillgängliga för din faktiska arbetsbelastning, vilket leder till sämre prestanda.
En anslutningspool som minskar inaktiva anslutningar och återanvänder befintliga anslutningar hjälper dig att undvika det här problemet. För bästa möjliga upplevelse rekommenderar vi att du använder en anslutningspool som ProxySQL för att effektivt hantera anslutningar. Mer information om hur du konfigurerar ProxySQL finns i det här blogginlägget.
Kommentar
ProxySQL är ett communityverktyg med öppen källkod. Microsoft stöder det på bästa sätt. Kontakta supporten för ProxySQL-produkten för att få produktionsstöd med auktoritativ vägledning.
innodb_strict_mode
Om du får ett felmeddelande som liknar "Radstorleken är för stor (> 8126)" kanske du vill inaktivera serverparametern innodb_strict_mode
. Det går inte att ändra den här parametern globalt på servernivå eftersom om raddatastorleken är större än 8 000 trunkeras data utan fel. Den här trunkeringen kan leda till potentiell dataförlust. Vi rekommenderar att du ändrar schemat så att det passar sidstorleksgränsen.
Du kan ange den här parametern på sessionsnivå med hjälp init_connect
av . Mer information finns i Ange icke-modifierbara serverparametrar.
Kommentar
Om du har en skrivskyddade replikserver kommer replikeringen att OFF
avbrytas om du anger innodb_strict_mode
på sessionsnivå på en källserver. Vi rekommenderar att du behåller parametern inställd på ON
om du har läsrepliker.
time_zone
Vid den första distributionen innehåller en Azure Database for MySQL – flexibel server-instans systemtabeller för tidszonsinformation, men dessa tabeller är inte ifyllda. Du kan fylla i tidszonstabellerna genom att anropa den mysql.az_load_timezone
lagrade proceduren från ett verktyg som MySQL-kommandoraden eller MySQL Workbench. Du kan också anropa den lagrade proceduren och ange tidszoner på global nivå eller sessionsnivå med hjälp av Azure Portal eller Azure CLI.
binlog_expire_logs_seconds
I Azure Database for MySQL – flexibel server anger parametern binlog_expire_logs_seconds
antalet sekunder som tjänsten väntar innan den binära loggfilen tas bort.
Den binära loggen innehåller händelser som beskriver databasändringar, till exempel åtgärder för att skapa tabeller eller ändringar i tabelldata. Den binära loggen innehåller också händelser för instruktioner som potentiellt kan ha gjort ändringar. Den binära loggen används huvudsakligen för två syften: replikering och dataåterställningsåtgärder.
Vanligtvis tas de binära loggarna bort så snart referensen är fri från tjänsten, säkerhetskopieringen eller replikuppsättningen. Om det finns flera repliker väntar de binära loggarna på att den långsammaste repliken ska läsa ändringarna innan de tas bort.
Om du vill spara binära loggar under en längre tid kan du konfigurera parametern binlog_expire_logs_seconds
. Om binlog_expire_logs_seconds
är inställt på standardvärdet för 0
tas en binär logg bort så snart referensen till den frigörs. Om värdet binlog_expire_logs_seconds
för är större än 0
tas den binära loggen bort efter det konfigurerade antalet sekunder.
Azure Database for MySQL – Flexibel server hanterar hanterade funktioner, till exempel säkerhetskopiering och läsning av replikborttagning av binära filer internt. När du replikerar datautdata från Azure Database for MySQL – Flexibel server måste den här parametern anges i den primära för att undvika borttagning av binära loggar innan repliken läse från ändringarna i den primära. Om du anger binlog_expire_logs_seconds
ett högre värde tas inte de binära loggarna bort tillräckligt snart. Den fördröjningen kan leda till en ökning av lagringsfakturering.
event_scheduler
I Azure Database for MySQL – flexibel server event_scheduler
hanterar serverparametern att skapa, schemalägga och köra händelser. Parametern hanterar uppgifter som körs enligt ett schema av en särskild MySQL Event Scheduler-tråd. När parametern event_scheduler
är inställd på ON
visas Event Scheduler-tråden som en daemonprocess i utdata från SHOW PROCESSLIST
.
Du kan skapa och schemalägga händelser med hjälp av följande SQL-syntax:
CREATE EVENT <event name>
ON SCHEDULE EVERY _ MINUTE / HOUR / DAY
STARTS TIMESTAMP / CURRENT_TIMESTAMP
ENDS TIMESTAMP / CURRENT_TIMESTAMP + INTERVAL 1 MINUTE / HOUR / DAY
COMMENT '<comment>'
DO
<your statement>;
Mer information om hur du skapar en händelse finns i följande dokumentation om Event Scheduler i referenshandboken för MySQL:
Konfigurera event_scheduler-serverparametern
Följande scenario illustrerar ett sätt att använda parametern event_scheduler
i Azure Database for MySQL – flexibel server.
För att demonstrera scenariot bör du överväga följande exempel på en enkel tabell:
mysql> describe tab1;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| CreatedAt | timestamp | YES | | NULL | |
| CreatedBy | varchar(16) | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.23 sec)
Utför följande steg för att konfigurera event_scheduler
serverparametern i Azure Database for MySQL – flexibel server:
I Azure Portal går du till din Azure Database for MySQL – flexibel serverinstans. Under Inställningar väljer du Serverparametrar.
I fönstret Serverparametrar söker
event_scheduler
du efter . I listrutan VÄRDE väljer du PÅ och sedan Spara.Kommentar
Distributionen av den dynamiska konfigurationsändringen till serverparametern kräver ingen omstart.
Om du vill skapa en händelse ansluter du till Azure Database for MySQL – flexibel serverinstans och kör följande SQL-kommando:
CREATE EVENT test_event_01 ON SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR COMMENT 'Inserting record into the table tab1 with current timestamp' DO INSERT INTO tab1(id,createdAt,createdBy) VALUES('',NOW(),CURRENT_USER());
Om du vill visa information om Event Scheduler kör du följande SQL-instruktion:
SHOW EVENTS;
Följande utdata visas:
mysql> show events; +-----+---------------+-------------+-----------+-----------+------------+----------------+----------------+---------------------+---------------------+---------+------------+----------------------+----------------------+--------------------+ | Db | Name | Definer | Time zone | Type | Execute at | Interval value | Interval field | Starts | Ends | Status | Originator | character_set_client | collation_connection | Database Collation | +-----+---------------+-------------+-----------+-----------+------------+----------------+----------------+---------------------+---------------------+---------+------------+----------------------+----------------------+--------------------+ | db1 | test_event_01 | azureuser@% | SYSTEM | RECURRING | NULL | 1 | MINUTE | 2023-04-05 14:47:04 | 2023-04-05 15:47:04 | ENABLED | 3221153808 | latin1 | latin1_swedish_ci | latin1_swedish_ci | +-----+---------------+-------------+-----------+-----------+------------+----------------+----------------+---------------------+---------------------+---------+------------+----------------------+----------------------+--------------------+ 1 row in set (0.23 sec)
Efter några minuter frågar du raderna från tabellen för att börja visa raderna som infogas varje minut enligt den
event_scheduler
parameter som du har konfigurerat:mysql> select * from tab1; +----+---------------------+-------------+ | id | CreatedAt | CreatedBy | +----+---------------------+-------------+ | 1 | 2023-04-05 14:47:04 | azureuser@% | | 2 | 2023-04-05 14:48:04 | azureuser@% | | 3 | 2023-04-05 14:49:04 | azureuser@% | | 4 | 2023-04-05 14:50:04 | azureuser@% | +----+---------------------+-------------+ 4 rows in set (0.23 sec)
Efter en timme kör du en
select
instruktion i tabellen för att visa det fullständiga resultatet av värdena som infogas i tabellen varje minut i en timme (vilketevent_scheduler
är konfigurerat i det här fallet):mysql> select * from tab1; +----+---------------------+-------------+ | id | CreatedAt | CreatedBy | +----+---------------------+-------------+ | 1 | 2023-04-05 14:47:04 | azureuser@% | | 2 | 2023-04-05 14:48:04 | azureuser@% | | 3 | 2023-04-05 14:49:04 | azureuser@% | | 4 | 2023-04-05 14:50:04 | azureuser@% | | 5 | 2023-04-05 14:51:04 | azureuser@% | | 6 | 2023-04-05 14:52:04 | azureuser@% | ..< 50 lines trimmed to compact output >.. | 56 | 2023-04-05 15:42:04 | azureuser@% | | 57 | 2023-04-05 15:43:04 | azureuser@% | | 58 | 2023-04-05 15:44:04 | azureuser@% | | 59 | 2023-04-05 15:45:04 | azureuser@% | | 60 | 2023-04-05 15:46:04 | azureuser@% | | 61 | 2023-04-05 15:47:04 | azureuser@% | +----+---------------------+-------------+ 61 rows in set (0.23 sec)
Andra scenarier
Du kan konfigurera en händelse baserat på kraven i ditt specifika scenario. Några exempel på schemaläggning av SQL-instruktioner som ska köras med olika tidsintervall följer.
Så här kör du en SQL-instruktion nu och upprepar en gång per dag utan slut:
CREATE EVENT <event name>
ON SCHEDULE
EVERY 1 DAY
STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
COMMENT 'Comment'
DO
<your statement>;
Så här kör du en SQL-instruktion varje timme utan slut:
CREATE EVENT <event name>
ON SCHEDULE
EVERY 1 HOUR
COMMENT 'Comment'
DO
<your statement>;
Så här kör du en SQL-instruktion varje dag utan slut:
CREATE EVENT <event name>
ON SCHEDULE
EVERY 1 DAY
STARTS str_to_date( date_format(now(), '%Y%m%d 0200'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
COMMENT 'Comment'
DO
<your statement>;
Begränsningar
För servrar med hög tillgänglighet konfigurerad är det möjligt att event_scheduler
serverparametern är inställd på OFF
. Om detta inträffar, när redundansväxlingen är klar, konfigurerar du parametern för att ange värdet till ON
.
Icke-modifierbara serverparametrar
Fönstret Serverparametrar i Azure Portal visar både de modifierbara och icke-modifierbara serverparametrarna. De icke-modifierbara serverparametrarna är inte tillgängliga. Du kan konfigurera en icke-modifierad serverparameter på sessionsnivå med hjälp init_connect
av i Azure Portal eller Azure CLI.