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
b0aa96dd
Commit
b0aa96dd
authored
Jun 04, 2002
by
monty@hundin.mysql.fi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed mutex problem in TRUNCATE TABLE
parent
8cba72fe
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
137 additions
and
3 deletions
+137
-3
Docs/manual.texi
Docs/manual.texi
+3
-0
sql/mysqld.cc
sql/mysqld.cc
+3
-3
sql/sql_delete.cc
sql/sql_delete.cc
+6
-0
tests/truncate.pl
tests/truncate.pl
+125
-0
No files found.
Docs/manual.texi
View file @
b0aa96dd
...
...
@@ -49343,6 +49343,9 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
@itemize @bullet
@item
Added missing mutex in @code{TRUNCATE TABLE}; This fixes some core
dump/hangup problems when using @code{TRUNCATE TABLE}.
@item
Fixed that @code{ALTER TABLE table_name RENAME new_table_name} is as fast
as @code{RENAME TABLE}.
@item
sql/mysqld.cc
View file @
b0aa96dd
...
...
@@ -3472,12 +3472,12 @@ static struct my_option my_long_options[] =
{
"query_cache_limit"
,
OPT_QUERY_CACHE_LIMIT
,
"Don't cache results that are bigger than this."
,
(
gptr
*
)
&
query_cache_limit
,
(
gptr
*
)
&
query_cache_limit
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
1024
*
1024L
,
0
,
ULONG_MAX
,
0
,
1
,
0
},
REQUIRED_ARG
,
1024
*
1024L
,
0
,
(
longlong
)
ULONG_MAX
,
0
,
1
,
0
},
#endif
/*HAVE_QUERY_CACHE*/
{
"query_cache_size"
,
OPT_QUERY_CACHE_SIZE
,
"The memory allocated to store results from old queries."
,
(
gptr
*
)
&
query_cache_size
,
(
gptr
*
)
&
query_cache_size
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
0
,
0
,
ULONG_MAX
,
0
,
1
,
0
},
REQUIRED_ARG
,
0
,
0
,
(
longlong
)
ULONG_MAX
,
0
,
1
,
0
},
#ifdef HAVE_QUERY_CACHE
{
"query_cache_startup_type"
,
OPT_QUERY_CACHE_STARTUP_TYPE
,
"0 = OFF = Don't cache or retrieve results. 1 = ON = Cache all results except SELECT SQL_NO_CACHE ... queries. 2 = DEMAND = Cache only SELECT SQL_CACHE ... queries."
,
...
...
@@ -3497,7 +3497,7 @@ static struct my_option my_long_options[] =
{
"relay_log_space_limit"
,
OPT_RELAY_LOG_SPACE_LIMIT
,
"Undocumented"
,
(
gptr
*
)
&
relay_log_space_limit
,
(
gptr
*
)
&
relay_log_space_limit
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
0L
,
0L
,
ULONG_MAX
,
0
,
1
,
0
},
(
longlong
)
ULONG_MAX
,
0
,
1
,
0
},
{
"slave_net_timeout"
,
OPT_SLAVE_NET_TIMEOUT
,
"Number of seconds to wait for more data from a master/slave connection before aborting the read."
,
(
gptr
*
)
&
slave_net_timeout
,
(
gptr
*
)
&
slave_net_timeout
,
0
,
...
...
sql/sql_delete.cc
View file @
b0aa96dd
...
...
@@ -573,9 +573,15 @@ int mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok)
}
send_ok
(
&
thd
->
net
);
// This should return record count
}
VOID
(
pthread_mutex_lock
(
&
LOCK_open
));
unlock_table_name
(
thd
,
table_list
);
VOID
(
pthread_mutex_unlock
(
&
LOCK_open
));
}
else
if
(
error
)
{
VOID
(
pthread_mutex_lock
(
&
LOCK_open
));
unlock_table_name
(
thd
,
table_list
);
VOID
(
pthread_mutex_unlock
(
&
LOCK_open
));
}
DBUG_RETURN
(
error
?
-
1
:
0
);
}
tests/truncate.pl
0 → 100755
View file @
b0aa96dd
#!/usr/bin/perl -w
#
# This is a test with uses many processes to test a MySQL server.
#
$opt_loop_count
=
10000
;
# Change this to make test harder/easier
##################### Standard benchmark inits ##############################
use
DBI
;
use
Getopt::
Long
;
use
Benchmark
;
package
main
;
$opt_skip_create
=
$opt_skip_in
=
$opt_verbose
=
$opt_fast_insert
=
$opt_lock_tables
=
$opt_debug
=
$opt_skip_delete
=
$opt_fast
=
$opt_force
=
0
;
$opt_threads
=
2
;
$opt_host
=
$opt_user
=
$opt_password
=
"";
$opt_db
=
"
test
";
GetOptions
("
host=s
","
db=s
","
user=s
","
password=s
","
loop-count=i
","
skip-create
","
skip-in
","
skip-delete
","
verbose
","
fast-insert
","
lock-tables
","
debug
","
fast
","
force
","
threads=i
")
||
die
"
Aborted
";
$opt_verbose
=
$opt_debug
=
$opt_lock_tables
=
$opt_fast_insert
=
$opt_fast
=
$opt_skip_in
=
$opt_force
=
undef
;
# Ignore warnings from these
print
"
Testing truncate from
$opt_threads
multiple connections
$opt_loop_count
times
\n
";
@testtables
=
(
["
bench_f31
",
"
type=heap
"]);
####
#### Start timeing and start test
####
$start_time
=
new
Benchmark
;
$dbh
=
DBI
->
connect
("
DBI:mysql:
$opt_db
:
$opt_host
",
$opt_user
,
$opt_password
,
{
PrintError
=>
0
})
||
die
$
DBI::
errstr
;
if
(
!
$opt_skip_create
)
{
my
$table_def
;
foreach
$table_def
(
@testtables
)
{
my
(
$table
,
$extra
)
=
(
$table_def
->
[
0
],
$table_def
->
[
1
]);
print
"
Creating table
$table
in database
$opt_db
\n
";
$dbh
->
do
("
drop table if exists
$table
");
$dbh
->
do
("
create table
$table
"
.
"
(id int(6) not null,
"
.
"
info varchar(32),
"
.
"
marker timestamp,
"
.
"
flag int not null,
"
.
"
primary key(id))
$extra
")
or
die
$
DBI::
errstr
;
}
}
$dbh
->
disconnect
;
$dbh
=
0
;
# Close handler
$|
=
1
;
# Autoflush
####
#### Start the tests
####
for
(
$i
=
0
;
$i
<
$opt_threads
;
$i
++
)
{
test_truncate
()
if
((
$pid
=
fork
())
==
0
);
$work
{
$pid
}
=
"
truncate
";
}
print
"
Started
$opt_threads
threads
\n
";
$errors
=
0
;
$running_insert_threads
=
$opt_threads
;
while
((
$pid
=
wait
())
!=
-
1
)
{
$ret
=
$?
/
256
;
print
"
thread '
"
.
$work
{
$pid
}
.
"
' finished with exit code
$ret
\n
";
--
$running_insert_threads
;
$errors
++
if
(
$ret
!=
0
);
}
#
# Cleanup
#
if
(
!
$opt_skip_delete
&&
!
$errors
)
{
my
$table_def
;
$dbh
=
DBI
->
connect
("
DBI:mysql:
$opt_db
:
$opt_host
",
$opt_user
,
$opt_password
,
{
PrintError
=>
0
})
||
die
$
DBI::
errstr
;
foreach
$table_def
(
@testtables
)
{
$dbh
->
do
("
drop table
"
.
$table_def
->
[
0
]);
}
$dbh
->
disconnect
;
$dbh
=
0
;
# Close handler
}
print
(
$errors
?
"
Test failed
\n
"
:"
Test ok
\n
");
$end_time
=
new
Benchmark
;
print
"
Total time:
"
.
timestr
(
timediff
(
$end_time
,
$start_time
),"
noc
")
.
"
\n
";
exit
(
0
);
#
# Insert records in the table
#
sub
test_truncate
{
my
(
$dbh
,
$i
,
$j
,
$count
,
$table_def
,
$table
);
$dbh
=
DBI
->
connect
("
DBI:mysql:
$opt_db
:
$opt_host
",
$opt_user
,
$opt_password
,
{
PrintError
=>
0
})
||
die
$
DBI::
errstr
;
for
(
$count
=
0
;
$count
<
$opt_loop_count
;
$count
++
)
{
my
(
$table
)
=
(
$testtables
[
0
]
->
[
0
]);
$dbh
->
do
("
truncate table
$table
")
||
die
"
Got error on truncate:
$DBI
::errstr
\n
";
}
$dbh
->
disconnect
;
$dbh
=
0
;
print
"
Test_truncate: Run
$count
times
\n
";
exit
(
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