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

AWSAuroraインスタンスの書き込みパフォーマンスを最適化する

    私の経験から、Amazon Auroraは、書き込みトラフィックが多いデータベースの実行には適していません。少なくとも2017年頃の実装では、時間の経過とともに改善される可能性があります。

    2017年の初めに、書き込みの多いアプリケーションのベンチマークに取り組みましたが、アプリケーションとデータベースを考慮すると、書き込みパフォーマンスの点でRDS(非Aurora)がAuroraよりもはるかに優れていることがわかりました。基本的に、AuroraはRDSよりも2桁遅かった。オーロラの高性能に関するAmazonの主張は、明らかに完全にマーケティング主導のでたらめです。

    2016年11月、私はラスベガスで開催されたAmazon re:Inventカンファレンスに参加しました。私は、パフォーマンスに関する質問に答えるために、知識のあるAuroraエンジニアを見つけようとしました。私が見つけたのは、AuroraがMySQLよりも魔法のように5〜10倍速いという主張を繰り返すように命じられたジュニアエンジニアだけでした。

    2017年4月、私はPercona Liveカンファレンスに参加し、オープンソースの分散ストレージレイヤーに標準のMySQLとCEPHを使用してAuroraのような分散ストレージアーキテクチャを開発する方法についてのプレゼンテーションを見ました。同じトピックに関するウェビナーがここにあります: https://www.percona。 com / resources / webinars / mysql-and-ceph 、私が見たエンジニアのイブ・トルドーが共同で発表し、会議で講演しました。

    CEPHでMySQLを使用することについて明らかになったのは、エンジニアがMySQL変更バッファー ストレージを分散させながら、セカンダリインデックスへの変更をキャッシュする方法がないためです。これにより、セカンダリ(一意ではない)インデックスを持つテーブルへの書き込みで大きなパフォーマンスの問題が発生しました。

    これは、Auroraを使用したアプリケーションのベンチマークで見たパフォーマンスの問題と一致していました。私たちのデータベースには多くのセカンダリインデックスがありました。

    したがって、書き込みトラフィックが多いデータベースにAuroraを絶対に使用する必要がある場合は、最初に行う必要があるのは、すべてのセカンダリインデックスを削除することをお勧めします。

    明らかに、これは、クエリの一部を最適化するためにインデックスが必要な場合に問題になります。もちろん、両方のSELECTクエリだけでなく、一部のUPDATEおよびDELETEクエリもセカンダリインデックスを使用する場合があります。

    1つの戦略は、Auroraクラスターの非Auroraリードレプリカを作成し、SELECTクエリをサポートするためにリードレプリカにのみセカンダリインデックスを作成することです。 https://aws.amazon.com/premiumsupport/knowledge-center/enable-binary-logging-aurora/

    ただし、これでも、UPDATE/DELETEステートメントにセカンダリインデックスが必要な場合は役に立ちません。そのシナリオについての提案はありません。運が悪いかもしれません。

    私の結論は、書き込みが多いアプリケーションにAuroraを使用することは選択しないということです。たぶんそれは将来変わるでしょう。

    2021年4月の更新:

    上記を書いた後、Auroraバージョン2に対してsysbenchベンチマークを実行しました。特定の数値を共有することはできませんが、現在のAuroraの改善は書き込みの多いワークロードに適していると結論付けています。確認のために、多数のセカンダリインデックスを使用してテストを実行しました。ただし、Auroraの採用に真剣に取り組む人には、独自のベンチマークを実行することをお勧めします。

    少なくとも、Auroraは、EBSストレージを使用する従来のAmazon RDSforMySQLよりもはるかに優れています。それはおそらく彼らがAuroraがMySQLより5倍速いと主張するところです。しかし、Auroraは私がテストした他のいくつかの選択肢よりも速くはなく、実際には一致しません:

    • MySQL Serverは、ローカルストレージを使用してEC2インスタンス、特にローカルに接続されたNVMeを備えたi3インスタンスに自分自身をインストールしました。インスタンスストレージは信頼できないため、冗長ノードを実行する必要があることを理解しています。

    • MySQLサーバーは、直接接続されたSSDストレージを使用して、データセンターの物理ホストに自分自身をインストールしました。

    Auroraをマネージドクラウドデータベースとして使用することの価値は、パフォーマンスだけではありません。また、自動監視、バックアップ、フェイルオーバー、アップグレードなどもあります。



    1. 日付に基づいて複数のインターバルパーティションを削除するにはどうすればよいですか?

    2. 継続的なデータベース監視の改善のための秘訣

    3. DESCRIBEコマンドを使用せずにOracleでテーブルを記述するにはどうすればよいですか?

    4. SQL Server(T-SQL)の特定のパーティションからすべての行を返す