2011-10-03 7 views
63

Ví dụ của tôi có vẻ đang phát triển rất lớn và tôi muốn tìm hiểu xem có nhiều cơ sở dữ liệu nào trong đó tiêu thụ bao nhiêu bộ nhớ. Redis 'INFO lệnh chỉ cho tôi thấy 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 cái nhìn sâu sắc ... Vì vậy, bất kỳ công cụ/ý tưởng nào cho tôi thêm thông tin khi giám sát máy chủ redis sẽ được đánh giá cao.Redis: Hiển thị kích thước/kích thước cơ sở dữ liệu cho các phím

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

Trả lời

81

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 với redis-cli lâu hơn một chút tôi phát hiện ra rằng DEBUG OBJECT <key> cho thấy một cái gì đó giống như serializedlength khóa, mà là một cái gì đó trên thực tế tôi đang tìm kiếm ...

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

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

+1

Chiều dài được nối tiếp có phải là kích thước của toàn bộ đối tượng, tính theo byte không? – raffian

+0

@RaffiM: Dường như với tôi, nhưng tôi chưa tìm thấy bất kỳ tài liệu nào về nó ... –

+14

@BernhardVallant, cảm ơn câu trả lời. Tôi đã đi trước và viết một kịch bản nhanh để in tất cả các phím và kích thước của chúng theo một định dạng có thể đọc được. Nghĩ rằng tôi sẽ chia sẻ. :) https://gist.github.com/epicserve/5699837 – Brent

3

Có lẽ bạn có thể thực hiện một số nội dung về tệp db. Giao thức này tương đối đơn giản (chưa được tài liệu rõ ràng), 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 các khóa riêng lẻ nào chiếm nhiều không gian.


gợi ý mới:

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

+0

Có vẻ là thú vị Tuy nhiên, 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ẻ là thực tế hơn để gỡ lỗi cho tôi, không quá đề 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ờ! –

+0

Bạn nên yêu cầu 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 việc này. –

+0

Cũng đã thử 'INFO' và' MONITOR', nhưng có thể vấn đề chính là, khi không xem redis phát triển thực sự lớn ... –

7

Bạn có thể thấy rất hữu ích khi lấy mẫu các khóa Redis và nhóm chúng theo loại. Salvatore đã viết một công cụ gọi là redis-sampler có vấn đề khoảng 10000 RANDOMKEY lệnh theo sau là TYPE trên các khóa đã truy xuất. Trong vài giây, hoặc vài phút, bạn sẽ có một 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 phần mở rộng (không may ở bất kỳ nơi nào nguồn mở vì nó liên quan đến công việc), bổ sung thêm một chút nội tâm của các tên khóa thông qua các regex cung cấp cho bạn ý tưởng về loại khóa ứng dụng nào (theo bất kỳ tên nào cấu trúc bạn đ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 rất tốt về những gì đang xảy ra.

+6

Tks, thực sự đã giúp tôi nhiều hơn dòng lệnh "redis-cli --bigkeys' – nmat

+3

" redis-cli --bigkeys "thật tuyệt vời !!!! –

12

Hãy xem dự án này nó đưa ra một số thống kê thú vị về không gian chính dựa trên regex và tiền tố. Nó sử dụng lệnh DEBUG OBJECT 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

Output trông như thế này:

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 này này: https://github.com/sripathikrishnan/redis-rdb-tools mà hiện một phân tích đầy đủ về toàn bộ keyspace bằng cách phân tích một file dump.rdb ẩ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 avg/min/max cho các mục trong db của bạn, và thậm chí sẽ làm nó dựa trên một tiền tố.

18

Các giải pháp từ các ý kiến ​​xứng đáng với nó là câu trả lời của riêng:

redis-cli --bigkeys