[Redis] 레디스 키 메모리 확인
레디스 Memory Usage를 모니터링하다가, 메모리 사용량이 내려오지를 않아서 어떤 키가 얼마나 많이, 크게 메모리를 잡고 있는지 확인해야 했다.
1. --bigkeys
redis-cli --bigkeys
위 커맨드는 레디스의 keys
커맨드가 아닌 scan
을 해서 제일 큰 사이즈의 키를 가져오는 것이다. scan
을 이용했으므로 운영중에 수행해도 된다.
# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type. You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).
[00.00%] Biggest hash found so far 'CUINV:cuinvItemBase:1000009633774' with 1 fields
[00.00%] Biggest hash found so far 'CUINV:itemCuinv:1000038957413' with 218 fields
[00.01%] Biggest hash found so far 'CUINV:itemCuinv:1000048655508' with 628 fields
[02.20%] Sampled 1000000 keys so far
[04.40%] Sampled 2000000 keys so far
[06.61%] Sampled 3000000 keys so far
[08.81%] Sampled 4000000 keys so far
[11.01%] Sampled 5000000 keys so far
[13.21%] Sampled 6000000 keys so far
[15.42%] Sampled 7000000 keys so far
[17.62%] Sampled 8000000 keys so far
중략
[75.20%] Biggest hash found so far 'DUALZ_ITEM:deliExusDualzItem:2449' with 130890 fields
[77.09%] Sampled 35000000 keys so far
[79.29%] Sampled 36000000 keys so far
[81.49%] Sampled 37000000 keys so far
[83.69%] Sampled 38000000 keys so far
[85.90%] Sampled 39000000 keys so far
[88.10%] Sampled 40000000 keys so far
[90.30%] Sampled 41000000 keys so far
[92.50%] Sampled 42000000 keys so far
[94.71%] Sampled 43000000 keys so far
[96.91%] Sampled 44000000 keys so far
[99.11%] Sampled 45000000 keys so far
-------- summary -------
Sampled 45310992 keys in the keyspace!
Total key length in bytes is 1639051611 (avg len 36.17)
Biggest hash found 'DUALZ_ITEM:deliExusDualzItem:2449' has 130890 fields
Biggest string found 'ITEM:brand:3000047456' has 473 bytes
0 lists with 0 items (00.00% of keys, avg size 0.00)
45310989 hashs with 132293864 fields (100.00% of keys, avg size 2.92)
3 strings with 1316 bytes (00.00% of keys, avg size 438.67)
0 streams with 0 entries (00.00% of keys, avg size 0.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
db에 있는 모든 key를 scan하며, STRING, HASH, SET 등 다양한 type
의 키에 대한 summary를 내어 준다.
2. DEBUG OBJECT
> DEBUG OBJECT <KEY>
Value at:0x7fcbee0cb710 refcount:1 encoding:hashtable serializedlength:15700574 lru:12967723 lru_seconds_idle:297
serializedlength
는 메모리 size가 아니라 디스크에 저장될 RDB파일에 오브젝트 사이즈다. string이면 string의 length
3. memory usage
> memory usage <KEY>
(integer) 24392400
해당 키의 byte 크기가 리턴된다.
4. More statistics
redis-audit
DEBUG OBJECT
를 써서 db를 스캔한다. 하지만 KEYS*
명령어로 모든 키에 대해서 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
---------------------------------------------------+--------------+-------------------+---------------------------------------------------
redis-rdb-tools
서버에 저장된 dump.rdb file
을 사용해서 full analysis를 한다. 레디스 데이터를 가지고 통계를 내는 것이 아니라서 안정적일 것 같다.
https://github.com/sripathikrishnan/redis-rdb-tools
> rdb -c memory /var/redis/6379/dump.rdb --bytes 128 -f memory.csv
> cat memory.csv
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,list,lizards,241,quicklist,5,19
0,list,user_list,190,quicklist,3,7
2,hash,baloon,138,ziplist,3,11
2,list,armadillo,231,quicklist,5,20
2,hash,aroma,129,ziplist,3,11
redis-sampler
RANDOMKEY
커맨드로 10000 랜덤키를 샘플링해서 통계를 낸다.
댓글남기기