If you're experiencing slow-down of data-intensive TCP transmissions, you MAY be suffering from "global synchronization", where all TCP talkers on the line end up with roughly synchronous increases in TCP window size (the amount of outstanding bytes allowed before an ACK is received).
The larger the TCP transmit window is, the faster data is pumped between A and B. When you have multiple hosts sending TCP (in the same direction) through a single link, the bandwidth used on this link will fluctuate depending on the window size of all hosts. When the link is not congested, the TCP window size will increase, until packets start dropping (generally for all TCP sessions at the same time) and the TCP window size will be set to the lowest size it can be, uncongesting the link. Then, with no congestion ion place, all senders will increase the window size in sync.
If you look on a short-interval utilisation graph, this should be obvious from a "saw-tooth" ramping up and sharply dropping off, once full link capacity is used. You'll probably want something that polls your WAN link usage more frequently than every five minutes, off-hand I'd say that per-minute stats might be enough, but you may have to drop down to every 5-10 seconds.
The best way I know of to eliminate this is to enable weighted random early discard, essentially throwing packets away before the WAN link is congested, so as to make the TCP windows for all hosts on the LAN uncoupled from each other.