Redis:データベースのサイズ/キーのサイズを表示する


88

私のredisインスタンスは非常に大きくなっているようです。そこにある複数のデータベースのうち、どれだけのメモリを消費しているかを調べたいと思います。RedisのINFOコマンドは、データベースごとの合計サイズとキーの数を表示するだけなので、あまり洞察が得られません...したがって、redisサーバーを監視するときに詳細情報を提供するツール/アイデアをいただければ幸いです。

Redisのドキュメントには、特定のキーの消費メモリを返すことができるコマンドが示されていません。そのため、バグのあるコードがRedisに大量の「ゴミ」を書き込むとしたら、これを見つけるのは非常に難しいでしょう...

回答:


113

だから私自身の問題に対する私の解決策:redis-cliもう少し長く遊んだ後、それはキーのDEBUG OBJECT <key>ようなものを明らかにすることを発見しましたserializedlength、それは実際に私が探していたものでした...

データベース全体の場合KEYS *、選択したスクリプト言語でそれほど難しくないはずのすべての値を集約する必要があります...

悪い点は、redis.ioには実際には多くの情報がないことDEBUG OBJECTです。


1
シリアル化された長さは、オブジェクト全体のサイズ(バイト単位)ですか?
ラフィアン2012

18
@BernhardVallant、回答ありがとうございます。私は先に進み、すべてのキーとそのサイズを人間が読める形式で印刷する簡単なスクリプトを作成しました。私が共有すると思った。:) gist.github.com/epicserve/5699837
ブレントオコナー

13
serializedlengthの値は、メモリサイズに関するものではありません。これは、ディスク上のRDBファイルに保存するときにオブジェクトが取るサイズです。ソースコードを確認してください:github.com/antirez/redis/blob/…およびgithub.com/antirez/redis/blob/…–
Hugo Tavares

メモリ内のキーまたは値またはキー値のサイズを取得する方法がないようです(ディスクにダンプされたサイズではありません)
Avner Barr

4
参考:AWS ElastiCache Redis、docs.aws.amazon.com / AmazonElastiCache / latest / UserGuide / …でDEBUGを使用して何も試さないでください。redis-cli --bigkeysがストールすることがわかった
sonjz 2018

70

コメントからの解決策はそれ自身の答えに値します:

redis-cli --bigkeys

1
ビッグキーは、格納されている値のサイズではなく、キーのサイズとほぼ同じです。したがってa、4GBの値のキーを持つことができますが、これはビッグキーには表示されません。(これはgist.github.com/michael-grunder/9257326およびdocs.redislabs.com/latest/ri/memory-optimizations/…によって行わます
EoghanM

40

MEMORY USAGE key コマンドは、キーとその値をRAMに保存するために必要なバイト数を示します。

報告された使用量は、その値に必要なデータと管理オーバーヘッドのメモリ割り当ての合計です(ソースredisドキュメント)


11
これはバージョン> 4.0でのみ使用できます
teik 2018

15

このプロジェクトを見てください。これは、regexとプレフィックスに基づいたキースペースに関するいくつかの興味深い統計を出力します。DEBUG OBJECTコマンドを使用してデータベースをスキャンし、キーのグループを識別して、それらが占有しているスペースの割合を推定します。

https://github.com/snmaynard/redis-audit

出力は次のようになります。

Summary  

---------------------------------------------------+--------------+-------------------+---------------------------------------------------  
Key                                                | Memory Usage | Expiry Proportion | Last Access Time                                    
---------------------------------------------------+--------------+-------------------+---------------------------------------------------  
notification_3109439                               | 88.14%       | 0.0%              | 2 minutes                               
user_profile_3897016                               | 11.86%       | 99.98%            | 20 seconds  
---------------------------------------------------+--------------+-------------------+---------------------------------------------------  

またはこれ:https//github.com/sripathikrishnan/redis-rdb-toolsこれは、dump.rdbファイルをオフラインで分析することによってキースペース全体を完全に分析します。これもうまくいきます。データベース内のエントリの平均/最小/最大サイズを指定でき、プレフィックスに基づいて実行することもできます。


8

Redisキーをサンプリングし、タイプ別にグループ化すると非常に便利な場合があります。Salvatoreは、redis-samplerと呼ばれるツールを作成しました。このツールは、約10000個のRANDOMKEYコマンドを発行し、その後TYPEに取得したキーを発行します。ほんの数秒または数分で、キータイプの分布をかなり正確に把握できるはずです。

私は拡張機能を作成しました(残念ながら、作業に関連しているため、オープンソースではありません)。これにより、regexを介してキー名のイントロスペクションが少し追加され、アプリケーションキーの種類がわかります(名前の構造に応じて)。を使用して、Redisに保存されます。redis-samplerのより一般的な出力と組み合わせると、何が起こっているのかについて非常に良いアイデアが得られるはずです。


7
Tks、実際にはredis-cli --bigkeys
nmat 2016

4

おそらく、dbファイルに対してイントロスペクションを行うことができます。プロトコルは比較的単純です(まだ十分に文書化されていません)ので、どの個々のキーが多くのスペースを占めているかを判断するためのパーサーを作成できます。


新しい提案:

MONITOR何が書かれているのかをライブで確認するために使用してみましたか?おそらく、移動中のデータに問題があることがわかります。


面白そうですが、それでもサーバー上のredisのメモリ消費量を監視する簡単な方法を見つけようとしています...ダンプを調べることは、デバッグのためにより実用的であるように思われます。ダンプが少ないことは言うまでもありません。今ギグ!
Bernhard Vallant 2011年

redisメーリングリストに問い合わせる必要があります。私はこれに対する「最良の」答えを聞くことに本当に興味があります。
ドナルドマイナー2011年

さて、すでに試してみましたINFOMONITOR、かもしれないが、主な問題は、Redisのを見ていないときは、本当に大きな成長したこと...
ベルンハルトVallant

メーリングリストに投稿しましたが、自分でも答えを見つけました...下記参照!
Bernhard Vallant 2011年

再。dbファイルのイントロスペクション-dump.rdbファイルを解析し、各キーで使用されるおおよそのメモリを報告するcsvファイルを出力するスクリプトを作成しました。github.com/sripathikrishnan/redis-rdb-tools
Sripathi Krishnan


1

私は通常、そのようなシナリオのトラブルシューティングにキーサンプリング方法を好みます。

redis-cli -p 6379 -n db_number --bigkeys

例えば:-

redis-cli -p 6370 -n 0 --bigkeys


なぜこれが「キーサンプリング」方法なのですか?氷山の一角しか見えないので、とても限られていると思います。
MrR
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.