waiting for free pages when insert a table
Hi all,
When I load a table including a blob filed using many "insert" , commit only at the end and under SET SESSION WITH ON_LOGFULL = COMMIT, the thread will be stuck waiting for free pages after running for a while, and then there is no response. I traced the DBMS code, the stop postion is in fault_page:
fault_page()
{
......
/* If you are here, this thread is stuck waiting for free pages.
** Wake up the write behind threads since there is no guarantee
** another user thread is able to free a page
*/
wb_cycle_start(bm, lock_list,
BM_WB_SINGLE, "FAULT_PAGE");
dm0p_ewait(lock_list, DM0P_FWAIT_EVENT, bm->bm_cache_ix, 0, 0, 0);
.....
}
I use following parameters:
log file size: 1024M
etab and main table Page size are both 16K, cache_guideline = middle, dmf_write_behind=true, dmf_cache_size=3000 pages, all the other is default.
When I decrease log file size to 256M or increase dmf_cache_size, then there is no porblem.
I'm finding the cause:
If I don't manually commit at some interval, and use ON_LOGFULL = COMMIT, then all the new insert buffer pages will not write to disk unless log file is full. Under such case, when log file's size is very big or dmf_cache_size is small, then the page cache will fill up and the rountine will pending.
Is my analysis ture?
PS:
But when I use 2K page, there is no problem, its very strange!
thanks!
Jiong
Last edited by xie_jiong; 2009-12-15 at 08:48 AM.
|