Re: Logical Logs -Explain
Posted in 1997
In article <3485C2BE.73FA@bloomberg.com>, "Art S. Kagel" <kagel@bloomberg.com> writes >Almost, Mark. It would be more accurate to say that a foreground write >happens when an application thread needs a buffer to write into and >cannot get access to one after a specified number of tries. What >happens is that a thread that needs a buffer randomly (actually using a >hash algorithm) selects one of the LRU queues and tries a number of >times, spinning between, to get a lock on that LRU queue. If it still >has not gotten the LRU queue's lock, or if the queue has not clean >buffers, it will rehash to another LRU queue. This rehash is tried a >number of times, but, following W.C. Fields suggestion, eventually it >gives up, picks the least recently used dirty buffer from its currently >selected LRU queue pair (an LRU queue pair is one clean buffer list and Agreed up to here. >one dirty buffer list) and your sqlexec thread cleans it itself by ^^^^^^^^^^^^^^^^ Surely under 7.x all I/O is done either by AIO VPs or KAIO thread. >writing it out, marking it clean and passing it to the normal I/O >mechanism to be refilled. This is bad for performance mainly because it >is a synchronous write so the CPU VP is tied up by the I/O request, as ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Surely the thread merely ends up doing a condition wait for the AIO VP or kaio thread to do the I/O. Hence this THREAD is blocked by the CPU VP continues? >is your query, and no other thread can execute on that VP either. > >Art S. Kagel -- David Williams