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クエリ)、パフォーマンスターゲット、およびリカバリの目標によって異なります。
アリアの利点 | アリアのデメリット |
| |
| |
| |
| |
| |
| |
| |
| |
|
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)に適用できるため、追加のコストや労力をほとんどかけずに、特定のワークロードのパフォーマンスをテストできます。プラグを差し込んで試してみてください。
ストレージエンジンとストレージアーキテクチャの詳細については、ワークロードが最適化されたストレージエンジンにアクセスしてください。