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
7a8d7633
Commit
7a8d7633
authored
Jan 21, 2005
by
tomas@poseidon.ndb.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0
into poseidon.ndb.mysql.com:/home/tomas/mysql-5.0
parents
04a23e22
b04675c8
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
135 additions
and
49 deletions
+135
-49
include/keycache.h
include/keycache.h
+4
-1
innobase/dict/dict0crea.c
innobase/dict/dict0crea.c
+11
-0
innobase/dict/dict0dict.c
innobase/dict/dict0dict.c
+6
-2
innobase/dict/dict0load.c
innobase/dict/dict0load.c
+17
-0
innobase/fil/fil0fil.c
innobase/fil/fil0fil.c
+51
-23
mysys/mf_keycache.c
mysys/mf_keycache.c
+35
-0
sql/mysql_priv.h
sql/mysql_priv.h
+0
-1
sql/mysqld.cc
sql/mysqld.cc
+5
-8
sql/set_var.cc
sql/set_var.cc
+2
-2
sql/sql_parse.cc
sql/sql_parse.cc
+3
-11
sql/sql_show.cc
sql/sql_show.cc
+1
-1
No files found.
include/keycache.h
View file @
7a8d7633
...
...
@@ -88,12 +88,13 @@ typedef struct st_key_cache
ulong
param_division_limit
;
/* min. percentage of warm blocks */
ulong
param_age_threshold
;
/* determines when hot block is downgraded */
/* Statistics variables */
/* Statistics variables
. These are reset in reset_key_cache_counters().
*/
ulong
global_blocks_changed
;
/* number of currently dirty blocks */
ulong
global_cache_w_requests
;
/* number of write requests (write hits) */
ulong
global_cache_write
;
/* number of writes from the cache to files */
ulong
global_cache_r_requests
;
/* number of read requests (read hits) */
ulong
global_cache_read
;
/* number of reads from files to the cache */
int
blocks
;
/* max number of blocks in the cache */
my_bool
in_init
;
/* Set to 1 in MySQL during init/resize */
}
KEY_CACHE
;
...
...
@@ -132,5 +133,7 @@ extern my_bool multi_key_cache_set(const byte *key, uint length,
KEY_CACHE
*
key_cache
);
extern
void
multi_key_cache_change
(
KEY_CACHE
*
old_data
,
KEY_CACHE
*
new_data
);
extern
int
reset_key_cache_counters
(
const
char
*
name
,
KEY_CACHE
*
key_cache
);
C_MODE_END
#endif
/* _keycache_h */
innobase/dict/dict0crea.c
View file @
7a8d7633
...
...
@@ -81,6 +81,17 @@ dict_create_sys_tables_tuple(
dfield_set_data
(
dfield
,
ptr
,
8
);
/* 7: MIX_LEN --------------------------*/
/* Track corruption reported on mailing list Jan 14, 2005 */
if
(
table
->
mix_len
!=
0
&&
table
->
mix_len
!=
0x80000000
)
{
fprintf
(
stderr
,
"InnoDB: Error: mix_len is %lu in table %s
\n
"
,
(
ulong
)
table
->
mix_len
,
table
->
name
);
mem_analyze_corruption
((
byte
*
)
&
(
table
->
mix_len
));
ut_error
;
}
dfield
=
dtuple_get_nth_field
(
entry
,
5
);
ptr
=
mem_heap_alloc
(
heap
,
4
);
...
...
innobase/dict/dict0dict.c
View file @
7a8d7633
...
...
@@ -2920,9 +2920,9 @@ loop:
constraint_name
=
NULL
;
if
(
ptr1
<
ptr2
)
{
/* The user
has
specified a constraint name. Pick it so
/* The user
may have
specified a constraint name. Pick it so
that we can store 'databasename/constraintname' as the id of
the id
of the constraint to system tables. */
of the constraint to system tables. */
ptr
=
ptr1
;
ptr
=
dict_accept
(
ptr
,
"CONSTRAINT"
,
&
success
);
...
...
@@ -2959,6 +2959,10 @@ loop:
ptr
=
dict_accept
(
ptr
,
"FOREIGN"
,
&
success
);
if
(
!
success
)
{
goto
loop
;
}
if
(
!
isspace
(
*
ptr
))
{
goto
loop
;
}
...
...
innobase/dict/dict0load.c
View file @
7a8d7633
...
...
@@ -728,6 +728,7 @@ dict_load_table(
ulint
space
;
ulint
n_cols
;
ulint
err
;
ulint
mix_len
;
mtr_t
mtr
;
#ifdef UNIV_SYNC_DEBUG
...
...
@@ -775,6 +776,22 @@ dict_load_table(
return
(
NULL
);
}
/* Track a corruption bug reported on the MySQL mailing list Jan 14,
2005: mix_len had a value different from 0 */
field
=
rec_get_nth_field
(
rec
,
7
,
&
len
);
ut_a
(
len
==
4
);
mix_len
=
mach_read_from_4
(
field
);
if
(
mix_len
!=
0
&&
mix_len
!=
0x80000000
)
{
ut_print_timestamp
(
stderr
);
fprintf
(
stderr
,
" InnoDB: table %s has a nonsensical mix len %lu
\n
"
,
name
,
(
ulong
)
mix_len
);
}
#if MYSQL_VERSION_ID < 50003
/* Starting from MySQL 5.0.3, the high-order bit of MIX_LEN is the
"compact format" flag. */
...
...
innobase/fil/fil0fil.c
View file @
7a8d7633
...
...
@@ -480,28 +480,33 @@ fil_node_open_file(
ut_a
(
node
->
n_pending
==
0
);
ut_a
(
node
->
open
==
FALSE
);
/* printf("Opening file %s\n", node->name); */
if
(
node
->
size
==
0
)
{
/* It must be a single-table tablespace and we do not know the
size of the file yet. First we open the file in the normal
mode, no async I/O here, for simplicity. Then do some checks,
and close the file again.
NOTE that we could not use the simple file read function
os_file_read() in Windows to read from a file opened for
async I/O! */
node
->
handle
=
os_file_create_simple_no_error_handling
(
node
->
name
,
OS_FILE_OPEN
,
OS_FILE_READ_ONLY
,
&
success
);
if
(
!
success
)
{
/* The following call prints an error message */
os_file_get_last_error
(
TRUE
);
if
(
space
->
purpose
==
FIL_LOG
)
{
node
->
handle
=
os_file_create
(
node
->
name
,
OS_FILE_OPEN
,
OS_FILE_AIO
,
OS_LOG_FILE
,
&
ret
);
}
else
if
(
node
->
is_raw_disk
)
{
node
->
handle
=
os_file_create
(
node
->
name
,
OS_FILE_OPEN_RAW
,
OS_FILE_AIO
,
OS_DATA_FILE
,
&
ret
);
}
else
{
node
->
handle
=
os_file_create
(
node
->
name
,
OS_FILE_OPEN
,
OS_FILE_AIO
,
OS_DATA_FILE
,
&
ret
);
}
ut_a
(
ret
);
node
->
open
=
TRUE
;
ut_print_timestamp
(
stderr
);
system
->
n_open
++
;
fprintf
(
stderr
,
" InnoDB: Fatal error: cannot open %s
\n
."
"InnoDB: Have you deleted .ibd files under a running mysqld server?
\n
"
,
node
->
name
);
ut_a
(
0
);
}
if
(
node
->
size
==
0
)
{
ut_a
(
space
->
purpose
!=
FIL_LOG
);
ut_a
(
space
->
id
!=
0
);
os_file_get_size
(
node
->
handle
,
&
size_low
,
&
size_high
);
...
...
@@ -511,11 +516,6 @@ fil_node_open_file(
node
->
size
=
(
ulint
)
(
size_bytes
/
UNIV_PAGE_SIZE
);
#else
/* It must be a single-table tablespace and we do not know the
size of the file yet */
ut_a
(
space
->
id
!=
0
);
if
(
size_bytes
<
FIL_IBD_FILE_INITIAL_SIZE
*
UNIV_PAGE_SIZE
)
{
fprintf
(
stderr
,
"InnoDB: Error: the size of single-table tablespace file %s
\n
"
...
...
@@ -539,6 +539,10 @@ fil_node_open_file(
ut_free
(
buf2
);
/* Close the file now that we have read the space id from it */
os_file_close
(
node
->
handle
);
if
(
space_id
==
ULINT_UNDEFINED
||
space_id
==
0
)
{
fprintf
(
stderr
,
"InnoDB: Error: tablespace id %lu in file %s is not sensible
\n
"
,
...
...
@@ -566,6 +570,30 @@ fil_node_open_file(
space
->
size
+=
node
->
size
;
}
/* printf("Opening file %s\n", node->name); */
/* Open the file for reading and writing, in Windows normally in the
unbuffered async I/O mode, though global variables may make
os_file_create() to fall back to the normal file I/O mode. */
if
(
space
->
purpose
==
FIL_LOG
)
{
node
->
handle
=
os_file_create
(
node
->
name
,
OS_FILE_OPEN
,
OS_FILE_AIO
,
OS_LOG_FILE
,
&
ret
);
}
else
if
(
node
->
is_raw_disk
)
{
node
->
handle
=
os_file_create
(
node
->
name
,
OS_FILE_OPEN_RAW
,
OS_FILE_AIO
,
OS_DATA_FILE
,
&
ret
);
}
else
{
node
->
handle
=
os_file_create
(
node
->
name
,
OS_FILE_OPEN
,
OS_FILE_AIO
,
OS_DATA_FILE
,
&
ret
);
}
ut_a
(
ret
);
node
->
open
=
TRUE
;
system
->
n_open
++
;
if
(
space
->
purpose
==
FIL_TABLESPACE
&&
space
->
id
!=
0
)
{
/* Put the node to the LRU list */
UT_LIST_ADD_FIRST
(
LRU
,
system
->
LRU
,
node
);
...
...
mysys/mf_keycache.c
View file @
7a8d7633
...
...
@@ -2444,6 +2444,41 @@ static int flush_all_key_blocks(KEY_CACHE *keycache)
}
/*
Reset the counters of a key cache.
SYNOPSIS
reset_key_cache_counters()
name the name of a key cache
key_cache pointer to the key kache to be reset
DESCRIPTION
This procedure is used by process_key_caches() to reset the counters of all
currently used key caches, both the default one and the named ones.
RETURN
0 on success (always because it can't fail)
*/
int
reset_key_cache_counters
(
const
char
*
name
,
KEY_CACHE
*
key_cache
)
{
DBUG_ENTER
(
"reset_key_cache_counters"
);
if
(
!
key_cache
->
key_cache_inited
)
{
DBUG_PRINT
(
"info"
,
(
"Key cache %s not initialized."
,
name
));
DBUG_RETURN
(
0
);
}
DBUG_PRINT
(
"info"
,
(
"Resetting counters for key cache %s."
,
name
));
key_cache
->
global_blocks_changed
=
0
;
/* Key_blocks_not_flushed */
key_cache
->
global_cache_r_requests
=
0
;
/* Key_read_requests */
key_cache
->
global_cache_read
=
0
;
/* Key_reads */
key_cache
->
global_cache_w_requests
=
0
;
/* Key_write_requests */
key_cache
->
global_cache_write
=
0
;
/* Key_writes */
DBUG_RETURN
(
0
);
}
#ifndef DBUG_OFF
/*
Test if disk-cache is ok
...
...
sql/mysql_priv.h
View file @
7a8d7633
...
...
@@ -1064,7 +1064,6 @@ extern struct system_variables global_system_variables;
extern
struct
system_variables
max_system_variables
;
extern
struct
system_status_var
global_status_var
;
extern
struct
rand_struct
sql_rand
;
extern
KEY_CACHE
*
sql_key_cache
;
extern
const
char
*
opt_date_time_formats
[];
extern
KNOWN_DATE_TIME_FORMAT
known_date_time_formats
[];
...
...
sql/mysqld.cc
View file @
7a8d7633
...
...
@@ -395,7 +395,6 @@ struct system_status_var global_status_var;
MY_TMPDIR
mysql_tmpdir_list
;
MY_BITMAP
temp_pool
;
KEY_CACHE
*
sql_key_cache
;
CHARSET_INFO
*
system_charset_info
,
*
files_charset_info
;
CHARSET_INFO
*
national_charset_info
,
*
table_alias_charset
;
...
...
@@ -1867,14 +1866,14 @@ We will try our best to scrape up some info that will hopefully help diagnose\n\
the problem, but since we have already crashed, something is definitely wrong
\n
\
and this may fail.
\n\n
"
);
fprintf
(
stderr
,
"key_buffer_size=%lu
\n
"
,
(
ulong
)
sql
_key_cache
->
key_cache_mem_size
);
(
ulong
)
dflt
_key_cache
->
key_cache_mem_size
);
fprintf
(
stderr
,
"read_buffer_size=%ld
\n
"
,
global_system_variables
.
read_buff_size
);
fprintf
(
stderr
,
"max_used_connections=%ld
\n
"
,
max_used_connections
);
fprintf
(
stderr
,
"max_connections=%ld
\n
"
,
max_connections
);
fprintf
(
stderr
,
"threads_connected=%d
\n
"
,
thread_count
);
fprintf
(
stderr
,
"It is possible that mysqld could use up to
\n
\
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections = %ld K
\n
\
bytes of memory
\n
"
,
((
ulong
)
sql
_key_cache
->
key_cache_mem_size
+
bytes of memory
\n
"
,
((
ulong
)
dflt
_key_cache
->
key_cache_mem_size
+
(
global_system_variables
.
read_buff_size
+
global_system_variables
.
sortbuff_size
)
*
max_connections
)
/
1024
);
...
...
@@ -2141,12 +2140,12 @@ extern "C" void *signal_hand(void *arg __attribute__((unused)))
case
SIGHUP
:
if
(
!
abort_loop
)
{
mysql_print_status
((
THD
*
)
0
);
// Print some debug info
reload_acl_and_cache
((
THD
*
)
0
,
(
REFRESH_LOG
|
REFRESH_TABLES
|
REFRESH_FAST
|
REFRESH_GRANT
|
REFRESH_THREADS
|
REFRESH_HOSTS
),
(
TABLE_LIST
*
)
0
,
NULL
);
// Flush logs
mysql_print_status
((
THD
*
)
0
);
// Send debug some info
}
break
;
#ifdef USE_ONE_SIGNAL_HAND
...
...
@@ -2820,8 +2819,6 @@ server.");
/* call ha_init_key_cache() on all key caches to init them */
process_key_caches
(
&
ha_init_key_cache
);
/* We must set dflt_key_cache in case we are using ISAM tables */
dflt_key_cache
=
sql_key_cache
;
#if defined(HAVE_MLOCKALL) && defined(MCL_CURRENT) && !defined(EMBEDDED_LIBRARY)
if
(
locked_in_memory
&&
!
getuid
())
...
...
@@ -5875,10 +5872,10 @@ static void mysql_init_variables(void)
threads
.
empty
();
thread_cache
.
empty
();
key_caches
.
empty
();
multi_keycache_init
();
if
(
!
(
sql_key_cache
=
get_or_create_key_cache
(
default_key_cache_base
.
str
,
if
(
!
(
dflt_key_cache
=
get_or_create_key_cache
(
default_key_cache_base
.
str
,
default_key_cache_base
.
length
)))
exit
(
1
);
multi_keycache_init
();
/* set key_cache_hash.default_value = dflt_key_cache */
/* Initialize structures that is used when processing options */
replicate_rewrite_db
.
empty
();
...
...
sql/set_var.cc
View file @
7a8d7633
...
...
@@ -2232,7 +2232,7 @@ bool sys_var_key_buffer_size::update(THD *thd, set_var *var)
if
(
!
tmp
)
// Zero size means delete
{
if
(
key_cache
==
sql
_key_cache
)
if
(
key_cache
==
dflt
_key_cache
)
goto
end
;
// Ignore default key cache
if
(
key_cache
->
key_cache_inited
)
// If initied
...
...
@@ -2246,7 +2246,7 @@ bool sys_var_key_buffer_size::update(THD *thd, set_var *var)
base_name
->
length
,
&
list
);
key_cache
->
in_init
=
1
;
pthread_mutex_unlock
(
&
LOCK_global_system_variables
);
error
=
reassign_keycache_tables
(
thd
,
key_cache
,
sql
_key_cache
);
error
=
reassign_keycache_tables
(
thd
,
key_cache
,
dflt
_key_cache
);
pthread_mutex_lock
(
&
LOCK_global_system_variables
);
key_cache
->
in_init
=
0
;
}
...
...
sql/sql_parse.cc
View file @
7a8d7633
...
...
@@ -5867,6 +5867,7 @@ void kill_one_thread(THD *thd, ulong id, bool only_kill_query)
my_error
(
error
,
MYF
(
0
),
id
);
}
/* Clear most status variables */
static
void
refresh_status
(
void
)
...
...
@@ -5876,17 +5877,6 @@ static void refresh_status(void)
{
if
(
ptr
->
type
==
SHOW_LONG
)
*
(
ulong
*
)
ptr
->
value
=
0
;
else
if
(
ptr
->
type
==
SHOW_KEY_CACHE_LONG
)
{
/*
Reset value in 'default' key cache.
This needs to be recoded when we have thread specific key values
*/
char
*
value
=
(((
char
*
)
sql_key_cache
)
+
(
uint
)
((
char
*
)
(
ptr
->
value
)
-
(
char
*
)
&
dflt_key_cache_var
));
*
(
ulong
*
)
value
=
0
;
}
else
if
(
ptr
->
type
==
SHOW_LONG_STATUS
)
{
THD
*
thd
=
current_thd
;
...
...
@@ -5895,6 +5885,8 @@ static void refresh_status(void)
bzero
((
char
*
)
&
thd
->
status_var
,
sizeof
(
thd
->
status_var
));
}
}
/* Reset the counters of all key caches (default and named). */
process_key_caches
(
reset_key_cache_counters
);
pthread_mutex_unlock
(
&
LOCK_status
);
}
...
...
sql/sql_show.cc
View file @
7a8d7633
...
...
@@ -1512,7 +1512,7 @@ static bool show_status_array(THD *thd, const char *wild,
#endif
/* HAVE_OPENSSL */
case
SHOW_KEY_CACHE_LONG
:
case
SHOW_KEY_CACHE_CONST_LONG
:
value
=
(
value
-
(
char
*
)
&
dflt_key_cache_var
)
+
(
char
*
)
sql
_key_cache
;
value
=
(
value
-
(
char
*
)
&
dflt_key_cache_var
)
+
(
char
*
)
dflt
_key_cache
;
end
=
int10_to_str
(
*
(
long
*
)
value
,
buff
,
10
);
break
;
case
SHOW_UNDEF
:
// Show never happen
...
...
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