sql >> Databasteknik >  >> RDS >> MariaDB

Använda MyRocks Storage Engine med MariaDB Server

MariaDB Server är en av de mest populära databasservrarna med öppen källkod. Det skapades av de ursprungliga utvecklarna av MySQL och det blev populärt för att vara snabbt, skalbart och robust. MariaDB har ett rikt ekosystem av lagringsmotorer, plugins och andra verktyg som gör den mycket mångsidig för en mängd olika användningsfall.

Kraven på diskutrymme och I/O-effektivitet i våra databaser fortsätter att växa högre. Detta för att vi ska kunna hantera vår informationstillväxt på ett korrekt sätt.

När det gäller MariaDB-lagringsmotorn har vi olika typer att välja mellan såsom XtraDB, InnoDB, Aria eller MyISAM. Sedan MariaDB 10.2.5 version har MyRocks också varit tillgänglig. MyRocks är den typ av lagringsmotor som verkligen skulle kunna hjälpa oss att uppfylla kraven vi nämnde tidigare.

I den här bloggen kommer vi att lära oss mer information om den nya MyRocks-motorn och hur vi kan använda den i en MariaDB-server.

Vad är MyRocks?

MyRocks är en lagringsmotor med öppen källkod baserad på RocksDB som ursprungligen utvecklades av Facebook.

MyRocks kan vara en bra lagringslösning när du har arbetsbelastningar som kräver större komprimering och I/O-effektivitet. Den använder en Log Structured Merge (LSM)-arkitektur som har bättre komprimering än B-tree-algoritmerna som används av InnoDB-motorn (2 gånger bättre komprimering jämfört med data komprimerad av InnoDB). Det är också en skrivoptimerad lagringsmotor (10 gånger mindre skrivförstärkning jämfört med InnoDB) och den har snabbare dataladdning och replikering. MyRocks skriver data direkt till den lägsta nivån, vilket undviker alla komprimeringskostnader när du aktiverar snabbare dataladdning för en session.

En LSM fungerar genom att lagra modifieringsoperationer i en buffert (memtable) och sortera och lagra data när denna buffert är full.

Som standard lagras tabeller och databaser i en #rocksdb-katalog i MySQL-datakatalogen. Denna information lagras i .sst-filer utan separation per tabell.

MyRocks stöder isolerade nivåer READ COMMITTED och REPEATABLE READ och den stöder inte SERIALIZABLE.

Hur man implementerar MyRocks på en MariaDB-server

Installation

Först måste vi installera MariaDB-servern. I det här exemplet kommer vi att använda CentOS Linux version 7.6 som operativsystem.

Som standard kommer denna OS-version att försöka installera MariaDB 5.5, så vi lägger till MariaDB-förvaret för att installera MariaDB version 10.3.

$ 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

Och sedan installerar vi MariaDB Server-paketet:

$ yum install MariaDB-server

Detta kommando kommer att installera olika paketberoenden, inte bara 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)

Som standard är MariaDB-servern installerad med InnoDB-lagringsmotorn, så vi måste installera RocksDB-motorn för att kunna använda den.

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

Detta kommando kommer att installera några nödvändiga beroenden och det kommer att aktivera plugin-programmet på MariaDB-servern. Det kommer också att skapa en konfigurationsfil i /etc/my.cnf.d/rocksdb.cnf:

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

Vi kan verifiera denna installation genom att köra kommandot SHOW PLUGINS i MariaDB-servern.

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

Om vi ​​av någon anledning inte har insticksprogrammet aktiverat kan vi installera det dynamiskt genom att utföra kommandot INSTALL SONAME eller INSTALL PLUGIN:

$ MariaDB> INSTALL SONAME 'ha_rocksdb';

Ett annat alternativ kan vara att starta om databastjänsterna. Den här åtgärden bör läsa filen /etc/my.cnf.d/rocksdb.cnf och aktivera insticksprogrammet.

$ service mariadb restart

Vi kan hitta detaljerad information om vår RocksDB-motor genom att använda följande kommando:

$ SHOW ENGINE ROCKSDB STATUS

Konfiguration

Om konfigurationsfilerna är den huvudsakliga /etc/my.cnf, som inkluderar katalogen /etc/my.cnf.d där vi kan hitta resten av konfigurationsfilerna. I den här katalogen har vi följande konfigurationsfiler som standard:

  • enable_encryption.preset:Det kommer att aktivera data at rest-kryptering.
  • mysql-clients.cnf:Här finns konfigurationer för olika grupper som [mysqladmin], [mysqlcheck], [mysqldump] och mer.
  • rocksdb.cnf:I den här filen lägger vi till den specifika konfigurationen för MyRocks, som default-storage-engine eller rocksdb_block_size.
  • server.cnf:Här har vi konfiguration relaterad till databasservern som bind-adress och binlog_format.

Alla MyRocks systemvariabler och statusvariabler inleds med "rocksdb". Låt oss ta en titt på det här.

Systemvariabler:

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

Statusvariabler:

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

Du kan hitta mer information om status och systemvariabler på MariaDB-webbplatsen.

Säkerhetskopiering för MariaDB med MyRocks

Säkerhetskopiering är ett måste i alla databasmiljöer. De är viktiga för systemåterställning, migrering, granskning, testning och mer.

Vi kan kategorisera säkerhetskopiorna i två olika typer, logiska och fysiska. Den logiska säkerhetskopian lagras i ett läsbart format som SQL, och den fysiska säkerhetskopian innehåller ytterligare binära data.

För logiska säkerhetskopieringar på MariaDB med MyRocks som databasmotor är det vanligaste säkerhetskopieringsverktyget det klassiska mysqldump:

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

Och för fysisk säkerhetskopiering kan vi använda Mariabackup som är kompatibel med MyRocks:

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

Ett annat alternativ kan vara myrocks_hotbackup, skapad av Facebook. Den kan användas för att ta en fysisk kopia från en körande MyRocks-instans till lokal eller fjärrserver, utan att stoppa källinstansen.

Begränsningar för att använda MyRocks för MariaDB

Låt oss titta på några av begränsningarna med att använda MyRocks-motorn...

  • MariaDB:s optimistiska parallellreplikering kanske inte stöds
  • MyRocks är inte tillgängligt för 32-bitarsplattformar
  • MariaDB Cluster (Galera Cluster) fungerar inte med MyRocks (endast InnoDB eller XtraDB lagringsmotorer)
  • Transaktionen måste passa i minnet
  • Kräver speciella inställningar för att ladda data
  • SERIALIZABLE stöds inte
  • Transportabelt tabellutrymme, främmande nyckel, rumsligt index och fulltextindex stöds inte

Slutsats

MyRocks är tillgängligt i MariaDB från versioner högre än 10.2.5. Som vi nämnde tidigare kan denna lagringsmotor vara användbar för dig när du har arbetsbelastningar som kräver hög datakomprimering och högre nivåer av I/O-effektivitet. För att lära dig mer om MyRocks kan du kolla in det här.


  1. Oändlig loop CTE med OPTION (maxrekursion 0)

  2. PERIOD_ADD() Exempel – MySQL

  3. Konvertera 'datetimeoffset' till 'datetime2' i SQL Server (T-SQL-exempel)

  4. SCD typ 3