sql >> データベース >  >> NoSQL >> Redis

Redisでメモリ使用量を分析および最適化する方法

    Redisはメモリ内のデータストアです。つまり、データセット全体がメモリ(RAM)に保存されます。これはパフォーマンスには優れていますが、データのサイズが大きくなり始めると、すべてのデータを保持するためにRAMを追加する必要があります。これはすぐに法外な費用がかかる可能性があり、気付かないうちにサーバーのコストが急騰し始め、Redisが費用対効果の高い方法で拡張できるかどうか心配になります。

    もちろん、これはどのデータベースでも一般的な問題ですが、RAMはハードディスクやSSDなどのセカンダリストレージよりも高価であるため、Redisなどのインメモリデータベースの場合はさらに問題が発生します。ただし、Redisはアプリケーション用にテラバイトのデータを保存するためのものではないことを覚えておく必要があります。むしろ、非常に高速で読み取り(および程度は低いが書き込み)する必要のあるデータを保存するために使用することを目的としていますが、残りのデータはディスクでバックアップされた従来のデータベースに置くことができます。そのために、Redisはキャッシュとして最も頻繁に使用され、読み取り/書き込みスループット要件が高い最もアクティブなデータのみを保持します(スコアボードやリアルタイムチャットメッセージを考えてください)。したがって、Redisでの過度のメモリ使用の主な原因は、アプリケーションの動作です。アプリケーションには、Redisを使用してもメリットがない不要なデータや、完全に冗長なデータ、つまり、このユーザーのようにいかなる目的にも使用されなかったデータが保存されている可能性があります。

    過剰なメモリ使用量の問題を診断するには、明らかに、どのキーが最も多くのメモリを使用しているかを確認する方法が必要です。これにより、アプリケーションのどの動作が問題を引き起こしているのかを推論して理解できるようになります。時期尚早の最適化はすべての悪の根源であり、Redisも例外ではないことを忘れないでください。問題がどこにあるのか、そしてそれを修正する方法について考え始めるには、データセットのメモリ特性を可視化する必要があります。以下では、Redisデータを確認するために利用できるいくつかのオプションを検討し、アプリケーションレベルでの最適化の恩恵を受けることができる領域を見つけます。

    MEMORYUSAGEコマンド

    この適切な名前のコマンドは、Redis 4.0.0以降で使用可能であり、Redisのメモリ問題をデバッグするための最初のステップです。ドキュメントから:

    MEMORY USAGEコマンドは、キーとその値をRAMに格納するために必要なバイト数を報告します。報告される使用量は、その値に必要なデータと管理オーバーヘッドのメモリ割り当ての合計です。

    次に例を示します:

    MEMORY USAGE users_by_reputation
    (integer) 2923419
    

    キー、値、および内部オーバーヘッドを格納するために使用されるバイト数を表す単純な整数が返されます。特定のキーのメモリ使用量をすばやく見つけるために、これよりも簡単になることはありません。

    考えられる2つの短所は次のとおりです。

    1. このコマンドは、Redis4.0.0以降でのみ使用できます。これはほとんどのクラウドプロバイダーを除外します。
    2. 1つのキーで使用されているメモリのみが表示されるため、問題の原因となっている1つまたは複数のキーを事前に知らない限り、このコマンドの有用性は非常に限られています。

    redis-rdb-tools

    redis-rdb-toolsは、控えめなMEMORY USAGEを超えた気の利いた小さなコマンドラインツールです。 上で説明したコマンド。これは、Redis専用の人気のある強力なメモリプロファイリングツールであり、Redisダンプ(.rdb)ファイルを解析し、使用されるメモリ、データタイプ、要素数などの詳細を含む、ダンプ内の各キーの詳細なメモリプロファイルを生成します。また、処理されるキーをフィルタリングできるため、オプションで、特定のパターンに一致する特定のキーまたはキーのサブセットに対して分析を実行できます。分析の出力は、キー、使用済みメモリ、データタイプ、要素数などの列を含むCSVファイルです。

    MEMORY USAGEとは異なり、このツールは非常に優れています。 このツールは単一のキーでのみ機能するコマンドで、データセット全体を分析し、結果をCSV形式で出力します。つまり、任意のSQLデータベースにロードして、任意のクエリを実行し、必要に応じて並べ替えてフィルタリングできます。 、SQLのすべての機能を備えているため、データのメモリコストに関する優れた洞察が得られます。ボーナスとして、4.0.0より前のバージョンのRedisを使用している場合でも、必要に応じてこのツールを使用して単一のキーを分析できます。このツールは、Redisに依存する代わりに、Redisが生成するバイナリダンプを解析することで機能するためです。メモリ使用量を報告します。反対に、このアプローチの違いは、プロジェクトのドキュメントに記載されているように、計算されたメモリ使用量が正確な数値よりも推定値であることを意味します。ただし、メモリ使用量の問題を特定することが目標である場合、これは実際には問題ではありません。キーの相対的なサイズと、使用する必要のあるメモリを大幅に多く使用するキーを特定することに関心があるためです。本当に無関係です。

    RDBTools

    RDBToolsは、メモリの最適化に主に焦点を当てて、Redisを管理および最適化するためのいくつかのツールを提供するWebベースのツールです。これは、上記のオープンソースのredis-rdb-toolsプロジェクトから生まれました。これを使用すると、インスタンスをポイントして[分析]をクリックするだけで、Redisサーバーのメモリ使用量を簡単に分析できます。このツールは、実行中のインスタンスからダンプをダウンロードして分析し、コマンドラインと同様に、メモリ使用量、データ型、エンコーディング、要素数などのさまざまなパラメータに基づいてキーをフィルタリングおよび並べ替えるための洗練されたUIを提供します。ツールですが、ダンプの取得、メモリプロファイルの生成、データベースの設定、プロファイルのインポート、クエリの記述と実行などの手作業は必要ありません。

    それ以外に、RDBToolsはメモリプロファイルからいくつかのチャートとグラフを生成し、業界標準とRedisの最適化の長年の経験に基づいて、Redisサーバーの構成を最適化するための推奨事項とともに、データをさらに深く理解できるようにします。さらに多くのメモリ節約。メモリの最適化とは別に、組み込みのリッチCLI、インラインドキュメントを備えた構成エディター、リッチライブデータビジュアライザーなど、Redisを使用するすべての人に役立つ他の多くの機能があります。

    RDBToolsはDockerイメージとして利用でき、Docker Hubで利用でき、自分のマシンで実行できるため、機密データの漏洩を心配する必要はありません。試用版は永久に無料で利用できますが、いくつかの使用制限があります。利用可能なさまざまな有料プランの詳細については、料金ページをご覧ください。

    結論

    Redisのようなインメモリデータベースを使用する場合、メモリ不足は避けられない問題です。すべての最適化問題と同様に、最初のステップは問題を正しく診断することです。検証されていない仮説に基づいて結論にすばやくジャンプしたいという誘惑に抵抗することが重要です。 「測定、測定、測定」は、最適化に関してはゲームの名前であり、Redisメモリの問題を洞察するためのさまざまな方法とツールがあります。どちらが最適かは、特定のニーズと開発プロセスのどこにいるかによって異なります。 Redisを使い始めたばかりの人にとっては、個々のキーを監視するだけで十分ですが、Redisのヘビーユーザーにとっては、後で痛みを軽減するために、すべてのベルとホイッスルを備えた専用のGUIツールを使用するのは確かに理にかなっています。どちらを選択する場合でも、問題を解決する前に必ず問題の根本を理解してください。Redisでメモリの問題が発生している場合は、実際に必要なメモリよりも多くのメモリを使用している可能性があることを忘れないでください。


    1. Mongodb配列$pushおよび$pull

    2. MongoDBで$allを使用して配列値を照合するための複数の$elemMatch式?

    3. mongodbでクエリに参加する方法は?

    4. マングース_idと文字列の比較