I have a database that is constantly slowing to a crawl. The hardware for it is more than enough so I'm confident that's not the issue. When looking at resource waits through activity monitor, Buffer I/O is the highest by far. It's in the hundreds of thousands for cumulative wait times when the other waits are still in the hundreds. This has naturally made me start looking towards my Buffer I/O as the issue.
I set up a performance monitor to record full scans/sec and buffer cache hit ratio. The buffer cache hit ratio is consistently in the 98-100 range so everything seems okay there. My full scans/sec ranges from < 1 to just over 3. This seems high to me especially since it's not uncommon for it to be hitting 2+.
Does this seem like the most likely candidate for causing the slowness issues? Any other advice on what might be good to monitor if I'm seeing such high Buffer I/O wait times?
I am guessing you've exhausted the possibility of the hardware being an issue ("The hardware for it is more than enough"). If the application is grinding to a halt from a client perspective, don't forget network latency - easy to overlook.
Have a look at the Perfmon counter Page Life Expectancy at the same time as Page Lookups/sec, Page Reads/sec, and Full Scans/sec.
I've never used the profiler, but have you identified whether the problem occurs with a particular SP or query? Do you need to review your indexes?