sql >> データベース >  >> RDS >> MariaDB

MariaDBサーバーでのAriaストレージエンジンの使用

    MariaDBサーバーは、最も人気のあるオープンソースデータベースサーバーの1つです。これはMySQLの最初の開発者によって作成され、高速、スケーラブル、および堅牢であることが一般的になりました。 MariaDBには、ストレージエンジン、プラグイン、その他の利用可能なツールの豊富なエコシステムがあり、さまざまなユースケースで非常に用途が広くなっています。

    MariaDBストレージエンジンに関しては、XtraDB、InnoDB、MyRocks、MyISAM、さらにはAriaなどのさまざまなタイプから選択できます。ワークロード自体に依存するため、最適なストレージエンジンタイプはありません。最後に説明したAriaStorageEngineは、デフォルトでMariaDB 5.1からコンパイルされており、MariaDBサービスの開始時に「使用中」である必要があります。

    このブログでは、Aria Storage Engineとは何か、MariaDBサーバーでの使用方法を説明します。

    Aria Storageとは何ですか?

    Ariaは、MySQLおよびMariaDBのストレージエンジンです。もともとは、MariaDBとMySQLのデフォルトのトランザクションおよび非トランザクションストレージエンジンになることを目的として開発されました。

    現在、暗号化とデッドロックの検出をサポートしており、MyISAMの代わりにクラッシュセーフな方法も提供しています。クラッシュ後にMariaDBが再起動すると、Ariaはすべてのテーブルをステートメントの開始時または最後のLOCKTABLESステートメントの開始時の状態に回復します。

    Ariaは、行の外部および内部チェック、修復、圧縮、さまざまな行形式、さまざまなインデックス圧縮形式、aria_chkなどをサポートしています。

    このストレージエンジンは、10.4バージョンからMariaDBシステムテーブルに使用されています。

    AriaとMyISAMの違い

    Ariaと彼の直接のライバルであるMyISAMの基本的な違い、そしてAriaStorageEngineの長所と短所を見てみましょう。

    • Ariaは大きなログファイル(デフォルトでは1G)を使用します。
    • Ariaには、ログ制御ファイル(aria_log_control)とログファイル(aria_log。%)があります。ログファイルは、不要な場合は自動的にパージすることも、オンデマンドでパージすることもできます。
    • Ariaはデフォルトで8Kページを使用しますが、MyISAMは1Kを使用します。これにより、固定サイズのキーを使用する場合はAriaが少し速くなりますが、可変長のパックキーを使用する場合は遅くなります。

    AriaStorageEngineの利点

      データとインデックスはクラッシュセーフです。
    • クラッシュすると、変更はステートメントの開始状態または最後のLOCKTABLESステートメントの状態にロールバックされます。
    • Ariaはログからほとんどすべてを再生できます。まだ再生できないものは次のとおりです。
      • INSERTを空のテーブルにバッチ処理します。
      • 代替テーブル。
    • LOAD INDEXは、不要なインデックスのインデックスブロックをスキップできます。
    • すべてのMyISAMROW形式と、データがページに保存される新しいPAGE形式をサポートします。
    • 同じテーブルへの複数の同時インサーター。
    • PAGE形式を使用する場合、行データはページキャッシュによってキャッシュされます。
    • Ariaにはほとんどの部分の単体テストがあります。
    • クラッシュセーフテーブルと非トランザクションテーブルの両方をサポートします。
    • PAGEは唯一のクラッシュセーフ/トランザクション行形式です。
    • PAGE形式を使用すると、データキャッシュが不良なシステムで速度が大幅に向上するはずです。
    • MariaDB 10.5以降、キーの最大長は2000バイトですが、MyISAMでは1000バイトです。

    AriaStorageEngineのデメリット

    • AriaはINSERTDELAYEDをサポートしていません。
    • Ariaは複数のキーキャッシュをサポートしていません。
    • 非常に小さい行(<25バイト)の保存は、PAGE形式では効率的ではありません。
    • MERGEテーブルはAriaをサポートしていません。
    • ブロック形式のAriaデータページには、10バイト/ページと5バイト/行のオーバーヘッドがあります。トランザクションと複数の同時ライターのサポートでは、新しい行に7バイト、削除された行に14バイト、古い圧縮行に0バイトの追加のオーバーヘッドが使用されます。
    • 外部ロックなし。
    • Ariaのページサイズはインデックスとデータの両方で1つです。 MyISAMは、インデックスごとに異なるページサイズをサポートしています。
    • インデックスページあたりのオーバーヘッドが小さい(15バイト)。
    • PAGE形式の最小データファイルサイズは16Kです。
    • Ariaは仮想フィールドのインデックスをサポートしていません。

    Ariaストレージフォーマット

    3つの異なるテーブルストレージ形式をサポートしています。

    固定長

    これらのテーブルには、固定長のレコードが含まれています。各列は、実際の内容に関係なく、すべてのレコードで同じ長さです。テーブルにBLOB、TEXT、VARCHAR、またはVARBINARYフィールドがなく、ROW FORMATが指定されていない場合、これはデフォルトの形式です。

    特徴:

    • MariaDBはレコードの開始位置を常に認識しているため、高速です。
    • キャッシュが簡単。
    • 各レコードに最大量のストレージスペースが割り当てられるため、動的テーブルよりも多くのスペースを占有します。
    • 位置が固定されているため、クラッシュ後の再構築は簡単です。
    • レコードが削除されていて、スペースを解放したい場合を除いて、断片化や再編成の必要はありません。

    BLOBまたはTEXTフィールドを含むテーブルは、設計上、両方とも動的フィールドであるため、修正できません。

    動的

    これらのテーブルには、可変長のレコードが含まれています。テーブルにBLOB、TEXT、VARCHAR、またはVARBINARYフィールドがあり、ROW FORMATが指定されていない場合は、これがデフォルトの形式です。

    特徴:

    • 各行には、行の長さを示すヘッダーが含まれています。
    • 行は簡単に断片化される傾向があります。レコードを長く更新すると、ディスクのさまざまな場所に確実に保存される可能性があります。
    • 4つ以上の長さのすべての文字列列は動的です。
    • 固定長のテーブルよりもはるかに少ないスペースで済みます。
    • クラッシュ後の復元は、FIXEDテーブルよりも複雑です。
    ページ

    これはAriaテーブルのデフォルトの形式であり、TRANSACTIONALが1に設定されている場合に使用できる唯一の形式です。

    特徴:

    • ページキャッシュによってキャッシュされます。これにより、使用するシステムコールが少なくなるため、ランダムなパフォーマンスが向上します。
    • UPDATES中のDYNAMIC形式ほど簡単には断片化されません。フラグメントの最大数は非常に少ないです。
    • 動的テーブルよりも迅速に更新されます。
    • ストレージのオーバーヘッドがわずかにあり、主に非常に小さい行で顕著です。
    • 全表スキャンの実行に時間がかかります。
    • 重複するキーが複数ある場合は遅くなります。これは、Ariaが最初に行を書き込み、次にキーを書き込み、次に重複をチェックするためです。

    テーブルで使用されるストレージ形式を知るには、SHOWTABLESTATUSステートメントを使用できます。

    AriaStorageEngineのトランザクションオプション

    実際、Ariaの場合、トランザクションはクラッシュセーフを意味し、パーティション化されたテーブルではサポートされていません。また、それを機能させるには、PAGE行形式が必要です。

    TRANSACTIONALテーブルオプションとROW_FORMATテーブルオプションは次のように相互作用します。

    • TRANSACTIONAL =1が設定されている場合、サポートされる行形式はPAGEのみです。 ROW_FORMATが他の値に設定されている場合、Ariaは警告を発行しますが、それでも行形式を強制的にPAGEにします。
    • TRANSACTIONAL =0が設定されている場合、テーブルはクラッシュセーフではなく、任意の行形式がサポートされます。
    • TRANSACTIONALがどの値にも設定されていない場合、任意の行形式がサポートされます。 ROW_FORMATが設定されている場合、テーブルはその行形式を使用します。それ以外の場合、テーブルはデフォルトのPAGE行形式を使用します。この場合、テーブルがPAGE行形式を使用していると、クラッシュセーフになります。他の行形式を使用している場合、クラッシュセーフではありません。
    MariaDBサーバーでAriaストレージエンジンを使用する方法

    まず、データベースを作成し(データベースを作成していない場合)、それを使用する必要があります:

    MariaDB [(none)]> create database db1;
    
    Query OK, 1 row affected (0.003 sec)
    
    MariaDB [(none)]> use db1
    
    Database changed

    次に、「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)

    ここに表示するために1でTRANSACTIONAL値を指定しましたが、前述のように、行形式とトランザクション値を指定せずにAriaを使用している場合、デフォルトで1になるため、必要ありません。これで、テーブルが作成されます:

    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)

    テーブルのステータスでは、トランザクションと行の両方の形式の値を確認できます。

    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)

    AriaStorageEngineに関連して構成するパラメーターは多数あります。完全なリストは、公式ドキュメントサイトにあります。

    Ariaストレージエンジンツール

    このストレージエンジンを操作するためのツールをいくつか見てみましょう。

    aria_chk

    Aria_chkは、Ariaテーブルに関する情報を確認、修復、最適化、並べ替え、および取得するために使用されます。 MariaDBサーバーでは、CHECK TABLE、REPAIR TABLE、およびOPTIMIZETABLEを使用して同様のことを行うことができます。

    このツールは、MariaDBの実行中にテーブルが変更されないことを前提としているため、MariaDBの実行中は使用しないでください。

    $ aria_chk [OPTIONS] aria_tables[.MAI]

    MyISAMと同様に、Ariaテーブル情報は2つの異なるファイルに保存されます:

    • MAIファイルにはベーステーブル情報とインデックスが含まれています。
    • MADファイルにはデータが含まれています。
    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は、Ariaテーブルを圧縮するためのツールです。結果のテーブルは読み取り専用で、通常は約40%から70%小さくなります。このツールで使用されるファイル名は、.MAIインデックスファイルです。

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

    Aria_packは各列を個別に圧縮し、結果のデータを読み取るときに、必要な個々の行と列のみを解凍する必要があるため、すばやく読み取ることができます。

    $ 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

    テーブルがパックされたら、コマンドaria_chk-rqを使用してインデックスを再構築します。

    $ 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は、Ariaトランザクションログのログレコードを表示および適用するためのツールです。

    $ aria_read_log OPTIONS
    「-d」または「-a」オプションのいずれかを使用する必要があります:

    • a:ログをテーブルに適用:テーブルを変更します。最初にバックアップを作成する必要があります。 --silentパラメータを使用しない場合、多くの情報が表示されます。
    • d:レコードのヘッダーから読み取った簡単な情報を表示します。
    $ 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
    
    ...
    結論

    ご覧のとおり、Aria Storage EngineはMyISAMに対して多くの改善があり、使用するのに最適なストレージエンジンの代替手段です。また、MariaDBサーバーのインストールの一部であるため、使いやすいため、ENGINEテーブルパラメーターを指定するだけで有効になります。

    MariaDBはまだこのストレージエンジンに取り組んでいるので、おそらく将来のバージョンで新しい改善が見られるでしょう。


    1. SQLServer2019でのtempdbの機能強化

    2. T-SQLでMD5ハッシュ文字列を生成する

    3. Oracleのvarchar2列のアクセント付き文字を置き換える方法

    4. MS SQL Server ManagementStudioを使用せずにSQLServerのデフォルトデータベースを変更するにはどうすればよいですか?