sql >> Databáze >  >> RDS >> MariaDB

Použití MyRocks Storage Engine se serverem MariaDB

MariaDB Server je jedním z nejpopulárnějších databázových serverů s otevřeným zdrojovým kódem. Byl vytvořen původními vývojáři MySQL a stal se oblíbeným pro svou rychlost, škálovatelnost a robustnost. MariaDB má bohatý ekosystém úložišť, pluginů a dalších nástrojů, díky kterým je velmi univerzální pro širokou škálu případů použití.

Požadavky na prostor na disku a efektivitu I/O našich databází stále rostou. Je to proto, abychom byli schopni řídit náš růst informací správným způsobem.

Pokud jde o úložiště MariaDB, máme na výběr různé typy, jako je XtraDB, InnoDB, Aria nebo MyISAM. Od verze MariaDB 10.2.5 jsou k dispozici také MyRocks. MyRocks je typ úložiště, který by nám mohl skutečně pomoci splnit požadavky, které jsme zmínili dříve.

V tomto blogu se dozvíme více informací o novém enginu MyRocks a o tom, jak jej můžeme použít na serveru MariaDB.

Co je MyRocks?

MyRocks je open source storage engine založený na RocksDB, který byl původně vyvinut Facebookem.

MyRocks mohou být dobrým řešením úložiště, pokud máte pracovní zátěž, která vyžaduje větší kompresi a efektivitu I/O. Používá architekturu Log Structured Merge (LSM), která má lepší kompresi než algoritmy B-tree používané enginem InnoDB (2x lepší komprese ve srovnání s daty komprimovanými InnoDB). Je to také úložiště optimalizované pro zápis (10x menší zesílení zápisu ve srovnání s InnoDB) a má rychlejší načítání a replikaci dat. MyRocks zapisuje data přímo na nejspodnější úroveň, čímž se vyhnete všem režijním nákladům na komprimaci, když povolíte rychlejší načítání dat pro relaci.

LSM funguje tak, že ukládá modifikační operace do vyrovnávací paměti (memtable) a třídí a ukládá data, když je tato vyrovnávací paměť plná.

Ve výchozím nastavení jsou tabulky a databáze uloženy v adresáři #rocksdb v datadir MySQL. Tyto informace jsou uloženy v souborech .sst bez oddělení podle tabulky.

MyRocks podporuje READ COMMITTED a REPEATABLE READ izolované úrovně a nepodporuje SERIALIZABLE.

Jak implementovat MyRocks na serveru MariaDB

Instalace

Nejprve musíme nainstalovat server MariaDB. V tomto příkladu použijeme jako operační systém CentOS Linux vydání 7.6.

Ve výchozím nastavení se tato verze operačního systému pokusí nainstalovat MariaDB 5.5, takže k instalaci MariaDB verze 10.3 přidáme úložiště MariaDB.

$ 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

A pak nainstalujeme balíček MariaDB Server:

$ yum install MariaDB-server

Tento příkaz nainstaluje různé závislosti balíčků, nejen server MariaDB.

==========================================================================================================================================================================================================
 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)

Ve výchozím nastavení je server MariaDB nainstalován s úložištěm InnoDB, takže musíme nainstalovat stroj RocksDB, abychom jej mohli používat.

$ 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)

Tento příkaz nainstaluje některé požadované závislosti a povolí plugin na serveru MariaDB. Vytvoří také konfigurační soubor v /etc/my.cnf.d/rocksdb.cnf:

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

Tuto instalaci můžeme ověřit spuštěním příkazu SHOW PLUGINS na serveru MariaDB.

$ 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     |
+-------------------------------+----------+--------------------+---------------+---------+

Pokud z nějakého důvodu nemáme plugin povolený, můžeme jej nainstalovat dynamicky spuštěním příkazu INSTALL SONAME nebo INSTALL PLUGIN:

$ MariaDB> INSTALL SONAME 'ha_rocksdb';

Další možností může být restartování databázových služeb. Tato akce by měla přečíst soubor /etc/my.cnf.d/rocksdb.cnf a povolit plugin.

$ service mariadb restart

Podrobné informace o našem enginu RocksDB můžeme najít pomocí následujícího příkazu:

$ SHOW ENGINE ROCKSDB STATUS

Konfigurace

Co se týče konfiguračních souborů, hlavní je /etc/my.cnf, který obsahuje adresář /etc/my.cnf.d, kde najdeme zbytek konfiguračních souborů. V tomto adresáři budeme mít ve výchozím nastavení následující konfigurační soubory:

  • enable_encryption.preset:Povolí šifrování dat v klidu.
  • mysql-clients.cnf:Zde jsou konfigurace pro různé skupiny jako [mysqladmin], [mysqlcheck], [mysqldump] a další.
  • rocksdb.cnf:Do tohoto souboru přidáme konkrétní konfiguraci pro MyRocks, jako je default-storage-engine nebo rocksdb_block_size.
  • server.cnf:Zde máme konfiguraci související s databázovým serverem, jako je adresa vazby a formát binlog.

Všechny systémové proměnné a stavové proměnné MyRocks mají předponu „rocksdb“. Pojďme se na to podívat.

Systémové proměnné:

$ 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                                     |
…
+-------------------------------------------------+------------------------------------------+

Stavové proměnné:

$ 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     |
…
+----------------------------------------------------+-------+

Více informací o stavu a systémových proměnných najdete na webu MariaDB.

Zálohy pro MariaDB pomocí MyRocks

Zálohy jsou nutností ve všech databázových prostředích. Jsou nezbytné pro obnovu systému, migraci, auditování, testování a další.

Zálohy můžeme kategorizovat do dvou různých typů, logické a fyzické. Logická záloha je uložena ve formátu čitelném pro člověka, jako je SQL, a fyzická záloha obsahuje další binární data.

Pro logické zálohy na MariaDB s MyRocks jako databázovým strojem je nejběžnějším zálohovacím nástrojem klasický mysqldump:

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

A pro fyzické zálohování můžeme použít Mariabackup, který je kompatibilní s MyRocks:

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

Další možností může být myrocks_hotbackup, vytvořený Facebookem. Lze jej použít k převzetí fyzické kopie ze spuštěné instance MyRocks na místní nebo vzdálený server, aniž by bylo nutné zastavit zdrojovou instanci.

Omezení používání MyRocks pro MariaDB

Podívejme se na některá omezení používání enginu MyRocks...

  • Optimistická paralelní replikace MariaDB nemusí být podporována
  • MyRocks není k dispozici pro 32bitové platformy
  • MariaDB Cluster (Galera Cluster) nefunguje s MyRocks (pouze úložiště InnoDB nebo XtraDB)
  • Transakce se musí vejít do paměti
  • Vyžaduje speciální nastavení pro načítání dat
  • SERIALIZABLE není podporována
  • Přenosný tabulkový prostor, cizí klíč, prostorový index a fulltextový index nejsou podporovány

Závěr

MyRocks jsou dostupné v MariaDB od verzí vyšších než 10.2.5. Jak jsme zmínili dříve, tento modul úložiště vám může být užitečný, když máte pracovní zátěž, která vyžaduje vysokou kompresi dat a vyšší úroveň efektivity I/O. Chcete-li se dozvědět více o MyRocks, můžete se podívat na toto.


  1. Vytvořte databázi v SQL Server 2017

  2. Pět hlavních úvah pro návrh indexu databáze na serveru SQL Server

  3. Poslední slovo ve větě:V SQL (možné regulární výrazy?)

  4. Vrátí dynamickou tabulku s neznámými sloupci z funkce PL/pgSQL