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

ストレージエンジンの選択:Aria

    MariaDBプラットフォームには、MariaDBEnterpriseServerのプラグ可能なコンポーネントとしてさまざまなストレージエンジンが含まれています。これにより、特定のデータベースまたはテーブルのワークロードに最適なストレージエンジンを選択できます。

    Ariaストレージエンジンは、MyISAMのクラッシュセーフな代替として開発され、2007年から活発に開発されています。クラッシュ後にMariaDBサーバーが再起動すると、Ariaはすべてのテーブルをステートメントの開始時または開始時の状態に回復します。最後のLOCKTABLESステートメントの。

    MariaDBストレージエンジン

    ワークロードに基づく現在のストレージエンジンの推奨事項:

    • 読み取りが多いワークロード:Aria
    • 汎用:InnoDB
    • ACID:InnoDB
    • 書き込みの多いワークロード:MyRocks
    • 圧縮:MyRocks
    • シャーディング:スパイダー
    • 分析ワークロード:MariaDB ColumnStore

    MariaDBにAriaを使用する理由

    InnoDBはMariaDBで作成されたデータベースのデフォルトのストレージエンジンですが、AriaはMariaDB EnterpriseServer10.4のほとんどの内部システムテーブルに使用されています。 Ariaはフットプリントが小さく、システム間で簡単にコピーできるため、読み取りが多いワークロードに特に適しています。 Ariaには、優れたキャッシュパフォーマンスを可能にし、同時実行性に最適化された高度なページベースのストレージ形式があります。

    実際の環境では、Ariaは、分析やトランザクション処理で普及している集約された構成(GROUPBYやORDERBYなど)に対してより良い結果を生成します。分析とトランザクション処理は、合計、最大値、統計などの単純なものを見つけます。ほとんどのアプリケーションは、これらの集計関数を使用するクエリに大きく依存しています。
    MariaDBは、すべての内部ディスク上の一時テーブルにAriaストレージエンジンを使用します。これらのテーブルは、GROUP BYクエリとDISTINCTクエリを実行するために内部で作成されることが多いため、これらのタイプのクエリは、クエリされたテーブルが別のエンジンを使用している場合でも、Ariaのパフォーマンスの恩恵を受けることができます。

    Ariaストレージエンジンは、MariaDBにデフォルトでコンパイルされています。 AriaはMariaDBサーバー(エンタープライズおよびコミュニティ)に含まれており、追加のインストールやセットアップは必要ありません。

    アリアに関する考慮事項

    Ariaの最適な使用方法は、ユースケース、テーブルデザイン、アクセスパターン(SQLクエリ)、パフォーマンスターゲット、およびリカバリの目標によって異なります。

    アリアの利点 アリアのデメリット
  1. 複数のソースから同じテーブルに同時に挿入する
  2. 非効率的なバルクロード
  3. ページごとのキャッシュ機能
  4. テーブルレベルのロック
  5. MariaDBEnterpriseBackupによって効率的にバックアップされます

  6. ネイティブ外部キーのサポートが不足している
  7. 拡張ページ行フォーマット:デフォルトでクラッシュセーフ。オペレーション;特にWindowsで、データキャッシュの速度が大幅に向上します
  8. 不足はINSERTDELAYEDをサポートします。
  9. クラッシュセーフなテーブルとインデックス
  10. キャッシュの制限:複数のキーキャッシュがあり、OSディスクキャッシュに依存します
  11. 最後のステートメントまたはロックの先頭までのクラッシュリカバリ
  12. PAGE形式のオーバーヘッド:最小ファイルサイズ16K;小さな行の保管;インデックスとデータのページサイズは同じです。
  13. 最適化されたロードインデックス
  14. トランザクション(ロールバックとコミットなど)をサポートしていません
  15. MyISAMROWおよびPAGE形式と互換性があります
  16. 低いオーバーヘッド
  17. Ariaの使用を検討してください:

    • アプリケーションが多くのフルテキスト検索を実行する場合。
    • アプリケーションが多くのGROUPBYクエリを実行する場合。
    • アプリケーションがACID準拠または外部キーを必要としない場合。
    • アプリケーションが現在MyISAMを使用しており、より高速なバックアップ、自動クラッシュリカバリを可能にするために、より高度なエンジンが必要な場合。

    パフォーマンスの比較

    孤立したクエリを比較することと、実際の例を確認することはまったく別のことです。 Aria、InnoDB、およびMyISAMを比較するいくつかのテストを行いました。

    パフォーマンス結果
    InnoDB アリア MyISAM
    SQL 1 2.389 0.580 0.634
    SQL 2 2.169 0.530 0.598
    シンプルなベンチマーク:Aria vs MyISAM vs InnoDB

    この単純なベンチマークでは、テーブルが作成され、200万行が入力されました。 GROUPBYおよびORDERBYクエリが実行され、3つの代替ストレージエンジン(InnoDB、Aria、およびMyISAM)すべてにコピーされました。各テストは10回実行され、すべてのテストの平均時間(秒)が記録されました。

    テストに使用されるセットアップとコマンド:

    INSERT INTO fact VALUES (1,1,'Justin',md5(''), .1);
    INSERT INTO fact SELECT FLOOR(1+ rand()*9999), FLOOR(1 + rand()*499),
    (select name from names where id = 1 + rand() * 4),
    MD5(1+rand()*9999), rand()
    FROM fact;

    テーブルに約200万行が表示されるまで、上記の挿入を実行し続けます。

    MariaDB [test2]> SELECT count(*) from fact;
    +----------+
    | count(*) |
    +----------+
    | 2097152 |
    +----------+
    MariaDB [test2]> SHOW CREATE TABLE fact;
    +-------+-------------------------------
    | Table | Create Table
    +-------+-------------------------------
    | fact | CREATE TABLE `fact` (
    `dim1` int(11) DEFAULT NULL, `dim2` int(11) DEFAULT NULL,
     `name` varchar(20) DEFAULT NULL, `hash` varchar(32) DEFAULT NULL,
     `measure1` double DEFAULT NULL)
    ENGINE=InnoDB DEFAULT CHARSET=utf8 |

    個別の行と合計行の比率が適切であることを確認します:

    MariaDB [test2]> SELECT count(distinct (dim1)) from fact;
    +------------------------+
    | count(distinct (dim1)) |
    +------------------------+
    | 9999              	 |
    +------------------------+
    MariaDB [test2]> SELECT count(distinct (dim2)) from fact;
    +------------------------+
    | count(distinct (dim2)) |
    +------------------------+
    | 499                    |
    +------------------------+
    MariaDB [test2]> SELECT count(distinct (name)) from fact;
    +------------------------+
    | count(distinct (name)) |
    +------------------------+
    | 1                      |
    +------------------------+
    

    アリア

    CREATE TABLE `test2`.`fact2` (
     `dim1` INT(11) NULL DEFAULT NULL,
     `dim2` INT(11) NULL DEFAULT NULL,
     `name` VARCHAR(20) NULL DEFAULT NULL,
     `hash` VARCHAR(32) NULL DEFAULT NULL,
     `measure1` DOUBLE NULL DEFAULT NULL )
    ENGINE=ARIA TRANSACTIONAL=1;
    INSERT INTO `test2`.`fact2` (`dim1`, `dim2`, `name`, `hash`, `measure1`) 
    SELECT `dim1`, `dim2`, `name`, `hash`, `measure1` FROM `fact`;
    

    MyISAM

    CREATE TABLE `test2`.`fact3` (
     `dim1` INT(11) NULL DEFAULT NULL,
     `dim2` INT(11) NULL DEFAULT NULL,
     `name` VARCHAR(20) NULL DEFAULT NULL,
     `hash` VARCHAR(32) NULL DEFAULT NULL,
     `measure1` DOUBLE NULL DEFAULT NULL )
    COLLATE='latin1_swedish_ci' ENGINE=MyISAM;
    INSERT INTO `test2`.`fact3` (`dim1`, `dim2`, `name`, `hash`, `measure1`) 
    SELECT `dim1`, `dim2`, `name`, `hash`, `measure1` FROM `fact`;
    

    InnoDB、Aria、MyISAMで2つの異なるsqlをテストします:

    — sql 1:

    SELECT dim1, dim2 from fact group by dim1 order by dim1; 
    -- 9999 rows in set

    — sql 2:

    SELECT dim1, dim2 from fact group by dim2 order by dim2; 
    -- 499 rows in set

    ベンチマークの要約

    テストの結果、AriaはGROUPBYレベルでInnoDBまたはMyISAMよりもはるかに高速であることが示されています。 AriaはMyISAMよりもわずかに高速で、クラッシュセーフな環境を保証します。パフォーマンステストにより、AriaはInnoDBよりも4倍高速であることが明らかになりました。ユースケースが異なるため、それぞれがAriaとInnoDB(または必要に応じて別の)の両方を使用してMariaDBEnterpriseServerでテストを受ける必要があります。

    概要

    ワークロードに応じて、Ariaはパフォーマンス上の利点を提供する可能性があります。 MariaDBサーバーに含まれており、データベースごとまたはテーブルごと(ENGINE =ARIA)に適用できるため、追加のコストや労力をほとんどかけずに、特定のワークロードのパフォーマンスをテストできます。プラグを差し込んで試してみてください。

    ストレージエンジンとストレージアーキテクチャの詳細については、ワークロードが最適化されたストレージエンジンにアクセスしてください。


    1. 最小値または最大値ではなく、年に従ってシーケンスをリセットします

    2. `SELECT`を使用して関数を呼び出す

    3. OracleでのSELECTCOUNT(*)FROMsometableのより高速な代替手段

    4. 作成済みのデータベースをアセットからコピーできません