Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@drAlberT
Forked from bennadel/group-by-ip.sql
Created August 17, 2017 10:36
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save drAlberT/815d813fef3334ebbe19e2c920756307 to your computer and use it in GitHub Desktop.
Save drAlberT/815d813fef3334ebbe19e2c920756307 to your computer and use it in GitHub Desktop.
Grouping The MySQL PROCESSLIST By IP Address To View Connection Counts
SELECT
tmp.ipAddress,
-- Calculate how many connections are being held by this IP address.
COUNT( * ) AS ipAddressCount,
-- For each connection, the TIME column represent how many SECONDS it has been in
-- its current state. Running some aggregates will give us a fuzzy picture of what
-- the connections from this IP address is doing.
FLOOR( AVG( tmp.time ) ) AS timeAVG,
MAX( tmp.time ) AS timeMAX
FROM
-- Let's create an intermediary table that includes an additional column representing
-- the client IP address without the port.
(
SELECT
-- We don't actually need all of these columns for the demo. But, I'm
-- including them here to demonstrate what fields COULD be used in the
-- processlist system.
pl.id,
pl.user,
pl.host,
pl.db,
pl.command,
pl.time,
pl.state,
pl.info,
-- The host column is in the format of "IP:PORT". We want to strip off
-- the port number so that we can group the results by the IP alone.
LEFT( pl.host, ( LOCATE( ':', pl.host ) - 1 ) ) AS ipAddress
FROM
INFORMATION_SCHEMA.PROCESSLIST pl
) AS tmp
GROUP BY
tmp.ipAddress
ORDER BY
ipAddressCount DESC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment