mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
Replacement of the buffer replacement strategy with an ARC
algorithm adopted for PostgreSQL. Jan
This commit is contained in:
@ -13,7 +13,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.265 2003/11/12 21:15:51 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.266 2003/11/13 00:40:00 wieck Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -33,6 +33,7 @@
|
||||
#include "commands/vacuum.h"
|
||||
#include "executor/executor.h"
|
||||
#include "miscadmin.h"
|
||||
#include "storage/buf_internals.h"
|
||||
#include "storage/freespace.h"
|
||||
#include "storage/sinval.h"
|
||||
#include "storage/smgr.h"
|
||||
@ -310,8 +311,16 @@ vacuum(VacuumStmt *vacstmt)
|
||||
else
|
||||
old_context = MemoryContextSwitchTo(anl_context);
|
||||
|
||||
/*
|
||||
* Tell the buffer replacement strategy that vacuum is
|
||||
* causing the IO
|
||||
*/
|
||||
StrategyHintVacuum(true);
|
||||
|
||||
analyze_rel(relid, vacstmt);
|
||||
|
||||
StrategyHintVacuum(false);
|
||||
|
||||
if (vacstmt->vacuum)
|
||||
CommitTransactionCommand();
|
||||
else
|
||||
@ -749,6 +758,12 @@ vacuum_rel(Oid relid, VacuumStmt *vacstmt, char expected_relkind)
|
||||
SetQuerySnapshot(); /* might be needed for functions in
|
||||
* indexes */
|
||||
|
||||
/*
|
||||
* Tell the cache replacement strategy that vacuum is causing
|
||||
* all following IO
|
||||
*/
|
||||
StrategyHintVacuum(true);
|
||||
|
||||
/*
|
||||
* Check for user-requested abort. Note we want this to be inside a
|
||||
* transaction, so xact.c doesn't issue useless WARNING.
|
||||
@ -763,6 +778,7 @@ vacuum_rel(Oid relid, VacuumStmt *vacstmt, char expected_relkind)
|
||||
ObjectIdGetDatum(relid),
|
||||
0, 0, 0))
|
||||
{
|
||||
StrategyHintVacuum(false);
|
||||
CommitTransactionCommand();
|
||||
return true; /* okay 'cause no data there */
|
||||
}
|
||||
@ -796,6 +812,7 @@ vacuum_rel(Oid relid, VacuumStmt *vacstmt, char expected_relkind)
|
||||
(errmsg("skipping \"%s\" --- only table or database owner can vacuum it",
|
||||
RelationGetRelationName(onerel))));
|
||||
relation_close(onerel, lmode);
|
||||
StrategyHintVacuum(false);
|
||||
CommitTransactionCommand();
|
||||
return false;
|
||||
}
|
||||
@ -810,6 +827,7 @@ vacuum_rel(Oid relid, VacuumStmt *vacstmt, char expected_relkind)
|
||||
(errmsg("skipping \"%s\" --- cannot vacuum indexes, views, or special system tables",
|
||||
RelationGetRelationName(onerel))));
|
||||
relation_close(onerel, lmode);
|
||||
StrategyHintVacuum(false);
|
||||
CommitTransactionCommand();
|
||||
return false;
|
||||
}
|
||||
@ -824,6 +842,7 @@ vacuum_rel(Oid relid, VacuumStmt *vacstmt, char expected_relkind)
|
||||
if (isOtherTempNamespace(RelationGetNamespace(onerel)))
|
||||
{
|
||||
relation_close(onerel, lmode);
|
||||
StrategyHintVacuum(false);
|
||||
CommitTransactionCommand();
|
||||
return true; /* assume no long-lived data in temp
|
||||
* tables */
|
||||
@ -863,6 +882,7 @@ vacuum_rel(Oid relid, VacuumStmt *vacstmt, char expected_relkind)
|
||||
/*
|
||||
* Complete the transaction and free all temporary memory used.
|
||||
*/
|
||||
StrategyHintVacuum(false);
|
||||
CommitTransactionCommand();
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user