【详述】我们业务出现count()的返回值不稳定的问题。排查下来发现最小化的问题是:
mysql> SELECT count() FROM drtag.record_info_t WHERE resource_id = 1909273207 AND tag_list_str NOT LIKE ‘%;999;%’;
±---------+
| count(*) |
±---------+
| 0 |
±---------+
1 row in set (0.06 sec)
mysql> select tag_list_str from drtag.record_info_t WHERE resource_id = 1909273207;
±-------------------------------------------------+
| tag_list_str |
±-------------------------------------------------+
| ;71;795;796;804;808;814;816;831;1291;2181;10630; |
±-------------------------------------------------+
1 row in set (0.02 sec)
mysql>
很明显发现count(*)的值是错的。对当前case,几乎100%都是错的,还有些字段会有50%左右的正确率。猜测是ngram-bf的实现在not like下的执行有bug。
建表语句中的索引:
INDEX idx_tag_list_str (tag_list_str) USING NGRAMBF(“bloom_filter_fpp” = “0.01”, “case_sensitive” = “true”, “gram_num” = “3”) COMMENT ‘’,
【背景】使用starrocks存算一体作为db
【业务影响】搜索和count,会偏少、不稳定,影响业务数据质量。
【是否存算分离】否
【StarRocks版本】3.4.3-a01aa59
【集群规模】3fe, 5be
【机器信息】CPU虚拟核/内存/网卡,例如:48C/64G/万兆
【联系方式】社区群28-llljjj
【附件】
再补充另外一个字段的不稳定现象:
mysql> SELECT count() FROM drtag.record_info_t WHERE resource_id = 1909273207 AND native_tag_list_str NOT LIKE ‘%;799;%’;
±---------+
| count() |
±---------+
| 1 |
±---------+
1 row in set (0.03 sec)
mysql> SELECT count() FROM drtag.record_info_t WHERE resource_id = 1909273207 AND native_tag_list_str NOT LIKE ‘%;799;%’;
±---------+
| count() |
±---------+
| 0 |
±---------+
1 row in set (0.05 sec)
mysql> SELECT count() FROM drtag.record_info_t WHERE resource_id = 1909273207 AND native_tag_list_str NOT LIKE ‘%;799;%’;
±---------+
| count() |
±---------+
| 0 |
±---------+
1 row in set (0.11 sec)
mysql>
