我正在为小型VM上的带RediSearch模块的IoT项目Redis Server进行测试。
我已经使用StackExchange Redis客户端库编译了一个测试.NET Core控制台应用程序,该库在一个简单的同步for循环中创建了1M文档。
每个文档都是通过反映c#类/实体完成的attr /值对序列化,具有许多属性(其中一些索引为TAG或NUMERIC RediSearch字段)。
VM非常小,只有2GB RAM / 2个2.0 GHz内核Linux Debian 9服务器,我还想看看RAM的使用量如何增长。
到目前为止,这个过程花了15分钟才能完成,对我来说非常好(每秒创建和建立索引大约1300个实体),RAM毫无问题地增长到1.7 GB。
然后我尝试通过运行另一个简单的同步来利用FT.DEL ... DD
RediSearch命令循环删除100万个集合中的600k(将400k文档保留在内存中)。
此循环大约需要7分钟才能完成。
问题在于,现在服务器的redis-server进程将一个核心固定在60%。
删除密钥后,我等待了一段时间,以查看是否有任何CPU密集型后台进程(例如垃圾回收)需要一些时间才能完成,但看来CPU从未被释放。
服务器现在已闲置了4多个小时,一个CPU仍处于60%的状态。
VM:Linux Debian 9 x64 Redis的:5.0.3 RediSearch:1.6.0(从源代码本地编译)
redis-stat仪表板快照:
。
在提示时从htop捕获快照:
。
dbsize
的redis-cli输出:
127.0.0.1:6379> dbsize
(integer) 400005
ft.info
在相关索引上的redis-cli输出:
127.0.0.1:6379> ft.info Device
1) index_name
2) Device
3) index_options
4) 1) "NOFREQS"
2) "NOOFFSETS"
5) fields
6) 1) 1) SerialNumber
2) type
3) TAG
4) SEPARATOR
5) ,
6) SORTABLE
2) 1) Node
2) type
3) TAG
4) SEPARATOR
5) ,
6) SORTABLE
3) 1) NexusNode
2) type
3) TAG
4) SEPARATOR
5) ,
6) SORTABLE
4) 1) NeedsCfgRefresh
2) type
3) NUMERIC
4) SORTABLE
7) num_docs
8) "400000"
9) max_doc_id
10) "999999"
11) num_terms
12) "0"
13) num_records
14) "551411"
15) inverted_sz_mb
16) "17592186044415.381"
17) total_inverted_index_blocks
18) "20001"
19) offset_vectors_sz_mb
20) "0"
21) doc_table_size_mb
22) "92.400358200073242"
23) sortable_values_size_mb
24) "123.97753715515137"
25) key_table_size_mb
26) "8.7738475799560547"
27) records_per_doc_avg
28) "1.3785274999999999"
29) bytes_per_record_avg
30) "33453710705280.727"
31) offsets_per_term_avg
32) "0"
33) offset_bits_per_record_avg
34) "-nan"
35) gc_stats
36) 1) current_hz
2) "99"
3) bytes_collected
4) "3648584"
5) effectiv_cycles_rate
6) "0.17567907444668007"
37) cursor_stats
38) 1) global_idle
2) (integer) 0
3) global_total
4) (integer) 0
5) index_capacity
6) (integer) 128
7) index_total
8) (integer) 0
ft.config get *
的redis-cli输出:
127.0.0.1:6379> ft.config get *
1) 1) EXTLOAD
2) (nil)
2) 1) SAFEMODE
2) false
3) 1) NOGC
2) false
4) 1) MINPREFIX
2) 2
5) 1) FORKGC_SLEEP_BEFORE_EXIT
2) 0
6) 1) MAXDOCTABLESIZE
2) 1000000
7) 1) MAXEXPANSIONS
2) 200
8) 1) TIMEOUT
2) 500
9) 1) INDEX_THREADS
2) 8
10) 1) SEARCH_THREADS
2) 20
11) 1) FRISOINI
2) (nil)
12) 1) ON_TIMEOUT
2) return
13) 1) GCSCANSIZE
2) 100
14) 1) MIN_PHONETIC_TERM_LEN
2) 3
15) 1) GC_POLICY
2) default
16) 1) FORK_GC_RUN_INTERVAL
2) 10
有人遇到过类似的问题吗?