Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
fd46653c
提交
fd46653c
authored
14 年前
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
New experimental feature SHUTDOWN DEFRAG.
上级
dc492ea5
master
noel-pr1
plus33-master
pr/267
stumc-Issue#576
version-1.4.198
version-1.4.197
version-1.4.196
version-1.4.195
version-1.4.194
version-1.4.193
version-1.4.192
version-1.4.191
version-1.4.190
version-1.4.188
version-1.4.187
version-1.4.186
version-1.4.185
version-1.4.184
version-1.4.183
version-1.4.182
version-1.4.181
version-1.4.178
version-1.4.177
version-1.3
version-1.2
version-1.1
version-1.0
无相关合并请求
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
49 行增加
和
13 行删除
+49
-13
PageDataLeaf.java
h2/src/main/org/h2/index/PageDataLeaf.java
+1
-1
Page.java
h2/src/main/org/h2/store/Page.java
+9
-1
PageFreeList.java
h2/src/main/org/h2/store/PageFreeList.java
+4
-0
PageStore.java
h2/src/main/org/h2/store/PageStore.java
+27
-11
PageStreamData.java
h2/src/main/org/h2/store/PageStreamData.java
+4
-0
PageStreamTrunk.java
h2/src/main/org/h2/store/PageStreamTrunk.java
+4
-0
没有找到文件。
h2/src/main/org/h2/index/PageDataLeaf.java
浏览文件 @
fd46653c
...
...
@@ -538,13 +538,13 @@ public class PageDataLeaf extends PageData {
p2
.
writeData
();
p2
.
data
.
truncate
(
index
.
getPageStore
().
getPageSize
());
store
.
update
(
p2
);
store
.
free
(
getPos
());
if
(
parentPageId
==
ROOT
)
{
index
.
setRootPageId
(
session
,
newPos
);
}
else
{
PageDataNode
p
=
(
PageDataNode
)
store
.
getPage
(
parentPageId
);
p
.
moveChild
(
getPos
(),
newPos
);
}
store
.
free
(
getPos
());
}
/**
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/store/Page.java
浏览文件 @
fd46653c
...
...
@@ -10,7 +10,6 @@ import java.lang.reflect.Array;
import
org.h2.engine.Session
;
import
org.h2.util.CacheObject
;
/**
* A page. Format:
* <ul><li>0-3: parent page id (0 for root)
...
...
@@ -253,4 +252,13 @@ public abstract class Page extends CacheObject {
}
}
/**
* If this page can be moved. Transaction log and free-list pages can not.
*
* @return true if moving is allowed
*/
public
boolean
canMove
()
{
return
true
;
}
}
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/store/PageFreeList.java
浏览文件 @
fd46653c
...
...
@@ -222,4 +222,8 @@ public class PageFreeList extends Page {
return
false
;
}
public
boolean
canMove
()
{
return
false
;
}
}
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/store/PageStore.java
浏览文件 @
fd46653c
...
...
@@ -520,24 +520,34 @@ public class PageStore implements CacheWriter {
}
}
recordPageReads
=
false
;
int
target
=
MIN_PAGE_COUNT
-
1
;
for
(
int
i
=
0
;
i
<
recordedPagesList
.
size
();
i
++)
{
writeBack
();
cache
.
clear
();
int
a
=
MIN_PAGE_COUNT
+
i
;
int
b
=
recordedPagesList
.
get
(
i
);
if
(
a
==
b
)
{
int
source
=
recordedPagesList
.
get
(
i
);
Page
pageSource
=
getPage
(
source
);
if
(!
pageSource
.
canMove
())
{
continue
;
}
while
(
true
)
{
Page
pageTarget
=
getPage
(++
target
);
if
(
pageTarget
==
null
||
pageTarget
.
canMove
())
{
break
;
}
}
if
(
target
==
source
)
{
continue
;
}
int
temp
=
getFirstFree
();
if
(
temp
==
-
1
)
{
DbException
.
throwInternalError
(
"no free page for defrag"
);
}
swap
(
a
,
b
,
temp
);
int
index
=
recordedPagesList
.
indexOf
(
a
);
cache
.
clear
();
swap
(
source
,
target
,
temp
);
int
index
=
recordedPagesList
.
indexOf
(
target
);
if
(
index
>=
0
)
{
recordedPagesList
.
set
(
index
,
b
);
recordedPagesList
.
set
(
index
,
source
);
}
recordedPagesList
.
set
(
i
,
a
);
recordedPagesList
.
set
(
i
,
target
);
}
recordedPagesList
=
null
;
recordedPages
=
null
;
...
...
@@ -606,17 +616,23 @@ public class PageStore implements CacheWriter {
Page
pageA
=
null
;
if
(
isUsed
(
a
))
{
pageA
=
getPage
(
a
);
pageA
.
moveTo
(
systemSession
,
free
);
if
(
pageA
!=
null
)
{
pageA
.
moveTo
(
systemSession
,
free
);
}
free
(
a
);
}
if
(
isUsed
(
b
))
{
Page
pageB
=
getPage
(
b
);
pageB
.
moveTo
(
systemSession
,
a
);
if
(
pageB
!=
null
)
{
pageB
.
moveTo
(
systemSession
,
a
);
}
free
(
b
);
}
if
(
pageA
!=
null
)
{
f
=
getPage
(
free
);
f
.
moveTo
(
systemSession
,
b
);
if
(
f
!=
null
)
{
f
.
moveTo
(
systemSession
,
b
);
}
free
(
free
);
}
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/store/PageStreamData.java
浏览文件 @
fd46653c
...
...
@@ -165,4 +165,8 @@ public class PageStreamData extends Page {
return
DATA_START
;
}
public
boolean
canMove
()
{
return
false
;
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/store/PageStreamTrunk.java
浏览文件 @
fd46653c
...
...
@@ -287,4 +287,8 @@ public class PageStreamTrunk extends Page {
return
"page["
+
getPos
()
+
"] stream trunk key:"
+
logKey
+
" next:"
+
nextTrunk
;
}
public
boolean
canMove
()
{
return
false
;
}
}
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论