Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7a315a0

Browse files
committed
Dept. of second thoughts: fix loop in BgBufferSync so that the exit when
bgwriter_lru_maxpages is exceeded leaves the loop variables in theexpected state. In the original coding, we'd fail to advancenext_to_clean, causing that buffer to be probably-uselessly rechecked nexttime, and also have an off-by-one idea of the number of buffers scanned.
1 parent6f5c38d commit7a315a0

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

‎src/backend/storage/buffer/bufmgr.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.225 2007/09/2520:03:37 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.226 2007/09/2522:11:48 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -1324,10 +1324,17 @@ BgBufferSync(void)
13241324
reusable_buffers=reusable_buffers_est;
13251325

13261326
/* Execute the LRU scan */
1327-
while (num_to_scan-->0&&reusable_buffers<upcoming_alloc_est)
1327+
while (num_to_scan>0&&reusable_buffers<upcoming_alloc_est)
13281328
{
13291329
intbuffer_state=SyncOneBuffer(next_to_clean, true);
13301330

1331+
if (++next_to_clean >=NBuffers)
1332+
{
1333+
next_to_clean=0;
1334+
next_passes++;
1335+
}
1336+
num_to_scan--;
1337+
13311338
if (buffer_state&BUF_WRITTEN)
13321339
{
13331340
reusable_buffers++;
@@ -1339,12 +1346,6 @@ BgBufferSync(void)
13391346
}
13401347
elseif (buffer_state&BUF_REUSABLE)
13411348
reusable_buffers++;
1342-
1343-
if (++next_to_clean >=NBuffers)
1344-
{
1345-
next_to_clean=0;
1346-
next_passes++;
1347-
}
13481349
}
13491350

13501351
BgWriterStats.m_buf_written_clean+=num_written;
@@ -1353,7 +1354,7 @@ BgBufferSync(void)
13531354
elog(DEBUG1,"bgwriter: recent_alloc=%u smoothed=%.2f delta=%ld ahead=%d density=%.2f reusable_est=%d upcoming_est=%d scanned=%d wrote=%d reusable=%d",
13541355
recent_alloc,smoothed_alloc,strategy_delta,bufs_ahead,
13551356
smoothed_density,reusable_buffers_est,upcoming_alloc_est,
1356-
bufs_to_lap-num_to_scan-1,
1357+
bufs_to_lap-num_to_scan,
13571358
num_written,
13581359
reusable_buffers-reusable_buffers_est);
13591360
#endif
@@ -1366,7 +1367,7 @@ BgBufferSync(void)
13661367
* scanning, which is helpful because a long memory isn't as desirable
13671368
* on the density estimates.
13681369
*/
1369-
strategy_delta=bufs_to_lap-num_to_scan-1;
1370+
strategy_delta=bufs_to_lap-num_to_scan;
13701371
recent_alloc=reusable_buffers-reusable_buffers_est;
13711372
if (strategy_delta>0&&recent_alloc>0)
13721373
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp