I wrote a little monitor program that queries the database every 30 seconds checking for blocking sql. Usually the query returns nothing. If it does return some data, the program records the info (including wait time and the sql causing the blocking). It maintains a history and checks if that same sql caused blocking before, and if so it updates the total count and blocking time.
I found couple of sql queries that accounted for 99% of the blocking.