sql >> Base de Datos >  >> RDS >> MariaDB

Uso del motor de almacenamiento Aria con el servidor MariaDB

MariaDB Server es uno de los servidores de bases de datos de código abierto más populares. Fue creado por los desarrolladores originales de MySQL y se hizo popular por ser rápido, escalable y robusto. MariaDB tiene un rico ecosistema de motores de almacenamiento, complementos y otras herramientas disponibles que lo hacen muy versátil para una amplia variedad de casos de uso.

En cuanto al motor de almacenamiento MariaDB, tiene diferentes tipos para elegir, como XtraDB, InnoDB, MyRocks, MyISAM o incluso Aria. No existe un mejor tipo de motor de almacenamiento, ya que depende de la carga de trabajo en sí. El último mencionado, Aria Storage Engine, se compila de manera predeterminada a partir de MariaDB 5.1 y se requiere que esté "en uso" cuando se inicia el servicio MariaDB.

En este blog, veremos qué es Aria Storage Engine y cómo usarlo en un servidor MariaDB.

¿Qué es el almacenamiento de Aria?

Aria es un motor de almacenamiento para MySQL y MariaDB. Originalmente se desarrolló con el objetivo de convertirse en el motor de almacenamiento transaccional y no transaccional predeterminado para MariaDB y MySQL.

Actualmente, es compatible con el cifrado y la detección de interbloqueos, y también ofrece una alternativa a MyISAM a prueba de fallas. Cuando MariaDB se reinicia después de un bloqueo, Aria recupera todas las tablas al estado al comienzo de una declaración o al comienzo de la última declaración LOCK TABLES.

Aria admite verificación, reparación y compresión externas e internas de filas, diferentes formatos de fila, diferentes formatos de compresión de índice, aria_chk y más.

Este motor de almacenamiento se ha utilizado para las tablas del sistema MariaDB desde la versión 10.4.

Diferencias entre Aria y MyISAM

Veamos algunas diferencias básicas entre Aria y su competidor directo:MyISAM, y luego las ventajas y desventajas del Aria Storage Engine.

  • Aria usa grandes archivos de registro (1G por defecto).
  • Aria tiene un archivo de control de registro (aria_log_control) y archivos de registro (aria_log.%). Los archivos de registro se pueden depurar automáticamente cuando no se necesitan o se pueden depurar a pedido.
  • Aria usa páginas de 8K de forma predeterminada, mientras que MyISAM usa 1K. Esto hace que Aria sea un poco más rápida cuando se usan claves de tamaño fijo, pero más lenta cuando se usan claves empaquetadas de longitud variable.

Ventajas del motor de almacenamiento Aria

  • Los datos y los índices son a prueba de fallas.
  • En un bloqueo, los cambios se revertirán al estado del inicio de una declaración o una última declaración LOCK TABLES.
  • Aria puede reproducir casi todo desde el registro. Las cosas que aún no se pueden reproducir son:
    • Lote INSERT en una tabla vacía.
    • ALTERAR TABLAS.
  • LOAD INDEX puede omitir bloques de índice para índices no deseados.
  • Admite todos los formatos MyISAM ROW y el nuevo formato PAGE donde los datos se almacenan en páginas.
  • Múltiples insertadores simultáneos en la misma tabla.
  • Cuando se usa el formato de PÁGINA, los datos de la fila se almacenan en la memoria caché de la página.
  • Aria tiene pruebas unitarias de la mayoría de las partes.
  • Admite tablas a prueba de fallas y no transaccionales.
  • PAGE es el único formato de fila seguro/transaccional.
  • El formato de PÁGINA debería proporcionar una mejora notable de la velocidad en los sistemas que tienen un almacenamiento en caché de datos incorrecto.
  • A partir de MariaDB 10.5, la longitud máxima de la clave es de 2000 bytes, en comparación con los 1000 bytes de MyISAM.

Desventajas del motor de almacenamiento Aria

  • Aria no admite INSERCIÓN DEMORADA.
  • Aria no admite varios cachés de claves.
  • El almacenamiento de filas muy pequeñas (<25 bytes) no es eficiente para el formato de PÁGINA.
  • Las tablas MERGE no son compatibles con Aria.
  • Las páginas de datos de Aria en formato de bloque tienen una sobrecarga de 10 bytes/página y 5 bytes/fila. La compatibilidad con transacciones y múltiples escritores simultáneos utilizará una sobrecarga adicional de 7 bytes para filas nuevas, 14 bytes para filas eliminadas y 0 bytes para filas compactadas antiguas.
  • Sin bloqueo externo.
  • Aria tiene un tamaño de página para el índice y los datos. MyISAM admite diferentes tamaños de página por índice.
  • Pequeña sobrecarga por página de índice (15 bytes).
  • El tamaño mínimo del archivo de datos para el formato de PÁGINA es 16K.
  • Aria no admite índices en campos virtuales.

Los formatos de almacenamiento Aria

Admite tres formatos de almacenamiento de tablas diferentes.

Longitud fija

Estas tablas contienen registros de longitud fija. Cada columna tiene la misma longitud para todos los registros, independientemente del contenido real. Es el formato predeterminado si una tabla no tiene campos BLOB, TEXT, VARCHAR o VARBINARY, y no se proporciona FORMATO DE FILA.

Características:

  • Rápido, ya que MariaDB siempre sabrá dónde comienza un registro.
  • Fácil de almacenar en caché.
  • Ocupa más espacio que las tablas dinámicas, ya que se asignará la cantidad máxima de espacio de almacenamiento a cada registro.
  • La reconstrucción después de un accidente no es complicada debido a las posiciones fijas.
  • Sin fragmentación ni necesidad de reorganización, a menos que se hayan eliminado registros y desee liberar espacio.

Las tablas que contienen campos BLOB o TEXT no se pueden ARREGLAR ya que, por diseño, ambos son campos dinámicos.

Dinámico

Estas tablas contienen registros de longitud variable. Es el formato predeterminado si una tabla tiene campos BLOB, TEXT, VARCHAR o VARBINARY y no se proporciona FORMATO DE FILA.

Características:

  • Cada fila contiene un encabezado que indica la longitud de la fila.
  • Las filas tienden a fragmentarse fácilmente. ACTUALIZAR un registro para que sea más largo probablemente garantizará que se almacene en diferentes lugares del disco.
  • Todas las columnas de cadena con una longitud de cuatro o más son dinámicas.
  • Requieren mucho menos espacio que las tablas de longitud fija.
  • Restaurar después de un bloqueo es más complicado que con tablas FIJAS.

Página

Es el formato predeterminado para las tablas Aria y es el único formato que se puede usar si TRANSACTIONAL se establece en 1.

Características:

  • Se almacena en la memoria caché de la página, lo que proporciona un mejor rendimiento aleatorio ya que utiliza menos llamadas al sistema.
  • No se fragmenta tan fácilmente como el formato DINÁMICO durante las ACTUALIZACIONES. El número máximo de fragmentos es muy bajo.
  • Actualizaciones más rápidas que las tablas dinámicas.
  • Tiene una ligera sobrecarga de almacenamiento, principalmente notable en filas muy pequeñas.
  • Más lento para realizar un escaneo completo de la tabla.
  • Más lento si hay varias claves duplicadas, ya que Aria primero escribirá una fila, luego las claves y solo luego buscará duplicados.

Para saber el formato de almacenamiento usado por una tabla puede usar la declaración SHOW TABLE STATUS.

Opciones transaccionales para el motor de almacenamiento Aria

En realidad, para Aria, transaccional significa a prueba de fallas y no es compatible con tablas particionadas. También requiere el formato de fila PAGE para que funcione.

Las opciones de tabla TRANSACTIONAL y ROW_FORMAT interactúan de la siguiente manera:

  • Si se establece TRANSACTIONAL=1, el único formato de fila admitido es PAGE. Si ROW_FORMAT se establece en algún otro valor, Aria emite una advertencia, pero aún obliga a que el formato de fila sea PÁGINA.
  • Si se establece TRANSACTIONAL=0, entonces la tabla no estará a prueba de fallas y se admite cualquier formato de fila.
  • Si TRANSACTIONAL no se establece en ningún valor, se admite cualquier formato de fila. Si se establece ROW_FORMAT, la tabla usará ese formato de fila. De lo contrario, la tabla utilizará el formato de fila de PÁGINA predeterminado. En este caso, si la tabla usa el formato de fila de PÁGINA, será a prueba de fallas. Si usa algún otro formato de fila, entonces no estará a prueba de fallas.

Cómo usar el motor de almacenamiento Aria en el servidor MariaDB

Primero, necesita crear una base de datos (si no tiene una creada) y usarla:

MariaDB [(none)]> create database db1;

Query OK, 1 row affected (0.003 sec)

MariaDB [(none)]> use db1

Database changed

Luego, crea una tabla usando el motor “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)

Especificamos el valor TRANSACCIONAL en 1 para verlo aquí, pero, como mencionamos, no es necesario ya que será 1 por defecto si estamos usando Aria sin especificar el formato de fila y los valores transaccionales. Ahora, tendrás la tabla creada:

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)

Y en el estado de la tabla, puede verificar los valores de formato transaccional y de fila:

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)

Hay muchos parámetros para configurar relacionados con Aria Storage Engine. Puede encontrar una lista completa en el sitio de documentación oficial.

Herramientas del motor de almacenamiento Aria

Veamos algunas herramientas para trabajar con este motor de almacenamiento.

aria_chk

Aria_chk se utiliza para comprobar, reparar, optimizar, clasificar y obtener información sobre las tablas de Aria. Con el servidor MariaDB, puede usar CHECK TABLE, REPAIR TABLE y OPTIMIZE TABLE para hacer cosas similares.

Esta herramienta no debe usarse cuando se está ejecutando MariaDB, ya que asume que la tabla no cambiará durante su uso.

$ aria_chk [OPTIONS] aria_tables[.MAI]

Al igual que MyISAM, la información de la tabla Aria se almacena en dos archivos diferentes: 

  • El archivo MAI contiene información de la tabla base y el índice.
  • El archivo MAD contiene los datos.
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

...

paquete_aria

Aria_pack es una herramienta para comprimir tablas Aria. Las tablas resultantes son de solo lectura y, por lo general, entre un 40 % y un 70 % más pequeñas. El nombre de archivo utilizado por esta herramienta es el archivo de índice .MAI.

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

Aria_pack comprime cada columna por separado y, cuando se leen los datos resultantes, solo se deben descomprimir las filas y columnas individuales requeridas, lo que permite una lectura más rápida.

$ 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 vez que se haya empaquetado una tabla, use el comando aria_chk -rq para reconstruir sus índices.

$ 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 es una herramienta para mostrar y aplicar registros de un registro de transacciones de Aria.

$ aria_read_log OPTIONS

Necesita usar una de las opciones “-d” o “-a”:

  • a:Aplicar registro a tablas:modifica tablas. Primero debe hacer una copia de seguridad. Muestra mucha información si no usa el parámetro --silent.
  • d:muestra información breve leída del encabezado de los registros.
$ 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

...

Conclusión

Como puede ver, Aria Storage Engine tiene muchas mejoras en comparación con MyISAM, y es una excelente alternativa de motor de almacenamiento para usar. También es fácil de usar ya que es parte de la instalación del servidor MariaDB, por lo que basta con especificar el parámetro de la tabla ENGINE para habilitarlo.

MariaDB todavía está trabajando en este motor de almacenamiento, por lo que probablemente pronto veremos nuevas mejoras en futuras versiones.