原因
MES 项⽬中查询设备使⽤了哪些物料。job_product_component的machine_name 和material_name 既不是主键也不是索引。表的⼤⼩如下图所⽰
Sql语句如下。当查询的machinename和materialname 参数都为null的时候返回的是全表数据。
SELECT *FROM
job_product_componentWHERE
IF(@machinename IS NULL, 1,
machine_name = @machinename) AND IF(@materialname IS NULL, 1,
component_name = @materialname);
explain SELECT * FROM job_product_component WHERE IF(@machinename IS NULL, 1, machine_name =@machinename) AND IF(@materialname IS NULL,1,component_name = @materialname);
explain SELECT * FROM job_product_component WHERE IF(@machinename IS NULL, 1, machine_name =@machinename) and component_name =@materialname;
explain SELECT * FROM job_product_component WHERE machine_name =@machinename and component_name=@materialname;
现象
产线断线
通过查看CPU,发现CPU疯涨,服务器内存溢出解决办法
杀掉查询语句:发现杀掉了还有新的,原因是rabbitmq有确认和重发机制,收不到回复消息,会重新发送。-----不可⾏通过Rabbitmq》queue》purge message清除队列的所有消息,有风险-----⼀般不可⾏。
修改sql语句( select .... where false),然后杀掉正在进⾏的mysql查询线程,下⼀次查询时为即可发送正常结果。由于material_name 和machine_name 都不是索引,这个功能影响性能,⼀般不能做,除⾮停机加索引,或者分页查询。
因篇幅问题不能全部显示,请点此查看更多更全内容