Commit 0ce7e16e authored by unknown's avatar unknown

Merge work:/my/mysql into tik.mysql.fi:/home/my/mysql


Docs/manual.texi:
  Auto merged
parents 36b6c73f 0edad3cb
This diff is collapsed.
...@@ -39,13 +39,21 @@ $opt_loop_count=10000; # Change this to make test harder/easier ...@@ -39,13 +39,21 @@ $opt_loop_count=10000; # Change this to make test harder/easier
chomp($pwd = `pwd`); $pwd = "." if ($pwd eq ''); chomp($pwd = `pwd`); $pwd = "." if ($pwd eq '');
require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n"; require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
$create_loop_count=$opt_loop_count;
if ($opt_small_test) if ($opt_small_test)
{ {
$opt_loop_count/=100; $opt_loop_count/=100;
$create_loop_count/=1000;
} }
$max_tables=min($limits->{'max_tables'},$opt_loop_count); $max_tables=min($limits->{'max_tables'},$opt_loop_count);
if ($opt_small_test)
{
$max_tables=10;
}
print "Testing the speed of creating and droping tables\n"; print "Testing the speed of creating and droping tables\n";
print "Testing with $max_tables tables and $opt_loop_count loop count\n\n"; print "Testing with $max_tables tables and $opt_loop_count loop count\n\n";
...@@ -177,7 +185,7 @@ print "Testing create+drop\n"; ...@@ -177,7 +185,7 @@ print "Testing create+drop\n";
$loop_time=new Benchmark; $loop_time=new Benchmark;
for ($i=1 ; $i <= $opt_loop_count ; $i++) for ($i=1 ; $i <= $create_loop_count ; $i++)
{ {
do_many($dbh,$server->create("bench_$i", do_many($dbh,$server->create("bench_$i",
["i int NOT NULL", ["i int NOT NULL",
...@@ -190,7 +198,7 @@ for ($i=1 ; $i <= $opt_loop_count ; $i++) ...@@ -190,7 +198,7 @@ for ($i=1 ; $i <= $opt_loop_count ; $i++)
} }
$end_time=new Benchmark; $end_time=new Benchmark;
print "Time for create+drop ($opt_loop_count): " . print "Time for create+drop ($create_loop_count): " .
timestr(timediff($end_time, $loop_time),"all") . "\n"; timestr(timediff($end_time, $loop_time),"all") . "\n";
if ($opt_fast && defined($server->{vacuum})) if ($opt_fast && defined($server->{vacuum}))
......
...@@ -1658,12 +1658,15 @@ int ha_berkeley::external_lock(THD *thd, int lock_type) ...@@ -1658,12 +1658,15 @@ int ha_berkeley::external_lock(THD *thd, int lock_type)
{ {
if (!thd->transaction.bdb_lock_count++) if (!thd->transaction.bdb_lock_count++)
{ {
changed_rows=0;
/* First table lock, start transaction */ /* First table lock, start transaction */
if ((thd->options & (OPTION_NOT_AUTO_COMMIT | OPTION_BEGIN)) && if ((thd->options & (OPTION_NOT_AUTO_COMMIT | OPTION_BEGIN |
OPTION_TABLE_LOCK)) &&
!thd->transaction.all.bdb_tid) !thd->transaction.all.bdb_tid)
{ {
DBUG_ASSERT(thd->transaction.stmt.bdb_tid != 0);
/* We have to start a master transaction */ /* We have to start a master transaction */
DBUG_PRINT("trans",("starting transaction")); DBUG_PRINT("trans",("starting transaction all"));
if ((error=txn_begin(db_env, 0, if ((error=txn_begin(db_env, 0,
(DB_TXN**) &thd->transaction.all.bdb_tid, (DB_TXN**) &thd->transaction.all.bdb_tid,
0))) 0)))
...@@ -1671,8 +1674,10 @@ int ha_berkeley::external_lock(THD *thd, int lock_type) ...@@ -1671,8 +1674,10 @@ int ha_berkeley::external_lock(THD *thd, int lock_type)
thd->transaction.bdb_lock_count--; // We didn't get the lock /* purecov: inspected */ thd->transaction.bdb_lock_count--; // We didn't get the lock /* purecov: inspected */
DBUG_RETURN(error); /* purecov: inspected */ DBUG_RETURN(error); /* purecov: inspected */
} }
if (thd->in_lock_tables)
DBUG_RETURN(0); // Don't create stmt trans
} }
DBUG_PRINT("trans",("starting transaction for statement")); DBUG_PRINT("trans",("starting transaction stmt"));
if ((error=txn_begin(db_env, if ((error=txn_begin(db_env,
(DB_TXN*) thd->transaction.all.bdb_tid, (DB_TXN*) thd->transaction.all.bdb_tid,
(DB_TXN**) &thd->transaction.stmt.bdb_tid, (DB_TXN**) &thd->transaction.stmt.bdb_tid,
...@@ -1684,7 +1689,6 @@ int ha_berkeley::external_lock(THD *thd, int lock_type) ...@@ -1684,7 +1689,6 @@ int ha_berkeley::external_lock(THD *thd, int lock_type)
} }
} }
transaction= (DB_TXN*) thd->transaction.stmt.bdb_tid; transaction= (DB_TXN*) thd->transaction.stmt.bdb_tid;
changed_rows=0;
} }
else else
{ {
...@@ -1722,6 +1726,7 @@ int ha_berkeley::start_stmt(THD *thd) ...@@ -1722,6 +1726,7 @@ int ha_berkeley::start_stmt(THD *thd)
DBUG_ENTER("ha_berkeley::start_stmt"); DBUG_ENTER("ha_berkeley::start_stmt");
if (!thd->transaction.stmt.bdb_tid) if (!thd->transaction.stmt.bdb_tid)
{ {
DBUG_PRINT("trans",("starting transaction stmt"));
error=txn_begin(db_env, (DB_TXN*) thd->transaction.all.bdb_tid, error=txn_begin(db_env, (DB_TXN*) thd->transaction.all.bdb_tid,
(DB_TXN**) &thd->transaction.stmt.bdb_tid, (DB_TXN**) &thd->transaction.stmt.bdb_tid,
0); 0);
......
...@@ -163,7 +163,8 @@ void kill_one_thread(THD *thd, ulong id); ...@@ -163,7 +163,8 @@ void kill_one_thread(THD *thd, ulong id);
#define OPTION_BIN_LOG OPTION_BUFFER_RESULT*2 #define OPTION_BIN_LOG OPTION_BUFFER_RESULT*2
#define OPTION_NOT_AUTO_COMMIT OPTION_BIN_LOG*2 #define OPTION_NOT_AUTO_COMMIT OPTION_BIN_LOG*2
#define OPTION_BEGIN OPTION_NOT_AUTO_COMMIT*2 #define OPTION_BEGIN OPTION_NOT_AUTO_COMMIT*2
#define OPTION_QUICK OPTION_BEGIN*2 #define OPTION_TABLE_LOCK OPTION_BEGIN*2
#define OPTION_QUICK OPTION_TABLE_LOCK*2
#define OPTION_QUOTE_SHOW_CREATE OPTION_QUICK*2 #define OPTION_QUOTE_SHOW_CREATE OPTION_QUICK*2
#define OPTION_INTERNAL_SUBTRANSACTIONS OPTION_QUOTE_SHOW_CREATE*2 #define OPTION_INTERNAL_SUBTRANSACTIONS OPTION_QUOTE_SHOW_CREATE*2
......
...@@ -413,7 +413,10 @@ void close_thread_tables(THD *thd, bool locked) ...@@ -413,7 +413,10 @@ void close_thread_tables(THD *thd, bool locked)
DBUG_ENTER("close_thread_tables"); DBUG_ENTER("close_thread_tables");
if (thd->locked_tables) if (thd->locked_tables)
{
ha_commit_stmt(thd); // If select statement
DBUG_VOID_RETURN; // LOCK TABLES in use DBUG_VOID_RETURN; // LOCK TABLES in use
}
TABLE *table,*next; TABLE *table,*next;
bool found_old_table=0; bool found_old_table=0;
......
...@@ -81,7 +81,8 @@ static void init_signals(void) ...@@ -81,7 +81,8 @@ static void init_signals(void)
inline bool end_active_trans(THD *thd) inline bool end_active_trans(THD *thd)
{ {
int error=0; int error=0;
if (thd->options & (OPTION_NOT_AUTO_COMMIT | OPTION_BEGIN)) if (thd->options & (OPTION_NOT_AUTO_COMMIT | OPTION_BEGIN |
OPTION_TABLE_LOCK))
{ {
thd->options&= ~(ulong) (OPTION_BEGIN | OPTION_STATUS_NO_TRANS_UPDATE); thd->options&= ~(ulong) (OPTION_BEGIN | OPTION_STATUS_NO_TRANS_UPDATE);
thd->server_status&= ~SERVER_STATUS_IN_TRANS; thd->server_status&= ~SERVER_STATUS_IN_TRANS;
...@@ -1825,7 +1826,11 @@ mysql_execute_command(void) ...@@ -1825,7 +1826,11 @@ mysql_execute_command(void)
{ {
thd->lock=thd->locked_tables; thd->lock=thd->locked_tables;
thd->locked_tables=0; // Will be automaticly closed thd->locked_tables=0; // Will be automaticly closed
}
if (thd->options & OPTION_TABLE_LOCK)
{
end_active_trans(thd); end_active_trans(thd);
thd->options&= ~(ulong) (OPTION_TABLE_LOCK);
} }
if (thd->global_read_lock) if (thd->global_read_lock)
{ {
...@@ -1847,12 +1852,15 @@ mysql_execute_command(void) ...@@ -1847,12 +1852,15 @@ mysql_execute_command(void)
if (check_db_used(thd,tables) || end_active_trans(thd)) if (check_db_used(thd,tables) || end_active_trans(thd))
goto error; goto error;
thd->in_lock_tables=1; thd->in_lock_tables=1;
thd->options|= OPTION_TABLE_LOCK;
if (!(res=open_and_lock_tables(thd,tables))) if (!(res=open_and_lock_tables(thd,tables)))
{ {
thd->locked_tables=thd->lock; thd->locked_tables=thd->lock;
thd->lock=0; thd->lock=0;
send_ok(&thd->net); send_ok(&thd->net);
} }
else
thd->options&= ~(ulong) (OPTION_TABLE_LOCK);
thd->in_lock_tables=0; thd->in_lock_tables=0;
break; break;
case SQLCOM_CREATE_DB: case SQLCOM_CREATE_DB:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment