grafana数据过滤器不支持变量
我也不知道该记录在哪儿,事实上,这是一个grafana使用mysql查询数据的问题;
我的mysql是8.0.21版本;
我在grafana上设置两个变量,line_name和tower_name;然后使用sql语句去查询数据,但是有时候,tower_name变量是空的,而且tower_name对应的表的数据量比较大;这直接导致查询语句变成了这样:
# 性能问题还是比较严重 SELECT * FROM (SELECT obj_code as `pms编码`, obj_order as `名称`, p_name as `站线`, device_state as `状态`, city_name as `地市`, maintain_unitname as `运维分部`, cast(last_update_time as char(20)) as '更新时间', obj_id as 'psrId资源id', pms_id as 'astId资产id', obj_type as '台账类型' FROM r_device_tower WHERE p_line in ( SELECT obj_id FROM r_device_line WHERE line_name like '%某某线路%' ))as sub WHERE sub.名称 like '%%'
直接变成慢查询,其实原因出现在【sub.名称 like '%%'】,从结果上来说,要不要这个条件的结果都是一样的;但是mysql那边好像没有优化这样的查询。
然后grafana里面的【filter data by values】过滤器也是垃圾,不支持使用变量来进行过滤;
解决办法是:使用正则表达式:
# 性能问题还是比较严重 SELECT * FROM (SELECT obj_code as `pms编码`, obj_order as `名称`, p_name as `站线`, device_state as `状态`, city_name as `地市`, maintain_unitname as `运维分部`, cast(last_update_time as char(20)) as '更新时间', obj_id as 'psrId资源id', pms_id as 'astId资产id', obj_type as '台账类型' FROM r_device_tower WHERE p_line in ( SELECT obj_id FROM r_device_line WHERE line_name like '%$line_name%' ))as sub WHERE sub.名称 REGEX '.*$tower_name.*';
性能直线上升!
浙公网安备 33010602011771号