MariaDB
 sql >> Database >  >> RDS >> MariaDB

Utilizzo di Aria Storage Engine con MariaDB Server

MariaDB Server è uno dei server di database open source più popolari. È stato creato dagli sviluppatori originali di MySQL ed è diventato popolare per essere veloce, scalabile e robusto. MariaDB dispone di un ricco ecosistema di motori di archiviazione, plug-in e altri strumenti disponibili che lo rendono molto versatile per un'ampia varietà di casi d'uso.

Per quanto riguarda il motore di archiviazione MariaDB, hai diversi tipi tra cui scegliere come XtraDB, InnoDB, MyRocks, MyISAM o persino Aria. Non esiste un miglior tipo di motore di archiviazione, perché dipende dal carico di lavoro stesso. L'ultimo menzionato, Aria Storage Engine, è compilato per impostazione predefinita da MariaDB 5.1 ed è necessario che sia "in uso" all'avvio del servizio MariaDB.

In questo blog vedremo cos'è Aria Storage Engine e come utilizzarlo in un server MariaDB.

Cos'è Aria Storage?

Aria è un motore di archiviazione per MySQL e MariaDB. È stato originariamente sviluppato con l'obiettivo di diventare il motore di archiviazione transazionale e non transazionale predefinito per MariaDB e MySQL.

Attualmente supporta la crittografia e il rilevamento di deadlock e offre anche un'alternativa a prova di crash a MyISAM. Quando MariaDB si riavvia dopo un arresto anomalo, Aria ripristina tutte le tabelle allo stato all'inizio di un'istruzione o all'inizio dell'ultima istruzione LOCK TABLES.

Aria supporta il controllo, la riparazione e la compressione di righe esterne e interne, diversi formati di riga, diversi formati di compressione dell'indice, aria_chk e altro ancora.

Questo motore di archiviazione è stato utilizzato per le tabelle di sistema MariaDB dalla versione 10.4.

Differenze tra Aria e MyISAM

Vediamo alcune differenze fondamentali tra Aria e il suo diretto concorrente:MyISAM, e poi i vantaggi e gli svantaggi dell'Aria Storage Engine.

  • Aria utilizza file di registro di grandi dimensioni (1G per impostazione predefinita).
  • Aria ha un file di controllo dei log (aria_log_control) e dei file di log (aria_log.%). I file di registro possono essere eliminati automaticamente quando non necessari o eliminati su richiesta.
  • Aria usa 8K pagine per impostazione predefinita, mentre MyISAM usa 1K. Questo rende Aria un po' più veloce quando si usano chiavi di dimensione fissa, ma più lenta quando si usano chiavi compresse a lunghezza variabile.

Vantaggi di Aria Storage Engine

  • Dati e indici sono a prova di crash.
  • In caso di arresto anomalo, le modifiche verranno ripristinate allo stato di inizio di un'istruzione o di un'ultima istruzione LOCK TABLES.
  • Aria può riprodurre quasi tutto dal registro. Le cose che non possono ancora essere riprodotte sono:
    • Inserisci in batch in una tabella vuota.
    • ALTER TABLE.
  • LOAD INDEX può saltare i blocchi dell'indice per gli indici indesiderati.
  • Supporta tutti i formati MyISAM ROW e il nuovo formato PAGE in cui i dati sono archiviati nelle pagine.
  • Più inseritori simultanei nella stessa tabella.
  • Quando si utilizza il formato PAGE, i dati delle righe vengono memorizzati nella cache della pagina.
  • Aria ha test unitari della maggior parte delle parti.
  • Supporta tabelle sia crash-safe che non transazionali.
  • PAGE è l'unico formato di riga transazionale/a prova di crash.
  • Il formato PAGE dovrebbe fornire un notevole miglioramento della velocità sui sistemi che hanno una cattiva memorizzazione nella cache dei dati.
  • Da MariaDB 10.5, la lunghezza massima della chiave è 2000 byte, rispetto a 1000 byte in MyISAM.

Svantaggi di Aria Storage Engine

  • Aria non supporta INSERT DELAYED.
  • Aria non supporta più cache di chiavi.
  • La memorizzazione di righe molto piccole (<25 byte) non è efficiente per il formato PAGE.
  • Le tabelle MERGE non supportano Aria.
  • Le pagine di dati Aria in formato blocco hanno un sovraccarico di 10 byte/pagina e 5 byte/riga. Il supporto per transazioni e più scrittori simultanei utilizzerà un sovraccarico aggiuntivo di 7 byte per le nuove righe, 14 byte per le righe eliminate e 0 byte per le vecchie righe compattate.
  • Nessun blocco esterno.
  • Aria ha una dimensione di pagina sia per l'indice che per i dati. MyISAM supporta diverse dimensioni di pagina per indice.
  • Piccolo sovraccarico per pagina di indice (15 byte).
  • La dimensione minima del file di dati per il formato PAGE è 16K.
  • Aria non supporta gli indici sui campi virtuali.

I formati di archiviazione Aria

Supporta tre diversi formati di archiviazione delle tabelle.

Lunghezza fissa

Queste tabelle contengono record di lunghezza fissa. Ogni colonna ha la stessa lunghezza per tutti i record, indipendentemente dal contenuto effettivo. È il formato predefinito se una tabella non ha campi BLOB, TEXT, VARCHAR o VARBINARY e non viene fornito alcun FORMATO ROW.

Caratteristiche:

  • Veloce, poiché MariaDB saprà sempre dove inizia un record.
  • Facile da memorizzare nella cache.
  • Occupa più spazio rispetto alle tabelle dinamiche, poiché la quantità massima di spazio di archiviazione verrà assegnata a ciascun record.
  • La ricostruzione dopo un incidente non è complicata grazie alle posizioni fisse.
  • Nessuna frammentazione o necessità di riorganizzazione, a meno che i record non siano stati eliminati e tu non voglia liberare spazio.

Le tabelle contenenti campi BLOB o TEXT non possono essere FISSE in quanto, in base alla progettazione, sono entrambi campi dinamici.

Dinamico

Queste tabelle contengono record di lunghezza variabile. È il formato predefinito se una tabella contiene campi BLOB, TEXT, VARCHAR o VARBINARY e non viene fornito alcun FORMATO ROW.

Caratteristiche:

  • Ogni riga contiene un'intestazione che indica la lunghezza della riga.
  • Le righe tendono a frammentarsi facilmente. L'AGGIORNAMENTO di un record in modo che sia più lungo assicurerà che venga archiviato in posizioni diverse sul disco.
  • Tutte le colonne di stringhe con una lunghezza di quattro o più sono dinamiche.
  • Richiedono molto meno spazio rispetto ai tavoli di lunghezza fissa.
  • Il ripristino dopo un arresto anomalo è più complicato rispetto alle tabelle FISSE.

Pagina

È il formato predefinito per le tabelle Aria ed è l'unico che può essere utilizzato se TRANSACTIONAL è impostato su 1.

Caratteristiche:

  • È memorizzato nella cache dalla cache della pagina, che offre prestazioni casuali migliori poiché utilizza meno chiamate di sistema.
  • Non si frammenta facilmente come il formato DYNAMIC durante gli AGGIORNAMENTI. Il numero massimo di frammenti è molto basso.
  • Si aggiorna più rapidamente rispetto alle tabelle dinamiche.
  • Ha un leggero sovraccarico di archiviazione, principalmente notevole su righe molto piccole.
  • Più lento per eseguire una scansione completa della tabella.
  • Più lento se ci sono più chiavi duplicate, poiché Aria scriverà prima una riga, poi le chiavi e solo dopo verificherà la presenza di duplicati.

Per conoscere il formato di archiviazione utilizzato da una tabella è possibile utilizzare l'istruzione SHOW TABLE STATUS.

Opzioni transazionali per Aria Storage Engine

In realtà, per Aria, transazionale significa crash-safe e non è supportato per le tabelle partizionate. Richiede anche il formato di riga PAGE per farlo funzionare.

Le opzioni della tabella TRANSACTIONAL e ROW_FORMAT interagiscono come segue:

  • Se TRANSACTIONAL=1 è impostato, l'unico formato di riga supportato è PAGE. Se ROW_FORMAT è impostato su un altro valore, Aria emette un avviso, ma forza comunque il formato della riga su PAGE.
  • Se TRANSACTIONAL=0 è impostato, la tabella non sarà protetta da arresti anomali e qualsiasi formato di riga è supportato.
  • Se TRANSACTIONAL non è impostato su alcun valore, è supportato qualsiasi formato di riga. Se ROW_FORMAT è impostato, la tabella utilizzerà quel formato di riga. In caso contrario, la tabella utilizzerà il formato di riga PAGE predefinito. In questo caso, se la tabella utilizza il formato di riga PAGE, sarà a prova di crash. Se utilizza un altro formato di riga, non sarà a prova di crash.

Come utilizzare Aria Storage Engine su MariaDB Server

Per prima cosa, devi creare un database (se non ne hai creato uno) e usarlo:

MariaDB [(none)]> create database db1;

Query OK, 1 row affected (0.003 sec)

MariaDB [(none)]> use db1

Database changed

Quindi, crea una tabella usando il motore "Aria":

MariaDB [db1]> CREATE TABLE table1 (id int(11) DEFAULT NULL, name text)

    -> ENGINE=Aria

    -> TRANSACTIONAL=1;

Query OK, 0 rows affected (0.025 sec)

Abbiamo specificato il valore TRANSACTIONAL in 1 per vederlo qui, ma, come accennato, non è necessario in quanto sarà 1 per impostazione predefinita se utilizziamo Aria senza specificare il formato riga e i valori transazionali. Ora avrai la tabella creata:

MariaDB [db1]> SHOW CREATE TABLE table1\G

*************************** 1. row ***************************

       Table: table1

Create Table: CREATE TABLE `table1` (

  `id` int(11) DEFAULT NULL,

  `name` text DEFAULT NULL

) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1

1 row in set (0.000 sec)

E nello stato della tabella, puoi controllare sia i valori transazionali che quelli del formato riga:

MariaDB [db1]> SHOW TABLE STATUS\G

*************************** 1. row ***************************

            Name: table1

          Engine: Aria

         Version: 10

      Row_format: Page

            Rows: 0

  Avg_row_length: 0

     Data_length: 8192

 Max_data_length: 17592186011648

    Index_length: 8192

       Data_free: 0

  Auto_increment: NULL

     Create_time: 2020-06-30 18:59:17

     Update_time: 2020-06-30 18:59:17

      Check_time: NULL

       Collation: latin1_swedish_ci

        Checksum: NULL

  Create_options: transactional=1

         Comment:

Max_index_length: 137438945280

       Temporary: N

1 rows in set (0.001 sec)

Ci sono molti parametri da configurare relativi ad Aria Storage Engine. Puoi trovare un elenco completo nel sito di documentazione ufficiale.

Strumenti Aria Storage Engine

Vediamo alcuni strumenti per lavorare con questo motore di archiviazione.

aria_chk

Aria_chk viene utilizzato per controllare, riparare, ottimizzare, ordinare e ottenere informazioni sulle tabelle Aria. Con il server MariaDB, puoi usare CHECK TABLE, REPAIR TABLE e OPTIMIZE TABLE per fare cose simili.

Questo strumento non deve essere utilizzato quando MariaDB è in esecuzione poiché presume che la tabella non verrà modificata durante il suo utilizzo.

$ aria_chk [OPTIONS] aria_tables[.MAI]

Simile a MyISAM, le informazioni sulla tabella Aria sono archiviate in 2 file diversi: 

  • Il file MAI contiene le informazioni sulla tabella di base e l'indice.
  • Il file MAD contiene i dati.
Aria_chk takes one or more MAI files as arguments.

For example, to check all your tables and repairs only those that have an error, run this command in your data directory:

$ aria_chk --check --force --sort_buffer_size=1G */*.MAI

Checking Aria file: db1/table1.MAI

Data records:       0   Deleted blocks:       0

- check file-size

- check key delete-chain

- check index reference

- check record links

...

aria_pack

Aria_pack è uno strumento per comprimere le tabelle Aria. Le tabelle risultanti sono di sola lettura e in genere sono più piccole dal 40% al 70% circa. Il nome del file utilizzato da questo strumento è il file di indice .MAI.

$ aria_pack [options] file_name [file_name2...]

Aria_pack comprime ogni colonna separatamente e, quando i dati risultanti vengono letti, solo le singole righe e colonne richieste devono essere decompresse, consentendo una lettura più rapida.

$ aria_pack /var/lib/mysql/world/country

Compressing aria_pack /var/lib/mysql/world/country.MAD: (549 records)

- Calculating statistics

- Compressing file

37.71%

Remember to run aria_chk -rq on compressed tables

Una volta che una tabella è stata impacchettata, usa il comando aria_chk -rq per ricostruire i suoi indici.

$ aria_chk -rq --ignore-control-file /var/lib/mysql/world/country

Recreating table '/var/lib/mysql/world/country'

- check record delete-chain

- recovering (with sort) Aria-table '/var/lib/mysql/world/country'

Data records: 549

- Fixing index 1

State updated

aria_read_log

Aria_read_log è uno strumento per visualizzare e applicare i record di registro da un registro delle transazioni Aria.

$ aria_read_log OPTIONS

Devi utilizzare una delle opzioni "-d" o "-a":

  • a:applica il registro alle tabelle:modifica le tabelle. Dovresti prima fare un backup. Visualizza molte informazioni se non utilizzi il parametro --silent.
  • d:Visualizza brevi informazioni lette dall'intestazione dei record.
$ cd /var/lib/mysql

$ aria_read_log -d

You are using --display-only, NOTHING will be written to disk

The transaction log starts from lsn (1,0x2007)

TRACE of the last aria_read_log

Rec#1 LSN (1,0x2007) short_trid 0 redo_create_table(num_type:30) len 1042

Rec#2 LSN (1,0x2421) short_trid 0 redo_create_table(num_type:30) len 527

Rec#3 LSN (1,0x2638) short_trid 61986 long_transaction_id(num_type:36) len 6

Rec#4 LSN (1,0x2641) short_trid 61986 file_id(num_type:35) len 22

Rec#5 LSN (1,0x265d) short_trid 61986 undo_bulk_insert(num_type:39) len 9

Rec#6 LSN (1,0x266a) short_trid 0 incomplete_log(num_type:37) len 2

Rec#7 LSN (1,0x266f) short_trid 61986 commit(num_type:27) len 0

...

Conclusione

Come puoi vedere, Aria Storage Engine ha molti miglioramenti rispetto a MyISAM ed è un'ottima alternativa al motore di archiviazione da utilizzare. È anche facile da usare in quanto fa parte dell'installazione di MariaDB Server, quindi è sufficiente specificare il parametro della tabella ENGINE per abilitarlo.

MariaDB sta ancora lavorando su questo motore di archiviazione, quindi probabilmente vedremo presto nuovi miglioramenti nelle versioni future.