|
| 1 | +# Big Key Analyzer |
| 2 | + |
| 3 | +大key分析工具,用于分析PikiwiDB实例中的大key情况。本工具适用于unstable分支新的存储结构,支持多种目录结构: |
| 4 | +- 单实例 RocksDB |
| 5 | +- 多DB实例 (db/0, db/1, db/2...) |
| 6 | +- 直接分区目录 (0/, 1/, 2/...) |
| 7 | +- **新增**: dbN/M 三层嵌套结构 (db0/0, db0/1, db1/0...) |
| 8 | + |
| 9 | +## 功能特点 |
| 10 | + |
| 11 | +- 支持分析各种数据类型(strings, hashes, lists, sets, zsets)的大key |
| 12 | +- 可以按大小过滤key |
| 13 | +- 可以限制输出结果数量(top N) |
| 14 | +- 支持按key前缀统计 |
| 15 | +- 输出结果包含key类型、大小和过期时间(TTL) |
| 16 | +- 可以将结果输出到文件 |
| 17 | + |
| 18 | +## 编译 |
| 19 | + |
| 20 | +在PikiwiDB根目录下执行: |
| 21 | + |
| 22 | +```bash |
| 23 | +mkdir -p build |
| 24 | +cd build |
| 25 | +cmake .. |
| 26 | +make bigkey_analyzer |
| 27 | +``` |
| 28 | + |
| 29 | +编译完成后,可执行文件会生成在build目录下。 |
| 30 | + |
| 31 | +## 使用方法 |
| 32 | + |
| 33 | +``` |
| 34 | +Usage: bigkey_analyzer [OPTIONS] <db_path> |
| 35 | +Options: |
| 36 | + --min-size=SIZE Only show keys larger than SIZE bytes |
| 37 | + --top=N Only show top N largest keys |
| 38 | + --prefix-stat Show statistics by key prefix |
| 39 | + --prefix-delimiter=C Character used to delimit prefix (default: ':') |
| 40 | + --type=TYPE Only analyze specific type (strings|hashes|lists|sets|zsets|all) |
| 41 | + --output=FILE Write output to file instead of stdout |
| 42 | + --help Display this help message |
| 43 | +``` |
| 44 | + |
| 45 | +## 示例 |
| 46 | + |
| 47 | +1. 分析所有大key: |
| 48 | + |
| 49 | +```bash |
| 50 | +# 单实例 |
| 51 | +./bigkey_analyzer /path/to/pikiwidb/data |
| 52 | + |
| 53 | +# 多DB实例(db/0, db/1, db/2...) |
| 54 | +./bigkey_analyzer /path/to/pikiwidb |
| 55 | +``` |
| 56 | + |
| 57 | +2. 只分析大于1MB的key: |
| 58 | + |
| 59 | +```bash |
| 60 | +./bigkey_analyzer --min-size=1048576 /path/to/pikiwidb/data |
| 61 | +``` |
| 62 | + |
| 63 | +3. 只显示前10个最大的key: |
| 64 | + |
| 65 | +```bash |
| 66 | +./bigkey_analyzer --top=10 /path/to/pikiwidb/data |
| 67 | +``` |
| 68 | + |
| 69 | +4. 只分析hash类型的key: |
| 70 | + |
| 71 | +```bash |
| 72 | +./bigkey_analyzer --type=hashes /path/to/pikiwidb/data |
| 73 | +``` |
| 74 | + |
| 75 | +5. 分析并按前缀统计: |
| 76 | + |
| 77 | +```bash |
| 78 | +./bigkey_analyzer --prefix-stat /path/to/pikiwidb/data |
| 79 | +``` |
| 80 | + |
| 81 | +6. 输出结果到文件: |
| 82 | + |
| 83 | +```bash |
| 84 | +./bigkey_analyzer --output=result.txt /path/to/pikiwidb/data |
| 85 | +``` |
| 86 | + |
| 87 | +## 输出格式 |
| 88 | + |
| 89 | +工具输出包括三部分: |
| 90 | + |
| 91 | +1. 大key列表 - 按大小降序排列 |
| 92 | +2. 按前缀统计(如果使用--prefix-stat选项) |
| 93 | +3. 总结统计信息 |
| 94 | + |
| 95 | +示例输出: |
| 96 | + |
| 97 | +``` |
| 98 | +===== Big Key Analysis ===== |
| 99 | +DB Partition Type Size Key TTL |
| 100 | +db0 1 hash 1048576 user:profile:1001 -1 |
| 101 | +db0 2 zset 524288 ranking:global 3600 |
| 102 | +db1 0 string 262144 config:settings -1 |
| 103 | +... |
| 104 | +
|
| 105 | +===== Key Prefix Statistics ===== |
| 106 | +Prefix Count Total Size Avg Size |
| 107 | +user 100 10485760 104857.6 |
| 108 | +ranking 50 2621440 52428.8 |
| 109 | +config 10 524288 52428.8 |
| 110 | +... |
| 111 | +
|
| 112 | +===== Summary ===== |
| 113 | +Total keys analyzed: 160 |
| 114 | +Keys by type: |
| 115 | + hash: 50 keys, 25.0 MB total, 524288.0 bytes avg |
| 116 | + zset: 30 keys, 15.0 MB total, 524288.0 bytes avg |
| 117 | + string: 80 keys, 10.0 MB total, 131072.0 bytes avg |
| 118 | +``` |
| 119 | + |
| 120 | +## 注意事项 |
| 121 | + |
| 122 | +- 工具只读取数据库,不会进行任何写操作 |
| 123 | +- 大key的大小包括key和value的总大小 |
| 124 | +- 已过期的key不会被包含在分析结果中 |
0 commit comments