about BufferPoolBlowaway()
От | Seung Hyun Jeong |
---|---|
Тема | about BufferPoolBlowaway() |
Дата | |
Msg-id | 000501c1cb4f$bdf0bbd0$15c65882@cs.man.ac.uk обсуждение исходный текст |
Ответы |
Re: about BufferPoolBlowaway()
|
Список | pgsql-hackers |
Hi, all. I am experimenting on performance evaluation for some queries based on PostgreSQL. To give fair conditions to each queries, I try to clear buffer of PostgreSQL before running each queries. I think the following function in .../backend/storage/buffer/bufmgr.c seems to be designed for such a purpose. But the function seems to have a logical error in my opinion. void BufferPoolBlowaway() { 1: int i; 2: BufferSync(); 3: for (i = 1; i <= NBuffers; i++) 4: { 5: if (BufferIsValid(i)) 6: { 7: while (BufferIsValid(i)) ReleaseBuffer(i); 8: } 9: BufTableDelete(&BufferDescriptors[i - 1]); } } The line 7 causes an infinite loop, I think. So, what I did instead is the following: void BufferPoolBlowaway() { 1: BufferDesc *bufHdr; 2: int i; 3: BufferSync(); 4: for (i = 1; i <= NBuffers; i++) 5: { 6: if (BufferIsValid(i)) 7: { 8: bufHdr = &BufferDescriptors[i - 1]; 9: while (bufHdr->refcount > 0) ReleaseBuffer(i); 10: } 11: BufTableDelete(&BufferDescriptors[i - 1]); 12: } } Line 1, 8, and 9 are added instead of the original to release buffers. It works without any infinite loop, but I am not quite sure that my modification is reasonable. Can anybody advise me about the modification? In addition, I wonder that the disk read/write operations via buffer manager in PostgreSQL are free from linux system buffer cache. If not, does anyone know how to flush and initialize the linux system buffer cache? Cheers.
В списке pgsql-hackers по дате отправления: