sql >> Database teknologi >  >> RDS >> Mysql

Arbejde med MyISAM i MySQL

MyISAM er en af ​​de mest populære lagringsmotorer i MySQL. MyISAM er ofte det andet valg efter InnoDB - i dette blogindlæg vil vi forsøge at finde ud af, hvordan man bedst arbejder med denne motor.

Hvad er MyISAM?

MyISAM er en af ​​MySQLs lagringsmotorer. MyISAM er baseret på ISAM (Indexed Sequential Access Method), en indekseringsalgoritme udviklet af IBM, der gør det muligt at hente information fra store datasæt på en hurtig måde. Den klarer sig dog ikke særlig godt, når den samtidig læser fra og skriver til ét bord, på grund af dens bordlåsning. Det understøtter heller ikke transaktioner.

For nogle MySQL-ingeniører er denne motor det mest populære valg efter InnoDB:MyISAM-lagringsmotoren var den eneste lagringsmotor leveret af MySQL i 2005 og var tilgængelig til brug i mere end 20 år. MyISAM var standardlagerenheden for MySQL op til version 5.5.

MyISAM indefra

En illustration af, hvordan MyISAM fungerer indefra, er ikke inden for rammerne af denne blog, men vi kan give dig de indstillinger, der hjælper dig med at optimere motorens ydeevne:

  • Myisam_sort_buffer_size definerer den buffer, der tildeles, når indekset sorteres ved at køre REPAIR, CREATE INDEX eller ALTER TABLE-forespørgsler.
  • Key_buffer_size definerer størrelsen af ​​bufferen, der bruges til indeksblokke på tværs af MyISAM-tabeller. Forøgelse af denne parameter kan føre til bedre indekshåndtering.
  • Sort_buffer_size beskriver størrelsen af ​​en buffer, der er allokeret til tråde, der skal udføre sorteringsoperationer.
  • Read_buffer_size beskriver størrelsen af ​​en buffer, der er allokeret til tråde, der udfører sekventielle scanningsoperationer.
  • Write_buffer_size beskriver størrelsen af ​​skrivebufferen.

Disse fire parametre er vigtige, men selvom de er vigtige, bør du også holde øje med variablen key_buffer_size. Variablen key_buffer_size bestemmer størrelsen af ​​indeksbufferne i hukommelsen - tænk på den som innodb_buffer_pool_size-modstykket, men for MyISAM. Hvis dine servere primært består af MyISAM-tabeller, kan du allokere omkring 25 % eller mere af den tilgængelige RAM på serveren til variablen key_buffer_size. Der er også en anden måde at bestemme, hvad værdien af ​​parameteren key_buffer_size skal være - sammenlign simpelthen key_read_requests værdien (samlet værdi af anmodninger om at læse et indeks) og key_reads værdien (værdien af ​​key_reads er antallet af anmodninger, der skulle være læse fra disk). Værdierne for disse parametre kan hentes ved at se på serverstatusvariablerne (udsend blot en VIS GLOBAL STATUS-forespørgsel på din MySQL-server). Det er også en fordel at huske på, at hvis key_reads returnerer en stor værdi, er værdien af ​​key_buffer_size sandsynligvis for lille.

MyISAM og MySQL 8.0

Hvis du spørger nogle MySQL-ingeniører, vil de sige, at MyISAM ikke længere skal bruges. Hvorfor? Nå, nogle mennesker siger, at på grund af det faktum, at da MySQL avancerede, tilføjede de størstedelen af ​​de funktioner, der tidligere kun kunne ses i MyISAM, til InnoDB, hvilket effektivt gjorde MyISAM forældet:

  • Fuldtekstindekser har været tilgængelige i InnoDB siden version 5.6.
  • Bærbare tablespaces blev tilgængelige i InnoDB siden version 5.6.
  • Rolige indekser blev tilgængelige i InnoDB siden version 5.7.
  • Sidste opdatering til tabel blev tilgængelig i InnoDB siden version 5.7.

Så, skal du stadig bruge MyISAM? Sikkert ikke. Der er dog en advarsel - husk på, at simple COUNT(*)-forespørgsler sandsynligvis vil fungere hurtigere på MyISAM, end de vil på InnoDB - MyISAM gemmer tallet i tabellens metadata, det gør InnoDB ikke.

Jeg bruger MyISAM og vil skifte til InnoDB. Hvad gør jeg?

Hvis du stadig bruger MyISAM og vil skifte til InnoDB, skal du blot konvertere alle dine tabeller til InnoDB. Det er selvfølgelig lettere sagt end gjort, men her er en simpel guide:

  1. Find ud af, hvilke tabeller i din MySQL-instans der bruger MyISAM:
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘database_name’ AND ENGINE = ‘MyISAM’;
  2. Konverter alle dine MyISAM-tabeller til InnoDB:
    ALTER TABLE `table_name` ENGINE = InnoDB;

Hvis du ikke ønsker at køre flere ALTER TABLE-sætninger efter hinanden, så overvej at sætte ALTER TABLE-sætningerne i en løkke. Det er det - du er færdig!

Oversigt

MyISAM er en af ​​de mest populære MySQL-motorer. Motoren var standard for MySQL-versioner op til 5.5. Motoren er et af de mest populære valg efter InnoDB, men den kan kaldes forældet fra og med MySQL 8.0 - MySQL har allerede sørget for, at alt, hvad der kan gøres med MyISAM, også kan gøres, når InnoDB er i brug, så på dette tidspunkt MyISAM er stort set kun nyttig, hvis du ønsker, at simple COUNT(*) forespørgsler skal være hurtigere. Sådanne forespørgsler vil være hurtigere, fordi MyISAM gemmer nummeret i tabelmetadata – det gør andre MySQL-motorer ikke.


  1. migrere data fra MS SQL til PostgreSQL?

  2. Sådan migreres en Oracle-database fra AWS EC2 til AWS RDS

  3. NullPointerException på getReadableDatabase()

  4. @BatchSize en smart eller dum brug?