Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
a04f98d3
Commit
a04f98d3
authored
Oct 16, 2004
by
pekka@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
NDB wl-1533 tux optim 17 - allow slack in interior nodes
parent
d44070ef
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
257 additions
and
146 deletions
+257
-146
ndb/include/kernel/ndb_limits.h
ndb/include/kernel/ndb_limits.h
+1
-1
ndb/src/kernel/blocks/dbtux/Dbtux.hpp
ndb/src/kernel/blocks/dbtux/Dbtux.hpp
+12
-1
ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp
ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp
+5
-2
ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp
ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp
+0
-4
ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp
ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp
+5
-4
ndb/src/kernel/blocks/dbtux/DbtuxSearch.cpp
ndb/src/kernel/blocks/dbtux/DbtuxSearch.cpp
+1
-1
ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp
ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp
+216
-126
ndb/src/kernel/blocks/dbtux/Times.txt
ndb/src/kernel/blocks/dbtux/Times.txt
+14
-5
ndb/test/ndbapi/testOIBasic.cpp
ndb/test/ndbapi/testOIBasic.cpp
+3
-2
No files found.
ndb/include/kernel/ndb_limits.h
View file @
a04f98d3
...
@@ -110,7 +110,7 @@
...
@@ -110,7 +110,7 @@
*/
*/
#define MAX_TTREE_NODE_SIZE 64 // total words in node
#define MAX_TTREE_NODE_SIZE 64 // total words in node
#define MAX_TTREE_PREF_SIZE 4 // words in min prefix
#define MAX_TTREE_PREF_SIZE 4 // words in min prefix
#define MAX_TTREE_NODE_SLACK
3
// diff between max and min occupancy
#define MAX_TTREE_NODE_SLACK
2
// diff between max and min occupancy
/*
/*
* Blobs.
* Blobs.
...
...
ndb/src/kernel/blocks/dbtux/Dbtux.hpp
View file @
a04f98d3
...
@@ -591,7 +591,7 @@ private:
...
@@ -591,7 +591,7 @@ private:
void
nodePopDown
(
Signal
*
signal
,
NodeHandle
&
node
,
unsigned
pos
,
TreeEnt
&
ent
);
void
nodePopDown
(
Signal
*
signal
,
NodeHandle
&
node
,
unsigned
pos
,
TreeEnt
&
ent
);
void
nodePushDown
(
Signal
*
signal
,
NodeHandle
&
node
,
unsigned
pos
,
TreeEnt
&
ent
);
void
nodePushDown
(
Signal
*
signal
,
NodeHandle
&
node
,
unsigned
pos
,
TreeEnt
&
ent
);
void
nodePopUp
(
Signal
*
signal
,
NodeHandle
&
node
,
unsigned
pos
,
TreeEnt
&
ent
);
void
nodePopUp
(
Signal
*
signal
,
NodeHandle
&
node
,
unsigned
pos
,
TreeEnt
&
ent
);
void
nodeSlide
(
Signal
*
signal
,
NodeHandle
&
dstNode
,
NodeHandle
&
srcNode
,
unsigned
i
);
void
nodeSlide
(
Signal
*
signal
,
NodeHandle
&
dstNode
,
NodeHandle
&
srcNode
,
unsigned
cnt
,
unsigned
i
);
// scans linked to node
// scans linked to node
void
linkScan
(
NodeHandle
&
node
,
ScanOpPtr
scanPtr
);
void
linkScan
(
NodeHandle
&
node
,
ScanOpPtr
scanPtr
);
void
unlinkScan
(
NodeHandle
&
node
,
ScanOpPtr
scanPtr
);
void
unlinkScan
(
NodeHandle
&
node
,
ScanOpPtr
scanPtr
);
...
@@ -600,8 +600,19 @@ private:
...
@@ -600,8 +600,19 @@ private:
/*
/*
* DbtuxTree.cpp
* DbtuxTree.cpp
*/
*/
// add entry
void
treeAdd
(
Signal
*
signal
,
Frag
&
frag
,
TreePos
treePos
,
TreeEnt
ent
);
void
treeAdd
(
Signal
*
signal
,
Frag
&
frag
,
TreePos
treePos
,
TreeEnt
ent
);
void
treeAddFull
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
lubNode
,
unsigned
pos
,
TreeEnt
ent
);
void
treeAddNode
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
lubNode
,
unsigned
pos
,
TreeEnt
ent
,
NodeHandle
parentNode
,
unsigned
i
);
void
treeAddRebalance
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
node
,
unsigned
i
);
// remove entry
void
treeRemove
(
Signal
*
signal
,
Frag
&
frag
,
TreePos
treePos
);
void
treeRemove
(
Signal
*
signal
,
Frag
&
frag
,
TreePos
treePos
);
void
treeRemoveInner
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
lubNode
,
unsigned
pos
);
void
treeRemoveSemi
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
node
,
unsigned
i
);
void
treeRemoveLeaf
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
node
);
void
treeRemoveNode
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
node
);
void
treeRemoveRebalance
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
node
,
unsigned
i
);
// rotate
void
treeRotateSingle
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
&
node
,
unsigned
i
);
void
treeRotateSingle
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
&
node
,
unsigned
i
);
void
treeRotateDouble
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
&
node
,
unsigned
i
);
void
treeRotateDouble
(
Signal
*
signal
,
Frag
&
frag
,
NodeHandle
&
node
,
unsigned
i
);
...
...
ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp
View file @
a04f98d3
...
@@ -178,16 +178,19 @@ Dbtux::printNode(Signal* signal, Frag& frag, NdbOut& out, TupLoc loc, PrintPar&
...
@@ -178,16 +178,19 @@ Dbtux::printNode(Signal* signal, Frag& frag, NdbOut& out, TupLoc loc, PrintPar&
out
<<
"occupancy "
<<
node
.
getOccup
()
<<
" of interior node"
;
out
<<
"occupancy "
<<
node
.
getOccup
()
<<
" of interior node"
;
out
<<
" less than min "
<<
tree
.
m_minOccup
<<
endl
;
out
<<
" less than min "
<<
tree
.
m_minOccup
<<
endl
;
}
}
// check missed half-leaf/leaf merge
#ifdef dbtux_totally_groks_t_trees
// check missed semi-leaf/leaf merge
for
(
unsigned
i
=
0
;
i
<=
1
;
i
++
)
{
for
(
unsigned
i
=
0
;
i
<=
1
;
i
++
)
{
if
(
node
.
getLink
(
i
)
!=
NullTupLoc
&&
if
(
node
.
getLink
(
i
)
!=
NullTupLoc
&&
node
.
getLink
(
1
-
i
)
==
NullTupLoc
&&
node
.
getLink
(
1
-
i
)
==
NullTupLoc
&&
node
.
getOccup
()
+
cpar
[
i
].
m_occup
<=
tree
.
m_maxOccup
)
{
// our semi-leaf seems to satify interior minOccup condition
node
.
getOccup
()
<
tree
.
m_minOccup
)
{
par
.
m_ok
=
false
;
par
.
m_ok
=
false
;
out
<<
par
.
m_path
<<
sep
;
out
<<
par
.
m_path
<<
sep
;
out
<<
"missed merge with child "
<<
i
<<
endl
;
out
<<
"missed merge with child "
<<
i
<<
endl
;
}
}
}
}
#endif
// check inline prefix
// check inline prefix
{
ConstData
data1
=
node
.
getPref
();
{
ConstData
data1
=
node
.
getPref
();
Uint32
data2
[
MaxPrefSize
];
Uint32
data2
[
MaxPrefSize
];
...
...
ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp
View file @
a04f98d3
...
@@ -211,11 +211,7 @@ Dbtux::execTUX_ADD_ATTRREQ(Signal* signal)
...
@@ -211,11 +211,7 @@ Dbtux::execTUX_ADD_ATTRREQ(Signal* signal)
// make these configurable later
// make these configurable later
tree
.
m_nodeSize
=
MAX_TTREE_NODE_SIZE
;
tree
.
m_nodeSize
=
MAX_TTREE_NODE_SIZE
;
tree
.
m_prefSize
=
MAX_TTREE_PREF_SIZE
;
tree
.
m_prefSize
=
MAX_TTREE_PREF_SIZE
;
#ifdef dbtux_min_occup_less_max_occup
const
unsigned
maxSlack
=
MAX_TTREE_NODE_SLACK
;
const
unsigned
maxSlack
=
MAX_TTREE_NODE_SLACK
;
#else
const
unsigned
maxSlack
=
0
;
#endif
// size up to and including first 2 entries
// size up to and including first 2 entries
const
unsigned
pref
=
tree
.
getSize
(
AccPref
);
const
unsigned
pref
=
tree
.
getSize
(
AccPref
);
if
(
!
(
pref
<=
tree
.
m_nodeSize
))
{
if
(
!
(
pref
<=
tree
.
m_nodeSize
))
{
...
...
ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp
View file @
a04f98d3
...
@@ -386,19 +386,20 @@ Dbtux::nodePopUp(Signal* signal, NodeHandle& node, unsigned pos, TreeEnt& ent)
...
@@ -386,19 +386,20 @@ Dbtux::nodePopUp(Signal* signal, NodeHandle& node, unsigned pos, TreeEnt& ent)
}
}
/*
/*
* Move
all possible entries from another node before the min (i=0) or
* Move
number of entries from another node to this node before the min
*
after the max (i=1). XXX can be optimized
*
(i=0) or after the max (i=1). Expensive but not often used.
*/
*/
void
void
Dbtux
::
nodeSlide
(
Signal
*
signal
,
NodeHandle
&
dstNode
,
NodeHandle
&
srcNode
,
unsigned
i
)
Dbtux
::
nodeSlide
(
Signal
*
signal
,
NodeHandle
&
dstNode
,
NodeHandle
&
srcNode
,
unsigned
cnt
,
unsigned
i
)
{
{
Frag
&
frag
=
dstNode
.
m_frag
;
Frag
&
frag
=
dstNode
.
m_frag
;
TreeHead
&
tree
=
frag
.
m_tree
;
TreeHead
&
tree
=
frag
.
m_tree
;
ndbrequire
(
i
<=
1
);
ndbrequire
(
i
<=
1
);
while
(
dstNode
.
getOccup
()
<
tree
.
m_maxOccup
&&
srcNode
.
getOccup
()
!=
0
)
{
while
(
cnt
!=
0
)
{
TreeEnt
ent
;
TreeEnt
ent
;
nodePopDown
(
signal
,
srcNode
,
i
==
0
?
srcNode
.
getOccup
()
-
1
:
0
,
ent
);
nodePopDown
(
signal
,
srcNode
,
i
==
0
?
srcNode
.
getOccup
()
-
1
:
0
,
ent
);
nodePushUp
(
signal
,
dstNode
,
i
==
0
?
0
:
dstNode
.
getOccup
(),
ent
);
nodePushUp
(
signal
,
dstNode
,
i
==
0
?
0
:
dstNode
.
getOccup
(),
ent
);
cnt
--
;
}
}
}
}
...
...
ndb/src/kernel/blocks/dbtux/DbtuxSearch.cpp
View file @
a04f98d3
...
@@ -159,7 +159,7 @@ Dbtux::searchToAdd(Signal* signal, Frag& frag, ConstData searchKey, TreeEnt sear
...
@@ -159,7 +159,7 @@ Dbtux::searchToAdd(Signal* signal, Frag& frag, ConstData searchKey, TreeEnt sear
*
*
* Compares search key to each node min. A move to right subtree can
* Compares search key to each node min. A move to right subtree can
* overshoot target node. The last such node is saved. The final node
* overshoot target node. The last such node is saved. The final node
* is a
half
-leaf or leaf. If search key is less than final node min
* is a
semi
-leaf or leaf. If search key is less than final node min
* then the saved node is the g.l.b of the final node and we move back
* then the saved node is the g.l.b of the final node and we move back
* to it.
* to it.
*/
*/
...
...
ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp
View file @
a04f98d3
This diff is collapsed.
Click to expand it.
ndb/src/kernel/blocks/dbtux/Times.txt
View file @
a04f98d3
...
@@ -29,6 +29,7 @@ shows ms / 1000 rows for each and index time overhead
...
@@ -29,6 +29,7 @@ shows ms / 1000 rows for each and index time overhead
samples 10% of all PKs (100,000 pk reads, 100,000 scans)
samples 10% of all PKs (100,000 pk reads, 100,000 scans)
the "pct" values are from more accurate total times (not shown)
the "pct" values are from more accurate total times (not shown)
comments [ ... ] are after the case
040616 mc02/a 40 ms 87 ms 114 pct
040616 mc02/a 40 ms 87 ms 114 pct
mc02/b 51 ms 128 ms 148 pct
mc02/b 51 ms 128 ms 148 pct
...
@@ -76,13 +77,12 @@ optim 13 mc02/a 40 ms 57 ms 42 pct
...
@@ -76,13 +77,12 @@ optim 13 mc02/a 40 ms 57 ms 42 pct
mc02/c 9 ms 13 ms 50 pct
mc02/c 9 ms 13 ms 50 pct
mc02/d 170 ms 256 ms 50 pct
mc02/d 170 ms 256 ms 50 pct
after wl-1884 store all-NULL keys (the tests have pctnull=10 per column)
optim 13 mc02/a 39 ms 59 ms 50 pct
optim 13 mc02/a 39 ms 59 ms 50 pct
mc02/b 47 ms 77 ms 61 pct
mc02/b 47 ms 77 ms 61 pct
mc02/c 9 ms 12 ms 44 pct
mc02/c 9 ms 12 ms 44 pct
mc02/d 246 ms 289 ms 17 pct
mc02/d 246 ms 289 ms 17 pct
[ after wl-1884 store all-NULL keys (the tests have pctnull=10 per column) ]
[ case d: bug in testOIBasic killed PK read performance ]
[ case d: bug in testOIBasic killed PK read performance ]
optim 14 mc02/a 41 ms 60 ms 44 pct
optim 14 mc02/a 41 ms 60 ms 44 pct
...
@@ -98,8 +98,7 @@ none mc02/a 35 ms 60 ms 71 pct
...
@@ -98,8 +98,7 @@ none mc02/a 35 ms 60 ms 71 pct
mc02/c 5 ms 12 ms 106 pct
mc02/c 5 ms 12 ms 106 pct
mc02/d 165 ms 238 ms 44 pct
mc02/d 165 ms 238 ms 44 pct
[ johan re-installed mc02 as fedora gcc-3.3.2 ]
[ johan re-installed mc02 as fedora gcc-3.3.2, tux uses more C++ stuff than tup]
[ case c: table scan has improved... ]
charsets mc02/a 35 ms 60 ms 71 pct
charsets mc02/a 35 ms 60 ms 71 pct
mc02/b 42 ms 84 ms 97 pct
mc02/b 42 ms 84 ms 97 pct
...
@@ -118,6 +117,16 @@ optim 15 mc02/a 34 ms 60 ms 72 pct
...
@@ -118,6 +117,16 @@ optim 15 mc02/a 34 ms 60 ms 72 pct
optim 16 mc02/a 34 ms 53 ms 53 pct
optim 16 mc02/a 34 ms 53 ms 53 pct
mc02/b 42 ms 75 ms 75 pct
mc02/b 42 ms 75 ms 75 pct
[ case a, b: binary search of bounding node when adding entry ]
[ binary search of bounding node when adding entry ]
none mc02/a 35 ms 53 ms 51 pct
mc02/b 42 ms 75 ms 76 pct
[ rewrote treeAdd / treeRemove ]
optim 17 mc02/a 35 ms 52 ms 49 pct
mc02/b 43 ms 75 ms 75 pct
[ allow slack (2) in interior nodes - almost no effect?? ]
vim: set et:
vim: set et:
ndb/test/ndbapi/testOIBasic.cpp
View file @
a04f98d3
...
@@ -2963,9 +2963,10 @@ tbuild(Par par)
...
@@ -2963,9 +2963,10 @@ tbuild(Par par)
RUNSTEP
(
par
,
createindex
,
ST
);
RUNSTEP
(
par
,
createindex
,
ST
);
RUNSTEP
(
par
,
invalidateindex
,
MT
);
RUNSTEP
(
par
,
invalidateindex
,
MT
);
}
}
RUNSTEP
(
par
,
readverify
,
MT
);
RUNSTEP
(
par
,
pkupdate
,
MT
);
RUNSTEP
(
par
,
readverify
,
ST
);
RUNSTEP
(
par
,
pkdelete
,
MT
);
RUNSTEP
(
par
,
pkdelete
,
MT
);
RUNSTEP
(
par
,
readverify
,
M
T
);
RUNSTEP
(
par
,
readverify
,
S
T
);
RUNSTEP
(
par
,
dropindex
,
ST
);
RUNSTEP
(
par
,
dropindex
,
ST
);
}
}
return
0
;
return
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment