Problem statement: A rogue application process is sending multiple copies of exactly the same query to the database so you end up with a ton of them
DBA charge: (a) write a query that checks for these, and (b) for my own purposes, a quick way to kill the duplicate offenders.
-- output just the thread IDs of the duplicates, keeping the oldest version intact
SELECT
DISTINCT(p2.id)
FROM
information_schema.processlist p1
INNER JOIN information_schema.processlist p2
ON p2.info = p1.info
AND p2.id > p1.id
AND p1.time > 300
AND p1.command IS NOT NULL;
-- returns actual executable KILL statements for the duplicates, suitable
-- for a mysql -N -B command line
SELECT DISTINCT
(CONCAT('KILL ', p2.id, ';')) AS killstatements
FROM
information_schema.processlist p1
INNER JOIN information_schema.processlist p2
ON p2.info = p1.info
AND p2.id > p1.id
AND p1.time > 300
AND p1.command IS NOT NULL;