提交 3b349bd9 authored 作者: Thomas Mueller's avatar Thomas Mueller

When using large transactions or a small log size, the database could get very slow.

上级 cbdbbfd0
......@@ -391,7 +391,7 @@ public class PageDataLeaf extends PageData {
boolean remove(long key) {
int i = find(key);
if (keys[i] != key) {
throw DbException.get(ErrorCode.ROW_NOT_FOUND_WHEN_DELETING_1, index.getSQL() + ": " + key);
throw DbException.get(ErrorCode.ROW_NOT_FOUND_WHEN_DELETING_1, index.getSQL() + ": " + key + " " + keys[i]);
}
index.getPageStore().logUndo(this, data);
if (entryCount == 1) {
......
......@@ -204,6 +204,8 @@ public class PageStore implements CacheWriter {
private Data emptyPage;
private long logSizeBase;
/**
* Create a new page store object.
*
......@@ -334,15 +336,10 @@ public class PageStore implements CacheWriter {
}
synchronized (database) {
database.checkPowerOff();
int firstUncommittedSection = getFirstUncommittedSection();
if (firstUncommittedSection <= log.getLogSectionId()) {
// can not truncate currently - avoid switching
return;
}
writeIndexRowCounts();
writeBack();
log.checkpoint();
firstUncommittedSection = getFirstUncommittedSection();
int firstUncommittedSection = getFirstUncommittedSection();
log.removeUntil(firstUncommittedSection);
// write back the free list
writeBack();
......@@ -1115,8 +1112,9 @@ public class PageStore implements CacheWriter {
synchronized (database) {
checkOpen();
log.commit(session.getId());
if (log.getSize() > maxLogSize) {
if (log.getSize() - logSizeBase > maxLogSize) {
checkpoint();
logSizeBase = log.getSize();
}
}
}
......
......@@ -72,7 +72,7 @@ public class TestPageStore extends TestBase implements DatabaseEventListener {
long before = System.currentTimeMillis();
stat.execute("select nextval('SEQ') from system_range(1, 100000)");
long after = System.currentTimeMillis();
// it's hard to test - basically it shouldn't to too many checkpoint operations
// it's hard to test - basically it shouldn't checkpoint too often
assertTrue(after - before < 10000);
stat.execute("drop table test");
stat.execute("drop sequence seq");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论