Kā konfigurēt MySQL/MariaDB datubāzes, lai partijveidā konvertētu InnoDB tabulas uz MyISAM tabulām?

Datu bāzes tabulas glabāšanas dzinējs ir kā automašīnas dzinējs; dzinēja maiņa nekavējoties maina veiktspēju un raksturlielumus. Daudzi cilvēki domā, ka datu bāze ir paredzēta tikai datu glabāšanai, bet, kad jūs faktiski sākat ar to strādāt... InnoDB 转成 MyISAMTikai tad jūs atklāsiet slēptos noslēpumus, kas slēpjas aiz tā.

Kāpēc kāds vēlētos pāriet no InnoDB uz MyISAM?

Daudzos gadījumos MyISAM ir ātrāks, īpaši lietojumprogrammām ar lielu lasīšanas un nelielu rakstīšanas apjomu, piemēram, žurnālu un statistikas datubāzēm.

Tā galda līmeņa bloķēšanas mehānisms faktiski darbojas ļoti vienmērīgi zemas vienlaicīguma pakāpes gadījumā.

Turklāt MyISAM failu glabāšana ir intuitīvāka; viens .MYD Saglabāt datus, vienu .MYI Indeksu glabāšana, migrēšana un dublēšana ir ļoti ērtas.

Tomēr InnoDB transakciju un ārējās atslēgas atbalsts ir gandrīz nepieciešamība sarežģītos biznesa scenārijos.

Tāpēc pirms pārejas jums ir jānoskaidro, vai jūsu uzņēmumam šīs funkcijas tiešām ir nepieciešamas.

Galvenā komanda: ALTER TABLE

Lai konvertētu vienu tabulu no InnoDB uz MyISAM, nepieciešama tikai viena koda rindiņa:

ALTER TABLE `你的表名` ENGINE = MyISAM;

Pēc izpildes pabeigšanas tabulas krātuves dzinējs tiks pārslēgts.

Vai tas nav vienkārši?

Partijas konvertēšana: automātiska skriptu ģenerēšana

Ja jums ir desmitiem vai pat simtiem tabulu, to manuāla modificēšana noteikti nav praktiska.

Šajā brīdī vienu vaicājumu var izmantot, lai automātiski ģenerētu partijas konvertēšanas priekšrakstus:

SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE = MyISAM;') 
FROM information_schema.tables 
WHERE table_schema = '你的数据库名' AND engine = 'InnoDB';

Pēc palaišanas tas izvadīs daudz... ALTER TABLE ... Paziņojums.

Kopējiet šos paziņojumus un izpildiet tos visus uzreiz, lai pabeigtu partijas konvertēšanu vienā piegājienā.

To sauc par "automatizētu partijas konvertēšanu".

Riska novērtējums pirms pārveidošanas

Kā konfigurēt MySQL/MariaDB datubāzes, lai partijveidā konvertētu InnoDB tabulas uz MyISAM tabulām?

Ārējās atslēgas ierobežojumi

InnoDB atbalsta ārējās atslēgas, savukārt MyISAM tās neatbalsta vispār.

Pēc konvertēšanas ārējās atslēgas ierobežojumi tiks nekavējoties atmesti.

Ja jūsu uzņēmums paļaujas uz kaskādveida dzēšanu vai atjaunināšanu, loģika pēc konvertēšanas pilnībā neizdosies.

Darījumu atbalsts

InnoDB ir transakcijas un tās tiek atbalstītas. COMMITROLLBACK.

MyISAM nav transakciju, tikai tabulas līmeņa slēdzenes.

Pēc konvertēšanas viss ar darījumu saistītais kods kļūs nederīgs, un izņēmuma gadījumā atcelšana nebūs iespējama.

Vienlaicības veiktspēja

InnoDB izmanto rindu līmeņa bloķēšanu, savukārt MyISAM izmanto tabulas līmeņa bloķēšanu.

Augstas vienlaicīguma scenārijos MyISAM bieži bloķē tabulas, radot veiktspējas problēmas.

Indeksa funkcijas

MySQL Pirms 5.6 versijas MyISAM bija savs pilna teksta indekss.

Bet iekšā MySQL Pilnteksta indeksēšana jau tiek atbalstīta MariaDB un InnoDB 5.6. un 10+ versijās.

Tāpēc, ja vien neizmantojat vecāku versiju, pilna teksta indeksēšanai nav nepieciešams pārslēgties uz MyISAM.

Labākās prakses process

  1. Rezerves dati Pirms konvertēšanas noteikti eksportējiet. .sql Faili tiek saglabāti tā, lai tos varētu atjaunot jebkurā laikā.

  2. Kontrolsaraksta struktūra Lai pārbaudītu, vai pastāv ārējā atslēga, izmantojiet šo komandu:

    SHOW CREATE TABLE `你的表名`;
    
  3. Veikt konvertēšanu Izmantojiet ALTER TABLE Alternatīvi, konvertēšanas pabeigšanai var izmantot partijas skriptus.

  4. Pārbaudiet veselības stāvokli Pēc konvertēšanas pabeigšanas palaidiet:

    CHECK TABLE `你的表名`;
    OPTIMIZE TABLE `你的表名`;
    

    Tas apstiprina, ka tabula darbojas pareizi, un atbrīvo fragmentus.

Reversās atgūšanas metode

Ja pēc konvertēšanas tiek novērota veiktspējas pasliktināšanās vai biznesa loģikas problēmas, jebkurā laikā varat atgriezties pie InnoDB:

ALTER TABLE `你的表名` ENGINE = InnoDB;

To sauc par "atgriezenisku darbību", kas sniedz jums izeju.

Citēti autoritatīvi viedokļi

Saskaņā ar Oficiālā MySQL dokumentācija Paskaidrojums:

"Ārējās atslēgas konstrukcija"aints atbalsta tikai InnoDB. Ja tabulu konvertēsiet uz MyISAM, visas ārējās atslēgas tiks ignorētas.
—— MySQL uzziņu rokasgrāmata, 14.6.6. nodaļa. Ārējo atslēgu ierobežojumi

Šis apgalvojums skaidri norāda, ka ārējās atslēgas MyISAM ir pilnīgi nederīgas.

un MariaDB oficiālā dokumentācija Tika arī uzsvērts, ka:

"MyISAM neatbalsta transakcijas. Lietojumprogrammām, kas paļaujas uz transakciju integritāti, nevajadzētu izmantot MyISAM."
——MariaDB zināšanu bāze, krātuves dzinēji

Tāpēc pirms maiņas ir jāpadomā divreiz.

Mans viedoklis un secinājums

InnoDB konvertēšana uz MyISAM ir kā luksusa automašīnas dzinēja nomaiņa ar kravas automašīnas dzinēju.

Tas var skriet, bet tas skrien pavisam citādi.

Ja jūsu uzņēmums ietver vieglus statistikas vaicājumus, MyISAM ātrums un vienkāršība varētu būt piemērotāks.

Tomēr, ja jūsu sistēma balstās uz darījumiem un ārējām atslēgām, to pārsteidzīga konvertēšana ir kā drošības spilvena noņemšana.

Tāpēc patiesā gudrība neslēpjas aklā ātruma dzīšanā, bet gan stabilitātes un veiktspējas līdzsvarošanā.

Datubāzes izvēle nosaka sistēmas būtību.

Krātuves dzinēju pārslēgšanas prasmju apgūšana ir ne tikai tehnisko spēju demonstrēšana, bet arī arhitektūras domāšanas paaugstināšana.

Ja apsverat masveida konvertēšanu, lūdzu, vispirms veiciet visaptverošu riska novērtējumu.

Vienreiz palaidiet testa vidi, lai simulētu reālus biznesa scenārijus.

Pēc tam, kad esat pārliecinājies, ka viss ir pareizi, izpildiet komandu ražošanas vidē.

Datu bāzes nav rotaļlietas; tās ir uzņēmuma datu sirds.

Un tu esi tas, kurš kontrolē savas sirds ritmu.

发表 评论

Jūsu e-pasta adrese netiks publicēta. 必填 项 已 用 * Etiķete

Rakstu katalogs
Ritiniet uz augšu