sql >> Database >  >> RDS >> MariaDB

De MyRocks Storage Engine gebruiken met MariaDB Server

MariaDB Server is een van de meest populaire open source databaseservers. Het is gemaakt door de oorspronkelijke ontwikkelaars van MySQL en het werd populair omdat het snel, schaalbaar en robuust was. MariaDB heeft een rijk ecosysteem van opslag-engines, plug-ins en andere tools die het zeer veelzijdig maken voor een breed scala aan gebruiksscenario's.

De vereisten voor schijfruimte en I/O-efficiëntie van onze databases worden steeds hoger. Dit is zodat we onze informatiegroei op een correcte manier kunnen beheren.

Wat betreft de MariaDB-opslagengine, we hebben verschillende typen om uit te kiezen, zoals XtraDB, InnoDB, Aria of MyISAM. Sinds MariaDB 10.2.5 is versie MyRocks ook beschikbaar. MyRocks is het type opslagengine dat ons echt zou kunnen helpen om aan de eerder genoemde vereisten te voldoen.

In deze blog leren we meer informatie over de nieuwe MyRocks-engine en hoe we deze in een MariaDB-server kunnen gebruiken.

Wat is MyRocks?

MyRocks is een open source opslagengine gebaseerd op RocksDB die oorspronkelijk is ontwikkeld door Facebook.

MyRocks kan een goede opslagoplossing zijn als je workloads hebt die meer compressie en I/O-efficiëntie vereisen. Het maakt gebruik van een Log Structured Merge (LSM)-architectuur met een betere compressie dan de B-tree-algoritmen die door de InnoDB-engine worden gebruikt (2x betere compressie vergeleken met gegevens die door InnoDB zijn gecomprimeerd). Het is ook een voor schrijven geoptimaliseerde opslag-engine (10x minder schrijfversterking in vergelijking met InnoDB) en het laadt en repliceert sneller gegevens. MyRocks schrijft gegevens rechtstreeks naar het onderste niveau, waardoor alle compactie-overheads worden vermeden wanneer u sneller gegevens laadt voor een sessie.

Een LSM werkt door wijzigingsbewerkingen op te slaan in een buffer (memtable) en de gegevens te sorteren en op te slaan wanneer deze buffer vol is.

Tabellen en databases worden standaard opgeslagen in een #rocksdb-directory in de MySQL-datadir. Deze informatie wordt opgeslagen in .sst-bestanden zonder scheiding per tabel.

MyRocks ondersteunt READ COMMITTED en REPEATABLE READ geïsoleerde niveaus en ondersteunt geen SERIALISEERBAAR.

Hoe MyRocks op een MariaDB-server te implementeren

Installatie

Eerst moeten we de MariaDB-server installeren. In dit voorbeeld gebruiken we CentOS Linux release 7.6 als besturingssysteem.

Standaard probeert deze OS-versie MariaDB 5.5 te installeren, dus we zullen de MariaDB-repository toevoegen om MariaDB-versie 10.3 te installeren.

$ cat > /etc/yum.repos.d/MariaDB.repo <<- EOF
# MariaDB 10.3 CentOS repository
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

En dan zullen we het MariaDB Server-pakket installeren:

$ yum install MariaDB-server

Deze opdracht zal verschillende pakketafhankelijkheden installeren, niet alleen MariaDB Server.

==========================================================================================================================================================================================================
 Package                                                 Arch                                   Version                                                     Repository                               Size
==========================================================================================================================================================================================================
Installing:
 MariaDB-server                                          x86_64                                 10.3.15-1.el7.centos                                        mariadb                                  24 M
Installing for dependencies:
 MariaDB-client                                          x86_64                                 10.3.15-1.el7.centos                                        mariadb                                  11 M
 MariaDB-common                                          x86_64                                 10.3.15-1.el7.centos                                        mariadb                                  78 k
 MariaDB-compat                                          x86_64                                 10.3.15-1.el7.centos                                        mariadb                                 2.8 M
 boost-program-options                                   x86_64                                 1.53.0-27.el7                                               base                                    156 k
 galera                                                  x86_64                                 25.3.26-1.rhel7.el7.centos                                  mariadb                                 8.1 M
 libaio                                                  x86_64                                 0.3.109-13.el7                                              base                                     24 k
 lsof                                                    x86_64                                 4.87-6.el7                                                  base                                    331 k
 make                                                    x86_64                                 1:3.82-23.el7                                               base                                    420 k
 openssl                                                 x86_64                                 1:1.0.2k-16.el7_6.1                                         updates                                 493 k
 perl-Compress-Raw-Bzip2                                 x86_64                                 2.061-3.el7                                                 base                                     32 k
 perl-Compress-Raw-Zlib                                  x86_64                                 1:2.061-4.el7                                               base                                     57 k
 perl-DBI                                                x86_64                                 1.627-4.el7                                                 base                                    802 k
 perl-Data-Dumper                                        x86_64                                 2.145-3.el7                                                 base                                     47 k
 perl-IO-Compress                                        noarch                                 2.061-2.el7                                                 base                                    260 k
 perl-Net-Daemon                                         noarch                                 0.48-5.el7                                                  base                                     51 k
 perl-PlRPC                                              noarch                                 0.2020-14.el7                                               base                                     36 k

Transaction Summary
==========================================================================================================================================================================================================
Install  1 Package (+16 Dependent packages)

De MariaDB-server is standaard geïnstalleerd met de InnoDB-opslagengine, dus we moeten de RocksDB-engine installeren om er gebruik van te kunnen maken.

$ yum install MariaDB-rocksdb-engine
==========================================================================================================================================================================================================
 Package                                                  Arch                                     Version                                                Repository                                 Size
==========================================================================================================================================================================================================
Installing:
 MariaDB-rocksdb-engine                                   x86_64                                   10.3.15-1.el7.centos                                   mariadb                                   4.4 M
Installing for dependencies:
 libzstd                                                  x86_64                                   1.3.4-1.el7                                            mariadb                                   211 k
 snappy                                                   x86_64                                   1.1.0-3.el7                                            base                                       40 k

Transaction Summary
==========================================================================================================================================================================================================
Install  1 Package (+2 Dependent packages)

Met deze opdracht worden enkele vereiste afhankelijkheden geïnstalleerd en wordt de plug-in op de MariaDB-server ingeschakeld. Het maakt ook een configuratiebestand aan in /etc/my.cnf.d/rocksdb.cnf:

[mariadb]
plugin-load-add=ha_rocksdb.so

We kunnen deze installatie verifiëren door het commando SHOW PLUGINS in de MariaDB-server uit te voeren.

$ MariaDB> SHOW PLUGINS;
+-------------------------------+----------+--------------------+---------------+---------+
| Name                          | Status   | Type               | Library       | License |
+-------------------------------+----------+--------------------+---------------+---------+
...
| ROCKSDB                       | ACTIVE   | STORAGE ENGINE     | ha_rocksdb.so | GPL     |
| ROCKSDB_CFSTATS               | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_DBSTATS               | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_PERF_CONTEXT          | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_PERF_CONTEXT_GLOBAL   | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_CF_OPTIONS            | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_COMPACTION_STATS      | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_GLOBAL_INFO           | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_DDL                   | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_SST_PROPS             | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_INDEX_FILE_MAP        | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_LOCKS                 | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_TRX                   | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
| ROCKSDB_DEADLOCK              | ACTIVE   | INFORMATION SCHEMA | ha_rocksdb.so | GPL     |
+-------------------------------+----------+--------------------+---------------+---------+

Als we om de een of andere reden de plug-in niet hebben ingeschakeld, kunnen we deze dynamisch installeren door de opdracht INSTALL SONAME of INSTALL PLUGIN uit te voeren:

$ MariaDB> INSTALL SONAME 'ha_rocksdb';

Een andere optie zou het herstarten van de databaseservices kunnen zijn. Deze actie zou het bestand /etc/my.cnf.d/rocksdb.cnf moeten lezen en de plug-in moeten inschakelen.

$ service mariadb restart

We kunnen gedetailleerde informatie over onze RocksDB-engine vinden door het volgende commando te gebruiken:

$ SHOW ENGINE ROCKSDB STATUS

Configuratie

Wat betreft de configuratiebestanden, de belangrijkste is /etc/my.cnf, die de directory /etc/my.cnf.d bevat waar we de rest van de configuratiebestanden kunnen vinden. In deze map hebben we standaard de volgende configuratiebestanden:

  • enable_encryption.preset:het zal data-at-rest-codering inschakelen.
  • mysql-clients.cnf:hier zijn configuraties voor verschillende groepen zoals [mysqladmin], [mysqlcheck], [mysqldump] en meer.
  • rocksdb.cnf:in dit bestand voegen we de specifieke configuratie voor MyRocks toe, zoals standaard-storage-engine of rocksdb_block_size.
  • server.cnf:hier hebben we configuratie gerelateerd aan de databaseserver, zoals bind-address en binlog_format.

Alle MyRocks-systeemvariabelen en statusvariabelen worden voorafgegaan door "rocksdb". Laten we hier eens naar kijken.

Systeemvariabelen:

$ MariaDB> SHOW VARIABLES LIKE 'rocksdb%';
+-------------------------------------------------+------------------------------------------+
| Variable_name                                   | Value                                    |
+-------------------------------------------------+------------------------------------------+
| rocksdb_access_hint_on_compaction_start         | 1                                        |
| rocksdb_advise_random_on_open                   | ON                                       |
| rocksdb_allow_concurrent_memtable_write         | OFF                                      |
| rocksdb_allow_mmap_reads                        | OFF                                      |
| rocksdb_allow_mmap_writes                       | OFF                                      |
| rocksdb_allow_to_start_after_corruption         | OFF                                      |
| rocksdb_blind_delete_primary_key                | OFF                                      |
| rocksdb_block_cache_size                        | 536870912                                |
| rocksdb_block_restart_interval                  | 16                                       |
| rocksdb_block_size                              | 4096                                     |
…
+-------------------------------------------------+------------------------------------------+

Statusvariabelen:

$ MariaDB> SHOW STATUS LIKE 'rocksdb%';
+----------------------------------------------------+-------+
| Variable_name                                      | Value |
+----------------------------------------------------+-------+
| Rocksdb_rows_deleted                               | 0     |
| Rocksdb_rows_inserted                              | 0     |
| Rocksdb_rows_read                                  | 0     |
| Rocksdb_rows_updated                               | 0     |
| Rocksdb_rows_deleted_blind                         | 0     |
| Rocksdb_rows_expired                               | 0     |
| Rocksdb_rows_filtered                              | 0     |
| Rocksdb_system_rows_deleted                        | 0     |
| Rocksdb_system_rows_inserted                       | 0     |
| Rocksdb_system_rows_read                           | 0     |
…
+----------------------------------------------------+-------+

U kunt meer informatie over de status- en systeemvariabelen vinden op de MariaDB-website.

Back-ups voor MariaDB met MyRocks

Back-ups zijn een must in alle database-omgevingen. Ze zijn essentieel voor systeemherstel, migraties, auditing, testen en meer.

We kunnen de back-ups in twee verschillende typen indelen, logisch en fysiek. De logische back-up wordt opgeslagen in een voor mensen leesbare indeling zoals SQL, en de fysieke back-up bevat de aanvullende binaire gegevens.

Voor logische back-ups op MariaDB met MyRocks als database-engine, is de meest gebruikelijke back-uptool de klassieke mysqldump:

$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL

En voor fysieke back-up kunnen we Mariabackup gebruiken die compatibel is met MyRocks:

$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST

Een andere optie kan myrocks_hotbackup zijn, gemaakt door Facebook. Het kan worden gebruikt om een ​​fysieke kopie te maken van een actieve MyRocks-instantie naar een lokale of externe server, zonder de broninstantie te stoppen.

Beperkingen van het gebruik van MyRocks voor MariaDB

Laten we eens kijken naar enkele van de beperkingen van het gebruik van de MyRocks-engine...

  • MariaDB's optimistische parallelle replicatie wordt mogelijk niet ondersteund
  • MyRocks is niet beschikbaar voor 32-bits platforms
  • MariaDB Cluster (Galera Cluster) werkt niet met MyRocks (alleen InnoDB- of XtraDB-opslagengines)
  • De transactie moet in het geheugen passen
  • Vereist speciale instellingen voor het laden van gegevens
  • SERIALIZABLE wordt niet ondersteund
  • Verplaatsbare tabelruimte, externe sleutel, ruimtelijke index en volledige tekstindex worden niet ondersteund

Conclusie

MyRocks is beschikbaar in MariaDB vanaf versies hoger dan 10.2.5. Zoals we eerder vermeldden, kan deze opslagengine nuttig voor u zijn wanneer u workloads hebt die een hoge gegevenscompressie en een grotere I/O-efficiëntie vereisen. Voor meer informatie over MyRocks kun je dit bekijken.


  1. ODBC-toepassingen verbinden met MySQL

  2. Kan een SQL-servertabel twee identiteitskolommen hebben?

  3. Beëindigt het gebruik van een open SQL-verbinding sluiten

  4. Vergelijk twee MySQL-databases