I feel I've got to demur a little from, or expand beyond what's been said so far: buffer waits are not for a free buffer to become available for a new page to be read in, normally. (In such case one of the least recently used buffers would be picked and simply evicted, in worst case involving a foreground write, but that typically would not show as a buffer wait, if I'm not mistaken.)
A buffer, holding a certain page, can be accessed by multiple parties simultaneously as long as everyone only wants to read from the page, and each party will simply increment the share lock counter. On the other hand, anyone with the intention to modify the buffer content will have to gain exclusive access.
So buffer waits can occur if
- one party holds the buffer exclusively while another one / others want to gain access too, shared or exclusive - they'll have to wait
- some parties are holding the buffer in share mode while someone intends to modify it - he's got to wait, and so, I think, will have other share lockers arriving after him
A common special form of the first case is either a fellow session thread or a readahead thread in the course of populating the buffer, i.e. reading in the designated page, while others also already seek access to it. The typical sign for this occurring, esp. the readahead case, is a buffer owner -1 (0xffffffff....) instead of a thread address (rstcb).
You don't immediately see a buffer waiter's intention, x-lock or s-lock, but if the buffer currently is held in X mode then likely the waiters will be share-lockers and vice versa.
All this is perfectly valid and should not cause a problem unless those buffer accesses, for whatever reason, are taking too long.
If long buffer waits occur, or frequent ones, it's a sign of something not running fluently and possibly a bottleneck.
Sometimes it's a very specific (set of) buffer(s), with a lot of contention on it (mixed shared and exclusive) -> find out what pages; more often than not it turns out to be an index root node. Also find out communalities, e.g. in SQL being executed, between sessions having to wait.
It could also be slow disk i/o, esp. in the readahead case.
One really has to find the pattern behind the buffer wait symptom.
HTH,
Andreas