Redisメモリ分析方法
24285 ワード
背景
ライン上では、自分のRedisインスタンス内のデータのメモリ分布を知りたいというユーザーによく遭遇します.オンラインインスタンスの使用に影響を及ぼさないように、bgsaveを用いてdumpを生成するのが一般的である.rdbファイルは、redis-rdb-toolsとsqliteを組み合わせて静的解析を行います.総じて言えば、分析全体の過程は簡単で実用的で、すべてのRedisのユーザーが非常に把握する価値のある方法である.
バックアップの作成
自己構築Redisはクライアントで
メモリスナップショットの生成
redis-rdb-toolsはpythonのrdbファイルを解析するツールで、主に以下の3つの機能があります.
メモリスナップショットの生成
jsonフォーマットにダンプ
2つのdumpファイルを標準diffツールで比較する
メモリの使用を分析した後、主にメモリスナップショットの生成機能を使用します.
redis-rdb-toolsインストール
redis-rdb-toolsには2つのインストール方法があり、いずれかを選択すればよい.
PYPIでの取り付け
ソースからインストール
redis-rdb-toolsを使用してメモリスナップショットを生成する
メモリスナップショットを生成するコマンドは、次のとおりです.
CSV形式のメモリレポートを生成します.含まれる列は、データベースID、データ型、key、メモリ使用量(byte)、符号化です.メモリ使用量にはkey、value、その他の値が含まれます.
注意:メモリ使用量は理論的な近似値であり、一般的には実際の値よりやや低い.memory.csv例:
メモリスナップショットの分析
SQLiteは軽量なデータベースです.先に生成したcsvをデータベースにインポートした後,sql文を用いてRedisのメモリデータを容易に解析できるようになった.
インポート方法
データをインポートした後、次に分析したいように分析します.簡単な例をいくつか挙げます.
クエリkey個数
合計メモリー使用量の問合せ
クエリメモリ使用量が最大10 key
クエリー・メンバー数1000個以上のlist
まとめ
redis-rdb-tools+sqliteを使用することで、redisインスタンスのメモリ状況の静的解析を容易に行うことができます.プロセス全体も比較的簡単で、rdbを取得した後でよい.
実際の使用では、1つのリストに10 GB以上のコンテンツが蓄積されていることが発見され、43 MB以上のstringタイプのvalueも発見され、ユーザーの疑問を解くだけでなく、ビジネスにおける潜在的なリスク点を排除し、ビジネス性能のボトルネックを見つけるのに役立つことが多い.
https://help.aliyun.com/knowledge_detail/50037.html?spm=5176.doc26356.6.598.X3kbrb
ライン上では、自分のRedisインスタンス内のデータのメモリ分布を知りたいというユーザーによく遭遇します.オンラインインスタンスの使用に影響を及ぼさないように、bgsaveを用いてdumpを生成するのが一般的である.rdbファイルは、redis-rdb-toolsとsqliteを組み合わせて静的解析を行います.総じて言えば、分析全体の過程は簡単で実用的で、すべてのRedisのユーザーが非常に把握する価値のある方法である.
バックアップの作成
自己構築Redisはクライアントで
bgsave
を実行してrdbファイルを生成し、ダウンロードしたデータはrdbフォーマットファイルである.メモリスナップショットの生成
redis-rdb-toolsはpythonのrdbファイルを解析するツールで、主に以下の3つの機能があります.
メモリスナップショットの生成
jsonフォーマットにダンプ
2つのdumpファイルを標準diffツールで比較する
メモリの使用を分析した後、主にメモリスナップショットの生成機能を使用します.
redis-rdb-toolsインストール
redis-rdb-toolsには2つのインストール方法があり、いずれかを選択すればよい.
PYPIでの取り付け
pip install rdbtools
ソースからインストール
git clone https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools
sudo python setup.py install
redis-rdb-toolsを使用してメモリスナップショットを生成する
メモリスナップショットを生成するコマンドは、次のとおりです.
rdb -c memory dump.rdb > memory.csv
CSV形式のメモリレポートを生成します.含まれる列は、データベースID、データ型、key、メモリ使用量(byte)、符号化です.メモリ使用量にはkey、value、その他の値が含まれます.
注意:メモリ使用量は理論的な近似値であり、一般的には実際の値よりやや低い.memory.csv例:
$head memory.csv
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,string,"orderAt:377671748",96,string,8,8
0,string,"orderAt:413052773",96,string,8,8
0,sortedset,"Artical:Comments:7386",81740,skiplist,479,41
0,sortedset,"pay:id:18029",2443,ziplist,84,16
0,string,"orderAt:452389458",96,string,8,8
メモリスナップショットの分析
SQLiteは軽量なデータベースです.先に生成したcsvをデータベースにインポートした後,sql文を用いてRedisのメモリデータを容易に解析できるようになった.
インポート方法
sqlite3 memory.db
sqlite> create table memory(database int,type varchar(128),key varchar(128),size_in_bytes int,encoding varchar(128),num_elements int,len_largest_element varchar(128));
sqlite>.mode csv memory
sqlite>.import memory.csv memory
データをインポートした後、次に分析したいように分析します.簡単な例をいくつか挙げます.
クエリkey個数
sqlite>select count(*) from memory;
合計メモリー使用量の問合せ
sqlite>select sum(size_in_bytes) from memory;
クエリメモリ使用量が最大10 key
sqlite>select * from memory order by size_in_bytes desc limit 10;
クエリー・メンバー数1000個以上のlist
sqlite>select * from memory where type='list' and num_elements > 1000 ;
まとめ
redis-rdb-tools+sqliteを使用することで、redisインスタンスのメモリ状況の静的解析を容易に行うことができます.プロセス全体も比較的簡単で、rdbを取得した後でよい.
rdb -c memory dump.rdb > memory.csv;
sqlite3 memory.db
sqlite> create table memory(database int,type varchar(128),key varchar(128),size_in_bytes int,encoding varchar(128),num_elements int,len_largest_element varchar(128));
sqlite>.mode csv memory
sqlite>.import memory.csv memory
実際の使用では、1つのリストに10 GB以上のコンテンツが蓄積されていることが発見され、43 MB以上のstringタイプのvalueも発見され、ユーザーの疑問を解くだけでなく、ビジネスにおける潜在的なリスク点を排除し、ビジネス性能のボトルネックを見つけるのに役立つことが多い.
https://help.aliyun.com/knowledge_detail/50037.html?spm=5176.doc26356.6.598.X3kbrb