Below is the list of changes that have just been committed into a local
6.0-falcon repository of . When does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2007-08-25 12:44:23-04:00, jas@rowvwade. +8 -0
Compute actual records and space reclaimed during
scavenge cycle.
storage/falcon/Database.cpp@stripped, 2007-08-25 12:44:13-04:00, jas@rowvwade. +5 -4
Generate more accurate record reclaiming statistics.
storage/falcon/Record.cpp@stripped, 2007-08-25 12:44:14-04:00, jas@rowvwade. +1 -1
Generate more accurate record reclaiming statistics.
storage/falcon/Record.h@stripped, 2007-08-25 12:44:14-04:00, jas@rowvwade. +4 -1
Generate more accurate record reclaiming statistics.
storage/falcon/RecordLeaf.cpp@stripped, 2007-08-25 12:44:14-04:00, jas@rowvwade. +19 -1
Generate more accurate record reclaiming statistics.
storage/falcon/RecordVersion.cpp@stripped, 2007-08-25 12:44:15-04:00, jas@rowvwade. +4 -4
Generate more accurate record reclaiming statistics.
storage/falcon/RecordVersion.h@stripped, 2007-08-25 12:44:15-04:00, jas@rowvwade. +1 -1
Generate more accurate record reclaiming statistics.
storage/falcon/Table.cpp@stripped, 2007-08-25 12:44:15-04:00, jas@rowvwade. +9 -2
Generate more accurate record reclaiming statistics.
storage/falcon/Table.h@stripped, 2007-08-25 12:44:16-04:00, jas@rowvwade. +1 -1
Generate more accurate record reclaiming statistics.
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: jas
# Host: rowvwade.
# Root: D:/MySQL/mysql-5.1-falcon
--- 1.99/storage/falcon/Database.cpp 2007-08-25 12:44:39 -04:00
+++ 1.100/storage/falcon/Database.cpp 2007-08-25 12:44:39 -04:00
@@ -20,6 +20,7 @@
#include <string.h>
#include <stdio.h>
#include <time.h>
+#include <memory.h>
#include "Engine.h"
#include "Database.h"
#include "Dbb.h"
@@ -1719,13 +1720,12 @@
total += overflowSize;
RecordScavenge recordScavenge;
+ memset(&recordScavenge, 0, sizeof(recordScavenge));
recordScavenge.age = threshold;
recordScavenge.transactionId = oldestActiveTransaction;
- recordScavenge.spaceReclaimed = 0;
- recordScavenge.recordsReclaimed = 0;
if (forced)
- recordScavenge.age = MIN(threshold, currentAgeGroup - AGE_GROUPS / 2);
+ recordScavenge.age = MAX(threshold, currentAgeGroup - AGE_GROUPS / 2);
// If we passed the upper limit, scavenge. If we didn't pick up
// a significant amount of memory since the last cycle, don't bother
@@ -1765,7 +1765,8 @@
newTotal += ageGroupSizes [n];
if (total > newTotal)
- Log::log(LogScavenge, " " I64FORMAT " bytes reclaimed\n", total - newTotal);
+ Log::log(LogScavenge, " %d records, " I64FORMAT " bytes reclaimed\n",
+ recordScavenge.recordsReclaimed, recordScavenge.spaceReclaimed);
total = newTotal;
}
--- 1.54/storage/falcon/Record.cpp 2007-08-25 12:44:39 -04:00
+++ 1.55/storage/falcon/Record.cpp 2007-08-25 12:44:39 -04:00
@@ -467,7 +467,7 @@
}
-bool Record::scavenge(TransId oldestActive)
+bool Record::scavenge(RecordScavenge *recordScavenge)
{
return true;
}
--- 1.31/storage/falcon/Record.h 2007-08-25 12:44:39 -04:00
+++ 1.32/storage/falcon/Record.h 2007-08-25 12:44:39 -04:00
@@ -34,7 +34,10 @@
TransId transactionId;
int age;
uint recordsReclaimed;
+ uint recordsRemaining;
+ uint versionsRemaining;
uint64 spaceReclaimed;
+ uint64 spaceRemaining;
};
enum RecordEncoding {
@@ -74,7 +77,7 @@
virtual int getSavePointId();
virtual void setSuperceded (bool flag);
virtual Record* fetchVersion (Transaction *transaction);
- virtual bool scavenge(TransId oldestActive);
+ virtual bool scavenge(RecordScavenge *recordScavenge);
virtual void scavenge(TransId targetTransactionId, int oldestActiveSavePointId);
virtual bool isVersion();
virtual bool isSuperceded();
--- 1.29/storage/falcon/RecordLeaf.cpp 2007-08-25 12:44:39 -04:00
+++ 1.30/storage/falcon/RecordLeaf.cpp 2007-08-25 12:44:39 -04:00
@@ -164,28 +164,46 @@
{
if (record->isVersion())
{
- if ((record->scavenge(recordScavenge->transactionId)) &&
+ if ((record->scavenge(recordScavenge)) &&
((!record->hasRecord()) || ((record->useCount == 1) &&
(record->ageGroup <= recordScavenge->age))))
{
*ptr = NULL;
+ recordScavenge->spaceReclaimed += record->size;
+ ++recordScavenge->recordsReclaimed;
#ifdef CHECK_RECORD_ACTIVITY
record->active = false;
#endif
record->release();
}
else
+ {
+ ++recordScavenge->recordsRemaining;
+ recordScavenge->spaceRemaining += record->size;
++count;
+ }
}
else if (record->ageGroup <= recordScavenge->age &&
record->useCount == 1)
{
*ptr = NULL;
+ recordScavenge->spaceReclaimed += record->size;
+ ++recordScavenge->recordsReclaimed;
#ifdef CHECK_RECORD_ACTIVITY
record->active = false;
#endif
record->release();
}
else
+ {
+ ++recordScavenge->recordsRemaining;
+ recordScavenge->spaceRemaining += record->size;
++count;
+
+ for (Record *prior = record->getPriorVersion(); prior; prior =
prior->getPriorVersion())
+ {
+ ++recordScavenge->versionsRemaining;
+ recordScavenge->spaceRemaining += prior->size;
+ }
+ }
}
}
--- 1.50/storage/falcon/RecordVersion.cpp 2007-08-25 12:44:39 -04:00
+++ 1.51/storage/falcon/RecordVersion.cpp 2007-08-25 12:44:39 -04:00
@@ -138,23 +138,23 @@
// Scavenge record versions by the scavenger thread. Return true if the
// record is a scavenge candidate
-bool RecordVersion::scavenge(TransId oldestActive)
+bool RecordVersion::scavenge(RecordScavenge *recordScavenge)
{
if (useCount != 1)
return false;
- if (transaction || (transactionId >= oldestActive))
+ if (transaction || (transactionId >= recordScavenge->transactionId))
{
table->activeVersions = true;
if (priorVersion)
- priorVersion->scavenge(oldestActive);
+ priorVersion->scavenge(recordScavenge);
return false;
}
if (priorVersion)
- table->expungeRecordVersions (this);
+ table->expungeRecordVersions(this, recordScavenge);
return true;
}
--- 1.20/storage/falcon/RecordVersion.h 2007-08-25 12:44:39 -04:00
+++ 1.21/storage/falcon/RecordVersion.h 2007-08-25 12:44:39 -04:00
@@ -39,7 +39,7 @@
virtual int getSavePointId();
virtual void setSuperceded (bool flag);
virtual Record* getPriorVersion();
- virtual bool scavenge(TransId oldestActive);
+ virtual bool scavenge(RecordScavenge *recordScavenge);
virtual void scavenge(TransId targetTransactionId, int oldestActiveSavePoint);
virtual bool isVersion();
virtual Record* rollback();
--- 1.138/storage/falcon/Table.cpp 2007-08-25 12:44:40 -04:00
+++ 1.139/storage/falcon/Table.cpp 2007-08-25 12:44:40 -04:00
@@ -1615,16 +1615,23 @@
return false;
}
-void Table::expungeRecordVersions(RecordVersion *record)
+void Table::expungeRecordVersions(RecordVersion *record, RecordScavenge *recordScavenge)
{
Record *prior = record->priorVersion;
record->priorVersion = NULL;
+ if (recordScavenge)
+ for (Record *rec = prior; rec; rec = rec->getPriorVersion())
+ {
+ ++recordScavenge->recordsReclaimed;
+ recordScavenge->spaceReclaimed += record->size;
+ }
+
#ifdef CHECK_RECORD_ACTIVITY
for (Record *rec = prior; rec; rec = rec->getPriorVersion())
rec->active = false;
#endif
-
+
garbageCollect(prior, record, NULL, false);
prior->release();
}
--- 1.33/storage/falcon/Table.h 2007-08-25 12:44:40 -04:00
+++ 1.34/storage/falcon/Table.h 2007-08-25 12:44:40 -04:00
@@ -132,7 +132,7 @@
void garbageCollect (Record *leaving, Record *staying, Transaction *transaction, bool
quiet);
void expungeBlob (Value *blob);
bool duplicateBlob (Value *blob, int fieldId, Record *recordChain);
- void expungeRecordVersions (RecordVersion *record);
+ void expungeRecordVersions (RecordVersion *record, RecordScavenge *recordScavenge);
void setView (View *view);
Index* findIndex (const char *indexName);
virtual PrivObject getPrivilegeType();
| Thread |
|---|
| • bk commit into 6.0-falcon tree (jas:1.2708) | U-ROWVWADEjas | 25 Aug |