Commit c2bfc5b2 authored by Rik Prohaska's avatar Rik Prohaska

DB-832 add start time to tokudb_trx information schema table

parent e1dc3624
...@@ -2,7 +2,7 @@ set default_storage_engine='tokudb'; ...@@ -2,7 +2,7 @@ set default_storage_engine='tokudb';
set tokudb_prelock_empty=false; set tokudb_prelock_empty=false;
drop table if exists t; drop table if exists t;
create table t (id int primary key); create table t (id int primary key);
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name
...@@ -19,7 +19,7 @@ TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main ...@@ -19,7 +19,7 @@ TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main
select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name
REQUEST_TRX_ID BLOCK_TRX_ID ./test/t-main 0001000000 0001000000 LOCK_WAITS_START_TIME test t main REQUEST_TRX_ID BLOCK_TRX_ID ./test/t-main 0001000000 0001000000 LOCK_WAITS_START_TIME test t main
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
TRX_ID MYSQL_ID TRX_ID MYSQL_ID
TRX_ID MYSQL_ID TRX_ID MYSQL_ID
...@@ -31,7 +31,7 @@ select * from information_schema.tokudb_lock_waits; ...@@ -31,7 +31,7 @@ select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name
ERROR 23000: Duplicate entry '1' for key 'PRIMARY' ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
commit; commit;
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name
...@@ -48,7 +48,7 @@ TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main ...@@ -48,7 +48,7 @@ TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main
select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name
REQUEST_TRX_ID BLOCK_TRX_ID ./test/t-main 0001000000 0001000000 LOCK_WAITS_START_TIME test t main REQUEST_TRX_ID BLOCK_TRX_ID ./test/t-main 0001000000 0001000000 LOCK_WAITS_START_TIME test t main
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
TRX_ID MYSQL_ID TRX_ID MYSQL_ID
TRX_ID MYSQL_ID TRX_ID MYSQL_ID
...@@ -59,7 +59,7 @@ TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main ...@@ -59,7 +59,7 @@ TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main
select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name
commit; commit;
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name
......
...@@ -2,7 +2,7 @@ set default_storage_engine='tokudb'; ...@@ -2,7 +2,7 @@ set default_storage_engine='tokudb';
set tokudb_prelock_empty=false; set tokudb_prelock_empty=false;
drop table if exists t; drop table if exists t;
create table t (id int primary key); create table t (id int primary key);
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name
...@@ -19,7 +19,7 @@ TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main ...@@ -19,7 +19,7 @@ TRX_ID MYSQL_ID ./test/t-main 0001000000 0001000000 test t main
select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name
REQUEST_TRX_ID BLOCK_TRX_ID ./test/t-main 0001000000 0001000000 LOCK_WAITS_START_TIME test t main REQUEST_TRX_ID BLOCK_TRX_ID ./test/t-main 0001000000 0001000000 LOCK_WAITS_START_TIME test t main
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
TRX_ID MYSQL_ID TRX_ID MYSQL_ID
TRX_ID MYSQL_ID TRX_ID MYSQL_ID
...@@ -30,7 +30,7 @@ select * from information_schema.tokudb_lock_waits; ...@@ -30,7 +30,7 @@ select * from information_schema.tokudb_lock_waits;
requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name requesting_trx_id blocking_trx_id lock_waits_dname lock_waits_key_left lock_waits_key_right lock_waits_start_time lock_waits_table_schema lock_waits_table_name lock_waits_table_dictionary_name
ERROR HY000: Lock wait timeout exceeded; try restarting transaction ERROR HY000: Lock wait timeout exceeded; try restarting transaction
commit; commit;
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name locks_trx_id locks_mysql_thread_id locks_dname locks_key_left locks_key_right locks_table_schema locks_table_name locks_table_dictionary_name
......
set default_storage_engine='tokudb'; set default_storage_engine='tokudb';
set tokudb_prelock_empty=false; set tokudb_prelock_empty=false;
drop table if exists t; drop table if exists t;
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
set autocommit=0; set autocommit=0;
create table t (id int primary key); create table t (id int primary key);
insert into t values (1); insert into t values (1);
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
TXN_ID_DEFAULT CLIENT_ID_DEFAULT TXN_ID_DEFAULT CLIENT_ID_DEFAULT
commit; commit;
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
set autocommit=0; set autocommit=0;
insert into t values (2); insert into t values (2);
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
TXN_ID_A CLIENT_ID_A TXN_ID_A CLIENT_ID_A
commit; commit;
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
trx_id trx_mysql_thread_id trx_id trx_mysql_thread_id
drop table t; drop table t;
...@@ -13,7 +13,7 @@ create table t (id int primary key); ...@@ -13,7 +13,7 @@ create table t (id int primary key);
# verify that txn_a insert (1) blocks txn_b insert (1) and txn_b gets a duplicate key error # verify that txn_a insert (1) blocks txn_b insert (1) and txn_b gets a duplicate key error
# should be empty # should be empty
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
...@@ -41,7 +41,7 @@ select * from information_schema.tokudb_lock_waits; ...@@ -41,7 +41,7 @@ select * from information_schema.tokudb_lock_waits;
# should find the presence of two transactions # should find the presence of two transactions
replace_column 1 TRX_ID 2 MYSQL_ID; replace_column 1 TRX_ID 2 MYSQL_ID;
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
connection conn_a; connection conn_a;
commit; commit;
...@@ -63,7 +63,7 @@ disconnect conn_b; ...@@ -63,7 +63,7 @@ disconnect conn_b;
# verify that the lock on the 2nd transaction has been released # verify that the lock on the 2nd transaction has been released
# should be be empty # should be be empty
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
...@@ -91,7 +91,7 @@ select * from information_schema.tokudb_lock_waits; ...@@ -91,7 +91,7 @@ select * from information_schema.tokudb_lock_waits;
# should find the presence of two transactions # should find the presence of two transactions
replace_column 1 TRX_ID 2 MYSQL_ID; replace_column 1 TRX_ID 2 MYSQL_ID;
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
connection conn_a; connection conn_a;
commit; commit;
...@@ -110,7 +110,7 @@ disconnect conn_b; ...@@ -110,7 +110,7 @@ disconnect conn_b;
# verify that the lock on the 2nd transaction has been released # verify that the lock on the 2nd transaction has been released
# should be be empty # should be be empty
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
......
...@@ -10,7 +10,7 @@ enable_warnings; ...@@ -10,7 +10,7 @@ enable_warnings;
create table t (id int primary key); create table t (id int primary key);
# should be empty # should be empty
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
...@@ -38,7 +38,7 @@ select * from information_schema.tokudb_lock_waits; ...@@ -38,7 +38,7 @@ select * from information_schema.tokudb_lock_waits;
# should find the presence of two transactions # should find the presence of two transactions
replace_column 1 TRX_ID 2 MYSQL_ID; replace_column 1 TRX_ID 2 MYSQL_ID;
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
connection conn_a; connection conn_a;
sleep 5; # sleep longer than the lock timer to force a lock timeout on txn_b sleep 5; # sleep longer than the lock timer to force a lock timeout on txn_b
...@@ -59,7 +59,7 @@ disconnect conn_a; ...@@ -59,7 +59,7 @@ disconnect conn_a;
disconnect conn_b; disconnect conn_b;
# should be be empty # should be be empty
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
select * from information_schema.tokudb_locks; select * from information_schema.tokudb_locks;
select * from information_schema.tokudb_lock_waits; select * from information_schema.tokudb_lock_waits;
......
...@@ -8,7 +8,7 @@ drop table if exists t; ...@@ -8,7 +8,7 @@ drop table if exists t;
enable_warnings; enable_warnings;
# should be empty # should be empty
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
# should have my txn # should have my txn
let $default_id=`select connection_id()`; let $default_id=`select connection_id()`;
...@@ -16,11 +16,11 @@ set autocommit=0; ...@@ -16,11 +16,11 @@ set autocommit=0;
create table t (id int primary key); create table t (id int primary key);
insert into t values (1); insert into t values (1);
replace_column 1 TXN_ID_DEFAULT 2 CLIENT_ID_DEFAULT; replace_column 1 TXN_ID_DEFAULT 2 CLIENT_ID_DEFAULT;
eval select * from information_schema.tokudb_trx; eval select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
# should be empty # should be empty
commit; commit;
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
connect(conn_a,localhost,root,,); connect(conn_a,localhost,root,,);
let a_id=`select connection_id()`; let a_id=`select connection_id()`;
...@@ -29,13 +29,13 @@ insert into t values (2); ...@@ -29,13 +29,13 @@ insert into t values (2);
connection default; connection default;
replace_column 1 TXN_ID_A 2 CLIENT_ID_A; replace_column 1 TXN_ID_A 2 CLIENT_ID_A;
eval select * from information_schema.tokudb_trx; eval select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
connection conn_a; connection conn_a;
commit; commit;
connection default; connection default;
# should be empty # should be empty
select * from information_schema.tokudb_trx; select trx_id,trx_mysql_thread_id from information_schema.tokudb_trx;
disconnect conn_a; disconnect conn_a;
......
...@@ -1991,7 +1991,9 @@ struct tokudb_search_txn_extra { ...@@ -1991,7 +1991,9 @@ struct tokudb_search_txn_extra {
uint64_t match_client_id; uint64_t match_client_id;
}; };
static int tokudb_search_txn_callback(uint64_t txn_id, uint64_t client_id, iterate_row_locks_callback iterate_locks, void *locks_extra, void *extra) { static int tokudb_search_txn_callback(DB_TXN *txn, iterate_row_locks_callback iterate_locks, void *locks_extra, void *extra) {
uint64_t txn_id = txn->id64(txn);
uint64_t client_id = txn->get_client_id(txn);
struct tokudb_search_txn_extra *e = reinterpret_cast<struct tokudb_search_txn_extra *>(extra); struct tokudb_search_txn_extra *e = reinterpret_cast<struct tokudb_search_txn_extra *>(extra);
if (e->match_txn_id == txn_id) { if (e->match_txn_id == txn_id) {
e->match_found = true; e->match_found = true;
...@@ -2123,6 +2125,7 @@ static struct st_mysql_information_schema tokudb_trx_information_schema = { MYSQ ...@@ -2123,6 +2125,7 @@ static struct st_mysql_information_schema tokudb_trx_information_schema = { MYSQ
static ST_FIELD_INFO tokudb_trx_field_info[] = { static ST_FIELD_INFO tokudb_trx_field_info[] = {
{"trx_id", 0, MYSQL_TYPE_LONGLONG, 0, 0, NULL, SKIP_OPEN_TABLE }, {"trx_id", 0, MYSQL_TYPE_LONGLONG, 0, 0, NULL, SKIP_OPEN_TABLE },
{"trx_mysql_thread_id", 0, MYSQL_TYPE_LONGLONG, 0, 0, NULL, SKIP_OPEN_TABLE }, {"trx_mysql_thread_id", 0, MYSQL_TYPE_LONGLONG, 0, 0, NULL, SKIP_OPEN_TABLE },
{"trx_time", 0, MYSQL_TYPE_LONGLONG, 0, 0, NULL, SKIP_OPEN_TABLE },
{NULL, 0, MYSQL_TYPE_NULL, 0, 0, NULL, SKIP_OPEN_TABLE} {NULL, 0, MYSQL_TYPE_NULL, 0, 0, NULL, SKIP_OPEN_TABLE}
}; };
...@@ -2131,12 +2134,17 @@ struct tokudb_trx_extra { ...@@ -2131,12 +2134,17 @@ struct tokudb_trx_extra {
TABLE *table; TABLE *table;
}; };
static int tokudb_trx_callback(uint64_t txn_id, uint64_t client_id, iterate_row_locks_callback iterate_locks, void *locks_extra, void *extra) { static int tokudb_trx_callback(DB_TXN *txn, iterate_row_locks_callback iterate_locks, void *locks_extra, void *extra) {
uint64_t txn_id = txn->id64(txn);
uint64_t client_id = txn->get_client_id(txn);
uint64_t start_time = txn->get_start_time(txn);
struct tokudb_trx_extra *e = reinterpret_cast<struct tokudb_trx_extra *>(extra); struct tokudb_trx_extra *e = reinterpret_cast<struct tokudb_trx_extra *>(extra);
THD *thd = e->thd; THD *thd = e->thd;
TABLE *table = e->table; TABLE *table = e->table;
table->field[0]->store(txn_id, false); table->field[0]->store(txn_id, false);
table->field[1]->store(client_id, false); table->field[1]->store(client_id, false);
uint64_t tnow = (uint64_t) time(NULL);
table->field[2]->store(tnow >= start_time ? tnow - start_time : 0, false);
int error = schema_table_store_record(thd, table); int error = schema_table_store_record(thd, table);
if (!error && thd_killed(thd)) if (!error && thd_killed(thd))
error = ER_QUERY_INTERRUPTED; error = ER_QUERY_INTERRUPTED;
...@@ -2284,7 +2292,9 @@ struct tokudb_locks_extra { ...@@ -2284,7 +2292,9 @@ struct tokudb_locks_extra {
TABLE *table; TABLE *table;
}; };
static int tokudb_locks_callback(uint64_t txn_id, uint64_t client_id, iterate_row_locks_callback iterate_locks, void *locks_extra, void *extra) { static int tokudb_locks_callback(DB_TXN *txn, iterate_row_locks_callback iterate_locks, void *locks_extra, void *extra) {
uint64_t txn_id = txn->id64(txn);
uint64_t client_id = txn->get_client_id(txn);
struct tokudb_locks_extra *e = reinterpret_cast<struct tokudb_locks_extra *>(extra); struct tokudb_locks_extra *e = reinterpret_cast<struct tokudb_locks_extra *>(extra);
THD *thd = e->thd; THD *thd = e->thd;
TABLE *table = e->table; TABLE *table = e->table;
......
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