One example where a page can be read from disk and placed in a bufferpool (but never used) is if a tablespace scan is being done (usually to read the entire table) but the query stops short for some reason. Or if a cursor is opened and fetching of rows begins but not all the rows in the cursor are actually fetched before the cursor is closed. I would not worry too much about these situations unless you have encountered a specific problem.
In order to recommend bufferpool size(s) the following information is needed:
- Total physical memory on your machine.
- DB2 Edition (ESE, WSE, Express-C, etc)
- Size of each database on the server
- Description and type of application (OLTP, data warehouse, etc)
- Number of typical connections to the application
- Any other applications running on the same server (application code, web server, etc).
One thing you never want to do is use more memory for DB2 than actually exists on the machine. DB2 does not like virtual memory and can crash in some cases if all the real memory is used up. However, many operating systems will use any free memory for disk caching (but release it when needed) so the amount of "free" memory reported by the OS can be very misleading.