I am quoting from Paul Randal's blog post:
SQL Server has two types of reads: logical I/Os and physical I/Os.
When the Access Methods portion of the Storage Engine needs to access
a page, it asks the Buffer Pool for a pointer to the page in memory
(called a logical I/O) and the Buffer Pool checks through its metadata
to see if that page is already in memory.
If the page is in memory, the Buffer Pool gives the Access Methods the
pointer, and the I/O remains a logical I/O. If the page is not in
memory, the Buffer Pool issues a "real" I/O (called a physical I/O)
and the thread has to wait for it to complete – incurring a
PAGEIOLATCH_XX wait. Once the I/O completes and the pointer is
available, the thread is notified and can continue running.
Again quoting from a webpage that belongs to sqlskills.com.
This wait type represents a variety of synchronous read and write operations in data files are not related to tables, plus reads from the transaction log.
What do non-data page IOs mean?
Few examples from Paul Randal's article will make it clear what
nod-data page means.
- Reading log blocks from the transaction log (during any operation that causes the log to be read from disk – e.g. recovery)
- Reading allocation bitmaps from disk (e.g. GAM, SGAM, PFS pages) during many operations (e.g. recovery, DB startup, restore)
- Writing intermediate sort buffers to disk (these are called ‘Bobs’)
- Reading and writing merge results from/to disk during a merge join
- Reading and writing eager spools to disk
- Reading VLF headers from the transaction log