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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
045aea9d
Commit
045aea9d
authored
Jan 14, 2005
by
marko@hundin.mysql.fi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
InnoDB: Remove redundant page_no field from dict_index_t.
This completes the patch for fast TRUNCATE TABLE.
parent
7ef8a209
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
49 additions
and
43 deletions
+49
-43
innobase/dict/dict0boot.c
innobase/dict/dict0boot.c
+16
-15
innobase/dict/dict0crea.c
innobase/dict/dict0crea.c
+8
-8
innobase/dict/dict0dict.c
innobase/dict/dict0dict.c
+6
-7
innobase/dict/dict0load.c
innobase/dict/dict0load.c
+1
-3
innobase/ibuf/ibuf0ibuf.c
innobase/ibuf/ibuf0ibuf.c
+1
-3
innobase/include/dict0crea.h
innobase/include/dict0crea.h
+1
-0
innobase/include/dict0dict.h
innobase/include/dict0dict.h
+4
-2
innobase/include/dict0mem.h
innobase/include/dict0mem.h
+0
-1
innobase/row/row0mysql.c
innobase/row/row0mysql.c
+12
-4
No files found.
innobase/dict/dict0boot.c
View file @
045aea9d
...
...
@@ -223,6 +223,7 @@ dict_boot(void)
dict_index_t
*
index
;
dict_hdr_t
*
dict_hdr
;
mtr_t
mtr
;
ibool
success
;
mtr_start
(
&
mtr
);
...
...
@@ -275,20 +276,20 @@ dict_boot(void)
dict_mem_index_add_field
(
index
,
"NAME"
,
0
,
0
);
index
->
page_no
=
mtr_read_ulint
(
dict_hdr
+
DICT_HDR_TABLES
,
MLOG_4BYTES
,
&
mtr
);
index
->
id
=
DICT_TABLES_ID
;
ut_a
(
dict_index_add_to_cache
(
table
,
index
));
success
=
dict_index_add_to_cache
(
table
,
index
,
mtr_read_ulint
(
dict_hdr
+
DICT_HDR_TABLES
,
MLOG_4BYTES
,
&
mtr
));
ut_a
(
success
);
/*-------------------------*/
index
=
dict_mem_index_create
(
"SYS_TABLES"
,
"ID_IND"
,
DICT_HDR_SPACE
,
DICT_UNIQUE
,
1
);
dict_mem_index_add_field
(
index
,
"ID"
,
0
,
0
);
index
->
page_no
=
mtr_read_ulint
(
dict_hdr
+
DICT_HDR_TABLE_IDS
,
MLOG_4BYTES
,
&
mtr
);
index
->
id
=
DICT_TABLE_IDS_ID
;
ut_a
(
dict_index_add_to_cache
(
table
,
index
));
success
=
dict_index_add_to_cache
(
table
,
index
,
mtr_read_ulint
(
dict_hdr
+
DICT_HDR_TABLE_IDS
,
MLOG_4BYTES
,
&
mtr
));
ut_a
(
success
);
/*-------------------------*/
table
=
dict_mem_table_create
(
"SYS_COLUMNS"
,
DICT_HDR_SPACE
,
7
,
FALSE
);
...
...
@@ -311,10 +312,10 @@ dict_boot(void)
dict_mem_index_add_field
(
index
,
"TABLE_ID"
,
0
,
0
);
dict_mem_index_add_field
(
index
,
"POS"
,
0
,
0
);
index
->
page_no
=
mtr_read_ulint
(
dict_hdr
+
DICT_HDR_COLUMNS
,
MLOG_4BYTES
,
&
mtr
);
index
->
id
=
DICT_COLUMNS_ID
;
ut_a
(
dict_index_add_to_cache
(
table
,
index
));
success
=
dict_index_add_to_cache
(
table
,
index
,
mtr_read_ulint
(
dict_hdr
+
DICT_HDR_COLUMNS
,
MLOG_4BYTES
,
&
mtr
));
ut_a
(
success
);
/*-------------------------*/
table
=
dict_mem_table_create
(
"SYS_INDEXES"
,
DICT_HDR_SPACE
,
7
,
FALSE
);
...
...
@@ -347,10 +348,10 @@ dict_boot(void)
dict_mem_index_add_field
(
index
,
"TABLE_ID"
,
0
,
0
);
dict_mem_index_add_field
(
index
,
"ID"
,
0
,
0
);
index
->
page_no
=
mtr_read_ulint
(
dict_hdr
+
DICT_HDR_INDEXES
,
MLOG_4BYTES
,
&
mtr
);
index
->
id
=
DICT_INDEXES_ID
;
ut_a
(
dict_index_add_to_cache
(
table
,
index
));
success
=
dict_index_add_to_cache
(
table
,
index
,
mtr_read_ulint
(
dict_hdr
+
DICT_HDR_INDEXES
,
MLOG_4BYTES
,
&
mtr
));
ut_a
(
success
);
/*-------------------------*/
table
=
dict_mem_table_create
(
"SYS_FIELDS"
,
DICT_HDR_SPACE
,
3
,
FALSE
);
...
...
@@ -368,10 +369,10 @@ dict_boot(void)
dict_mem_index_add_field
(
index
,
"INDEX_ID"
,
0
,
0
);
dict_mem_index_add_field
(
index
,
"POS"
,
0
,
0
);
index
->
page_no
=
mtr_read_ulint
(
dict_hdr
+
DICT_HDR_FIELDS
,
MLOG_4BYTES
,
&
mtr
);
index
->
id
=
DICT_FIELDS_ID
;
ut_a
(
dict_index_add_to_cache
(
table
,
index
));
success
=
dict_index_add_to_cache
(
table
,
index
,
mtr_read_ulint
(
dict_hdr
+
DICT_HDR_FIELDS
,
MLOG_4BYTES
,
&
mtr
));
ut_a
(
success
);
mtr_commit
(
&
mtr
);
/*-------------------------*/
...
...
innobase/dict/dict0crea.c
View file @
045aea9d
...
...
@@ -544,9 +544,7 @@ dict_build_index_def_step(
table in the same tablespace */
index
->
space
=
table
->
space
;
index
->
page_no
=
FIL_NULL
;
node
->
page_no
=
FIL_NULL
;
row
=
dict_create_sys_indexes_tuple
(
index
,
node
->
heap
);
node
->
ind_row
=
row
;
...
...
@@ -624,18 +622,18 @@ dict_create_index_tree_step(
btr_pcur_move_to_next_user_rec
(
&
pcur
,
&
mtr
);
index
->
page_no
=
btr_create
(
index
->
type
,
index
->
space
,
index
->
id
,
node
->
page_no
=
btr_create
(
index
->
type
,
index
->
space
,
index
->
id
,
table
->
comp
,
&
mtr
);
/* printf("Created a new index tree in space %lu root page %lu\n",
index->space, index->page_no); */
page_rec_write_index_page_no
(
btr_pcur_get_rec
(
&
pcur
),
DICT_SYS_INDEXES_PAGE_NO_FIELD
,
index
->
page_no
,
&
mtr
);
node
->
page_no
,
&
mtr
);
btr_pcur_close
(
&
pcur
);
mtr_commit
(
&
mtr
);
if
(
index
->
page_no
==
FIL_NULL
)
{
if
(
node
->
page_no
==
FIL_NULL
)
{
return
(
DB_OUT_OF_FILE_SPACE
);
}
...
...
@@ -793,7 +791,7 @@ dict_truncate_index_tree(
root_page_no
=
btr_create
(
type
,
space
,
index_id
,
comp
,
mtr
);
if
(
index
)
{
index
->
page_no
=
root_page_no
;
index
->
tree
->
page
=
root_page_no
;
}
page_rec_write_index_page_no
(
rec
,
...
...
@@ -857,6 +855,7 @@ ind_create_graph_create(
node
->
index
=
index
;
node
->
state
=
INDEX_BUILD_INDEX_DEF
;
node
->
page_no
=
FIL_NULL
;
node
->
heap
=
mem_heap_create
(
256
);
node
->
ind_def
=
ins_node_create
(
INS_DIRECT
,
...
...
@@ -1076,7 +1075,8 @@ dict_create_index_step(
if
(
node
->
state
==
INDEX_ADD_TO_CACHE
)
{
success
=
dict_index_add_to_cache
(
node
->
table
,
node
->
index
);
success
=
dict_index_add_to_cache
(
node
->
table
,
node
->
index
,
node
->
page_no
);
ut_a
(
success
);
...
...
innobase/dict/dict0dict.c
View file @
045aea9d
...
...
@@ -1374,8 +1374,9 @@ dict_index_add_to_cache(
/*====================*/
/* out: TRUE if success */
dict_table_t
*
table
,
/* in: table on which the index is */
dict_index_t
*
index
)
/* in, own: index; NOTE! The index memory
dict_index_t
*
index
,
/* in, own: index; NOTE! The index memory
object is freed in this function! */
ulint
page_no
)
/* in: root page number of the index */
{
dict_index_t
*
new_index
;
dict_tree_t
*
tree
;
...
...
@@ -1461,10 +1462,9 @@ dict_index_add_to_cache(
tree
=
dict_index_get_tree
(
UT_LIST_GET_FIRST
(
cluster
->
indexes
));
new_index
->
tree
=
tree
;
new_index
->
page_no
=
tree
->
page
;
}
else
{
/* Create an index tree memory object for the index */
tree
=
dict_tree_create
(
new_index
);
tree
=
dict_tree_create
(
new_index
,
page_no
);
ut_ad
(
tree
);
new_index
->
tree
=
tree
;
...
...
@@ -1749,7 +1749,6 @@ dict_index_build_internal_clust(
new_index
->
n_user_defined_cols
=
index
->
n_fields
;
new_index
->
id
=
index
->
id
;
new_index
->
page_no
=
index
->
page_no
;
if
(
table
->
type
!=
DICT_TABLE_ORDINARY
)
{
/* The index is mixed: copy common key prefix fields */
...
...
@@ -1928,7 +1927,6 @@ dict_index_build_internal_non_clust(
new_index
->
n_user_defined_cols
=
index
->
n_fields
;
new_index
->
id
=
index
->
id
;
new_index
->
page_no
=
index
->
page_no
;
/* Copy fields from index to new_index */
dict_index_copy
(
new_index
,
index
,
0
,
index
->
n_fields
);
...
...
@@ -3565,9 +3563,10 @@ dict_tree_t*
dict_tree_create
(
/*=============*/
/* out, own: created tree */
dict_index_t
*
index
)
/* in: the index for which to create: in the
dict_index_t
*
index
,
/* in: the index for which to create: in the
case of a mixed tree, this should be the
index of the cluster object */
ulint
page_no
)
/* in: root page number of the index */
{
dict_tree_t
*
tree
;
...
...
@@ -3577,7 +3576,7 @@ dict_tree_create(
tree
->
type
=
index
->
type
;
tree
->
space
=
index
->
space
;
tree
->
page
=
index
->
page_no
;
tree
->
page
=
page_no
;
tree
->
id
=
index
->
id
;
...
...
innobase/dict/dict0load.c
View file @
045aea9d
...
...
@@ -681,12 +681,10 @@ dict_load_indexes(
}
else
{
index
=
dict_mem_index_create
(
table
->
name
,
name_buf
,
space
,
type
,
n_fields
);
index
->
page_no
=
page_no
;
index
->
id
=
id
;
dict_load_fields
(
table
,
index
,
heap
);
dict_index_add_to_cache
(
table
,
index
);
dict_index_add_to_cache
(
table
,
index
,
page_no
);
}
btr_pcur_move_to_next_user_rec
(
&
pcur
,
&
mtr
);
...
...
innobase/ibuf/ibuf0ibuf.c
View file @
045aea9d
...
...
@@ -548,11 +548,9 @@ ibuf_data_init_for_space(
dict_mem_index_add_field
(
index
,
"PAGE_NO"
,
0
,
0
);
dict_mem_index_add_field
(
index
,
"TYPES"
,
0
,
0
);
index
->
page_no
=
FSP_IBUF_TREE_ROOT_PAGE_NO
;
index
->
id
=
ut_dulint_add
(
DICT_IBUF_ID_MIN
,
space
);
dict_index_add_to_cache
(
table
,
index
);
dict_index_add_to_cache
(
table
,
index
,
FSP_IBUF_TREE_ROOT_PAGE_NO
);
data
->
index
=
dict_table_get_first_index
(
table
);
...
...
innobase/include/dict0crea.h
View file @
045aea9d
...
...
@@ -153,6 +153,7 @@ struct ind_node_struct{
/*----------------------*/
/* Local storage for this graph node */
ulint
state
;
/* node execution state */
ulint
page_no
;
/* root page number of the index */
dict_table_t
*
table
;
/* table which owns the index */
dtuple_t
*
ind_row
;
/* index definition row built */
ulint
field_no
;
/* next field definition to insert */
...
...
innobase/include/dict0dict.h
View file @
045aea9d
...
...
@@ -508,8 +508,9 @@ dict_index_add_to_cache(
/*====================*/
/* out: TRUE if success */
dict_table_t
*
table
,
/* in: table on which the index is */
dict_index_t
*
index
);
/* in, own: index; NOTE! The index memory
dict_index_t
*
index
,
/* in, own: index; NOTE! The index memory
object is freed in this function! */
ulint
page_no
);
/* in: root page number of the index */
/************************************************************************
Gets the number of fields in the internal representation of an index,
including fields added by the dictionary system. */
...
...
@@ -686,9 +687,10 @@ dict_tree_t*
dict_tree_create
(
/*=============*/
/* out, own: created tree */
dict_index_t
*
index
);
/* in: the index for which to create: in the
dict_index_t
*
index
,
/* in: the index for which to create: in the
case of a mixed tree, this should be the
index of the cluster object */
ulint
page_no
);
/* in: root page number of the index */
/**************************************************************************
Frees an index tree struct. */
...
...
innobase/include/dict0mem.h
View file @
045aea9d
...
...
@@ -218,7 +218,6 @@ struct dict_index_struct{
const
char
*
table_name
;
/* table name */
dict_table_t
*
table
;
/* back pointer to table */
ulint
space
;
/* space where the index tree is placed */
ulint
page_no
;
/* page number of the index tree root */
ulint
trx_id_offset
;
/* position of the the trx id column
in a clustered index record, if the fields
before it are known to be of a fixed size,
...
...
innobase/row/row0mysql.c
View file @
045aea9d
...
...
@@ -2455,12 +2455,20 @@ queries on the table.
2) Purge and rollback: we assign a new table id for the table. Since purge and
rollback look for the table based on the table id, they see the table as
'dropped' and discard their operations.
3) Insert buffer: we remove all entries for the table in the insert
buffer tree; ... TODO
3) Insert buffer: TRUNCATE TABLE is analogous to DROP TABLE, so we do not
have to remove insert buffer records, as the insert buffer works at a low
level. If a freed page is later reallocated, the allocator will remove
the ibuf entries for it.
TODO: when we truncate *.ibd files (analogous to DISCARD TABLESPACE), we
will have to remove we remove all entries for the table in the insert
buffer tree!
4) Linear readahead and random readahead: we use the same method as in 3) to
discard ongoing operations.
discard ongoing operations. (This will only be relevant for TRUNCATE TABLE
by DISCARD TABLESPACE.)
5) FOREIGN KEY operations: if table->n_foreign_key_checks_running > 0, we
do not allow the
discard.
We also reserve the data dictionary latch. */
do not allow the
TRUNCATE.
We also reserve the data dictionary latch. */
static
const
char
renumber_tablespace_proc
[]
=
"PROCEDURE RENUMBER_TABLESPACE_PROC () IS
\n
"
...
...
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