Redis: Hiển thị kích thước / kích thước cơ sở dữ liệu cho các khóa


88

Phiên bản redis của tôi dường như đang phát triển rất lớn và tôi muốn tìm hiểu xem tôi có nhiều cơ sở dữ liệu nào trong đó tiêu thụ bao nhiêu bộ nhớ. INFOLệnh của Redis chỉ hiển thị cho tôi tổng kích thước và số lượng khóa trên mỗi cơ sở dữ liệu mà không cung cấp cho tôi nhiều thông tin chi tiết ... Vì vậy, bất kỳ công cụ / ý tưởng nào cung cấp cho tôi thêm thông tin khi theo dõi máy chủ redis sẽ được đánh giá cao.

Tài liệu của Redis không hiển thị cho tôi bất kỳ lệnh nào có thể trả lại bộ nhớ đã sử dụng của một số khóa nhất định, vì vậy tôi đoán nếu có bất kỳ mã lỗi nào sẽ ghi rất nhiều "rác" để redis thì điều này có thể thực sự khó tìm ...

Câu trả lời:


113

Vì vậy, giải pháp của tôi cho vấn đề của riêng tôi: Sau khi chơi xung quanh redis-climột chút nữa, tôi phát hiện ra rằng nó DEBUG OBJECT <key>tiết lộ một cái gì đó giống như serializedlengthchìa khóa, thực tế là thứ mà tôi đang tìm kiếm ...

Đối với toàn bộ cơ sở dữ liệu, bạn cần phải tổng hợp tất cả các giá trị KEYS *không quá khó với ngôn ngữ kịch bản mà bạn chọn ...

Điều tồi tệ là redis.io không thực sự có nhiều thông tin về DEBUG OBJECT.


1
Độ dài tuần tự có phải là kích thước của toàn bộ đối tượng, tính bằng byte không?
raffian

18
@BernhardVallant, cảm ơn bạn đã trả lời. Tôi đã tiếp tục và viết một kịch bản nhanh chóng in tất cả các phím và kích thước của chúng ở định dạng con người có thể đọc được. Tôi nghĩ rằng tôi sẽ chia sẻ. :) gist.github.com/epicserve/5699837
Brent O'Connor

13
Giá trị của serializedlength không phải về kích thước bộ nhớ! Đó là kích thước mà một đối tượng sẽ có khi lưu vào tệp RDB trên đĩa. Kiểm tra mã nguồn: github.com/antirez/redis/blob/…github.com/antirez/redis/blob/…
Hugo Tavares

có vẻ không phải là một cách để có được kích thước của khóa hoặc giá trị hoặc giá trị khóa trong bộ nhớ (Không phải là đổ kích thước đĩa)
Avner Barr

4
FYI: đừng bận tâm khi thử bất cứ thứ gì với DEBUG trên AWS ElastiCache Redis, docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/… . Thậm chí được tìm thấy redis-cli - những con khỉ sẽ bị đình trệ
sonjz

70

Giải pháp từ các bình luận xứng đáng là câu trả lời của riêng nó:

redis-cli --bigkeys

1
các phím lớn có kích thước bằng kích thước của khóa chứ không phải kích thước của giá trị được lưu trữ .. vì vậy bạn có thể có một khóa acó giá trị 4GB nhưng điều này sẽ không hiển thị trong các phím lớn. (điều này sẽ diễn ra bởi gist.github.com/michael-grunder/9257326docs.redislabs.com/latest/ri/memory-optimizations/… )
EoghanM

40

MEMORY USAGE key lệnh cung cấp cho bạn số byte mà một khóa và giá trị của nó yêu cầu được lưu trữ trong RAM.

Mức sử dụng được báo cáo là tổng số lần phân bổ bộ nhớ cho dữ liệu và chi phí quản trị mà một khóa mà giá trị của nó yêu cầu (tài liệu nguồn redis)


11
cái này chỉ có thể được sử dụng phiên bản> 4.0
teik

15

Hãy xem dự án này, nó đưa ra một số thống kê thú vị về không gian phím dựa trên regex và tiền tố. Nó sử dụng DEBUG OBJECTlệnh và quét db, xác định các nhóm khóa và ước tính phần trăm không gian mà chúng đang chiếm.

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

Đầu ra giống như sau:

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  
---------------------------------------------------+--------------+-------------------+---------------------------------------------------  

Hoặc cái này: https://github.com/sripathikrishnan/redis-rdb-tools thực hiện phân tích đầy đủ trên toàn bộ keyspace bằng cách phân tích tệp dump.rdb ngoại tuyến. Cái này cũng hoạt động tốt. Nó có thể cung cấp cho bạn kích thước trung bình / phút / tối đa cho các mục nhập trong db của bạn và thậm chí sẽ làm điều đó dựa trên tiền tố.


8

Bạn có thể thấy rất hữu ích khi lấy mẫu các phím Redis và nhóm chúng theo loại. Salvatore đã viết một công cụ có tên là redis-sampler để đưa ra khoảng 10000 RANDOMKEYlệnh, theo sau là một TYPEkhóa được truy xuất. Trong vài giây hoặc vài phút, bạn sẽ có được cái nhìn khá chính xác về sự phân bố của các loại khóa.

Tôi đã viết một tiện ích mở rộng (tiếc là không phải ở bất kỳ nơi nào mã nguồn mở vì nó liên quan đến công việc), bổ sung một chút nội dung về các tên khóa thông qua regexs để cung cấp cho bạn ý tưởng về các loại khóa ứng dụng (theo bất kỳ cấu trúc đặt tên nào bạn đang có. đang sử dụng), được lưu trữ trong Redis. Kết hợp với đầu ra tổng quát hơn của redis-sampler, điều này sẽ cung cấp cho bạn một ý tưởng cực kỳ tốt về những gì đang xảy ra.


7
Tks, thực sự đã giúp mình nhiều hơnredis-cli --bigkeys
nmat 13/02/16

4

Có lẽ bạn có thể xem xét nội dung trên tệp db. Giao thức tương đối đơn giản (chưa được ghi chép đầy đủ), vì vậy bạn có thể viết một trình phân tích cú pháp cho nó để xác định những khóa riêng lẻ nào đang chiếm nhiều dung lượng.


Đề xuất mới:

Bạn đã thử sử dụng MONITORđể xem những gì đang được viết, đang sống chưa? Có lẽ bạn có thể tìm thấy vấn đề với dữ liệu đang chuyển động.


Có vẻ thú vị, nhưng tôi đang cố gắng tìm một cách dễ dàng để theo dõi mức tiêu thụ bộ nhớ của redis trên máy chủ ... Kiểm tra kết xuất có vẻ khả thi hơn để gỡ lỗi đối với tôi, không đề cập đến việc kết xuất là một vài hợp đồng biểu diễn ngay bây giờ!
Bernhard Vallant

Bạn nên hỏi danh sách gửi thư redis. Tôi thực sự thú vị khi nghe câu trả lời "tốt nhất" cho điều này.
Donald Miner

Vâng đã cố gắng INFOMONITOR, nhưng có thể là vấn đề chính, mà khi không xem redis lớn thực sự lớn ...
Bernhard Vallant

Được rồi, tôi đã đăng nó vào danh sách gửi thư của họ, nhưng cũng tìm thấy câu trả lời cho riêng tôi ... Xem bên dưới!
Bernhard Vallant

lại. nội dung trên tệp db - Tôi đã viết một tập lệnh để phân tích cú pháp tệp dump.rdb và xuất ra tệp csv báo cáo bộ nhớ gần đúng được sử dụng bởi mỗi khóa. Xem github.com/sripathikrishnan/redis-rdb-tools
Sripathi Krishnan


1

Tôi thường thích phương pháp lấy mẫu chính để khắc phục các tình huống như vậy.

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

Ví dụ:-

redis-cli -p 6370 -n 0 - các phím tắt


Tại sao đây là phương pháp "lấy mẫu chính"? Tôi thấy nó rất hạn chế vì nó chỉ cho thấy phần nổi của tảng băng.
MrR

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.