Commit 2b40a389 authored by Nirbhay Choubey's avatar Nirbhay Choubey

MDEV-4412 : SLOW QUERY LOG - add affected rows (UPDATE / DELETE) in slow query log

Added Rows_affected to slow query log & mysql.slow_log table.
parent b16b0721
...@@ -56,6 +56,7 @@ insert_id int(11) NO NULL ...@@ -56,6 +56,7 @@ insert_id int(11) NO NULL
server_id int(10) unsigned NO NULL server_id int(10) unsigned NO NULL
sql_text mediumtext NO NULL sql_text mediumtext NO NULL
thread_id bigint(21) unsigned NO NULL thread_id bigint(21) unsigned NO NULL
rows_affected int(11) NO NULL
flush slow logs; flush slow logs;
set long_query_time=0.1; set long_query_time=0.1;
set log_slow_filter=''; set log_slow_filter='';
......
...@@ -39,7 +39,7 @@ select sleep(@long_query_time + 1); ...@@ -39,7 +39,7 @@ select sleep(@long_query_time + 1);
sleep(@long_query_time + 1) sleep(@long_query_time + 1)
0 0
select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%'; select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%';
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id rows_affected
# Switch to connection default # Switch to connection default
set global slow_query_log= ON; set global slow_query_log= ON;
set local slow_query_log= ON; set local slow_query_log= ON;
...@@ -49,14 +49,14 @@ select sleep(@long_query_time + 1); ...@@ -49,14 +49,14 @@ select sleep(@long_query_time + 1);
sleep(@long_query_time + 1) sleep(@long_query_time + 1)
0 0
select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%'; select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%';
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id rows_affected
set local slow_query_log= ON; set local slow_query_log= ON;
select sleep(@long_query_time + 2); select sleep(@long_query_time + 2);
sleep(@long_query_time + 2) sleep(@long_query_time + 2)
0 0
select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%'; select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%';
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id rows_affected
TIMESTAMP USER_HOST QUERY_TIME 00:00:00.000000 1 0 test 0 0 1 select sleep(@long_query_time + 2) THREAD_ID TIMESTAMP USER_HOST QUERY_TIME 00:00:00.000000 1 0 test 0 0 1 select sleep(@long_query_time + 2) THREAD_ID 0
# Switch to connection default # Switch to connection default
show global variables show global variables
where Variable_name = 'general_log' or Variable_name = 'slow_query_log'; where Variable_name = 'general_log' or Variable_name = 'slow_query_log';
......
...@@ -17,7 +17,7 @@ event_time user_host thread_id server_id command_type argument ...@@ -17,7 +17,7 @@ event_time user_host thread_id server_id command_type argument
TIMESTAMP USER_HOST THREAD_ID 1 Query select * from general_log TIMESTAMP USER_HOST THREAD_ID 1 Query select * from general_log
truncate table slow_log; truncate table slow_log;
select * from slow_log; select * from slow_log;
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id rows_affected
truncate table general_log; truncate table general_log;
select * from general_log where argument like '%general_log%'; select * from general_log where argument like '%general_log%';
event_time user_host thread_id server_id command_type argument event_time user_host thread_id server_id command_type argument
...@@ -82,7 +82,8 @@ slow_log CREATE TABLE `slow_log` ( ...@@ -82,7 +82,8 @@ slow_log CREATE TABLE `slow_log` (
`insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL, `server_id` int(10) unsigned NOT NULL,
`sql_text` mediumtext NOT NULL, `sql_text` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL `thread_id` bigint(21) unsigned NOT NULL,
`rows_affected` int(11) NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
show fields from mysql.slow_log; show fields from mysql.slow_log;
Field Type Null Key Default Extra Field Type Null Key Default Extra
...@@ -98,6 +99,7 @@ insert_id int(11) NO NULL ...@@ -98,6 +99,7 @@ insert_id int(11) NO NULL
server_id int(10) unsigned NO NULL server_id int(10) unsigned NO NULL
sql_text mediumtext NO NULL sql_text mediumtext NO NULL
thread_id bigint(21) unsigned NO NULL thread_id bigint(21) unsigned NO NULL
rows_affected int(11) NO NULL
flush logs; flush logs;
flush tables; flush tables;
SET GLOBAL GENERAL_LOG=ON; SET GLOBAL GENERAL_LOG=ON;
...@@ -148,8 +150,8 @@ select sleep(2); ...@@ -148,8 +150,8 @@ select sleep(2);
sleep(2) sleep(2)
0 0
select * from mysql.slow_log; select * from mysql.slow_log;
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id rows_affected
TIMESTAMP USER_HOST QUERY_TIME 00:00:00.000000 1 0 mysql 0 0 1 select sleep(2) THREAD_ID TIMESTAMP USER_HOST QUERY_TIME 00:00:00.000000 1 0 mysql 0 0 1 select sleep(2) THREAD_ID 0
set @@session.long_query_time = @saved_long_query_time; set @@session.long_query_time = @saved_long_query_time;
alter table mysql.general_log engine=myisam; alter table mysql.general_log engine=myisam;
ERROR HY000: You cannot 'ALTER' a log table if logging is enabled ERROR HY000: You cannot 'ALTER' a log table if logging is enabled
...@@ -187,7 +189,8 @@ slow_log CREATE TABLE `slow_log` ( ...@@ -187,7 +189,8 @@ slow_log CREATE TABLE `slow_log` (
`insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL, `server_id` int(10) unsigned NOT NULL,
`sql_text` mediumtext NOT NULL, `sql_text` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL `thread_id` bigint(21) unsigned NOT NULL,
`rows_affected` int(11) NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
alter table mysql.general_log engine=myisam; alter table mysql.general_log engine=myisam;
alter table mysql.slow_log engine=myisam; alter table mysql.slow_log engine=myisam;
...@@ -215,7 +218,8 @@ slow_log CREATE TABLE `slow_log` ( ...@@ -215,7 +218,8 @@ slow_log CREATE TABLE `slow_log` (
`insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL, `server_id` int(10) unsigned NOT NULL,
`sql_text` mediumtext NOT NULL, `sql_text` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL `thread_id` bigint(21) unsigned NOT NULL,
`rows_affected` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Slow log' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Slow log'
set global general_log='ON'; set global general_log='ON';
set global slow_query_log='ON'; set global slow_query_log='ON';
...@@ -286,7 +290,8 @@ ON UPDATE CURRENT_TIMESTAMP, ...@@ -286,7 +290,8 @@ ON UPDATE CURRENT_TIMESTAMP,
`insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL, `server_id` int(10) unsigned NOT NULL,
`sql_text` mediumtext NOT NULL, `sql_text` mediumtext NOT NULL,
`thread_id` BIGINT(21) UNSIGNED NOT NULL `thread_id` BIGINT(21) UNSIGNED NOT NULL,
`rows_affected` int(11) NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'; ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log';
set global general_log='ON'; set global general_log='ON';
set global slow_query_log='ON'; set global slow_query_log='ON';
...@@ -313,7 +318,7 @@ event_time user_host thread_id server_id command_type argument ...@@ -313,7 +318,7 @@ event_time user_host thread_id server_id command_type argument
TIMESTAMP USER_HOST THREAD_ID 1 Query select * from general_log TIMESTAMP USER_HOST THREAD_ID 1 Query select * from general_log
truncate table slow_log; truncate table slow_log;
select * from slow_log; select * from slow_log;
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id rows_affected
create table general_log_new like general_log; create table general_log_new like general_log;
rename table general_log TO renamed_general_log, general_log_new TO general_log; rename table general_log TO renamed_general_log, general_log_new TO general_log;
create table slow_log_new like slow_log; create table slow_log_new like slow_log;
...@@ -334,9 +339,9 @@ TIMESTAMP USER_HOST THREAD_ID 1 Query select * from slow_log ...@@ -334,9 +339,9 @@ TIMESTAMP USER_HOST THREAD_ID 1 Query select * from slow_log
TIMESTAMP USER_HOST THREAD_ID 1 Query create table general_log_new like general_log TIMESTAMP USER_HOST THREAD_ID 1 Query create table general_log_new like general_log
TIMESTAMP USER_HOST THREAD_ID 1 Query rename table general_log TO renamed_general_log, general_log_new TO general_log TIMESTAMP USER_HOST THREAD_ID 1 Query rename table general_log TO renamed_general_log, general_log_new TO general_log
select * from slow_log; select * from slow_log;
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id rows_affected
select * from renamed_slow_log; select * from renamed_slow_log;
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id rows_affected
set global general_log='OFF'; set global general_log='OFF';
RENAME TABLE general_log TO general_log2; RENAME TABLE general_log TO general_log2;
set global slow_query_log='OFF'; set global slow_query_log='OFF';
...@@ -429,10 +434,10 @@ SELECT "My own slow query", sleep(2); ...@@ -429,10 +434,10 @@ SELECT "My own slow query", sleep(2);
My own slow query sleep(2) My own slow query sleep(2)
My own slow query 0 My own slow query 0
SELECT * FROM mysql.slow_log WHERE seq >= 2 LIMIT 3; SELECT * FROM mysql.slow_log WHERE seq >= 2 LIMIT 3;
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id seq start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id rows_affected seq
START_TIME USER_HOST QUERY_TIME 00:00:00.000000 1 0 test 0 0 1 SELECT "My own slow query", sleep(2) 3 2 START_TIME USER_HOST QUERY_TIME 00:00:00.000000 1 0 test 0 0 1 SELECT "My own slow query", sleep(2) 3 0 2
START_TIME USER_HOST QUERY_TIME 00:00:00.000000 1 0 test 0 0 1 SELECT "My own slow query", sleep(2) 3 3 START_TIME USER_HOST QUERY_TIME 00:00:00.000000 1 0 test 0 0 1 SELECT "My own slow query", sleep(2) 3 0 3
START_TIME USER_HOST QUERY_TIME 00:00:00.000000 1 0 test 0 0 1 SELECT "My own slow query", sleep(2) 3 4 START_TIME USER_HOST QUERY_TIME 00:00:00.000000 1 0 test 0 0 1 SELECT "My own slow query", sleep(2) 3 0 4
SET GLOBAL slow_query_log = 0; SET GLOBAL slow_query_log = 0;
SET SESSION long_query_time =@saved_long_query_time; SET SESSION long_query_time =@saved_long_query_time;
FLUSH LOGS; FLUSH LOGS;
...@@ -550,7 +555,7 @@ CREATE procedure `db_17876.archiveSlowLog`() ...@@ -550,7 +555,7 @@ CREATE procedure `db_17876.archiveSlowLog`()
BEGIN BEGIN
DECLARE start_time, query_time, lock_time CHAR(28); DECLARE start_time, query_time, lock_time CHAR(28);
DECLARE user_host MEDIUMTEXT; DECLARE user_host MEDIUMTEXT;
DECLARE rows_set, rows_examined, last_insert_id, insert_id, server_id INT; DECLARE rows_set, rows_examined, last_insert_id, insert_id, server_id, rows_affected INT;
DECLARE thread_id BIGINT UNSIGNED; DECLARE thread_id BIGINT UNSIGNED;
DECLARE dbname MEDIUMTEXT; DECLARE dbname MEDIUMTEXT;
DECLARE sql_text BLOB; DECLARE sql_text BLOB;
...@@ -565,14 +570,15 @@ DECLARE CONTINUE HANDLER FOR ER_SP_FETCH_NO_DATA SET done = 1; ...@@ -565,14 +570,15 @@ DECLARE CONTINUE HANDLER FOR ER_SP_FETCH_NO_DATA SET done = 1;
FETCH cur1 INTO FETCH cur1 INTO
start_time, user_host, query_time, lock_time, start_time, user_host, query_time, lock_time,
rows_set, rows_examined, dbname, last_insert_id, rows_set, rows_examined, dbname, last_insert_id,
insert_id, server_id, sql_text, thread_id; insert_id, server_id, sql_text, thread_id, rows_affected;
END; END;
IF NOT done THEN IF NOT done THEN
BEGIN BEGIN
INSERT INTO INSERT INTO
`db_17876.slow_log_data` `db_17876.slow_log_data`
VALUES(start_time, user_host, query_time, lock_time, rows_set, rows_examined, VALUES(start_time, user_host, query_time, lock_time, rows_set, rows_examined,
dbname, last_insert_id, insert_id, server_id, sql_text, thread_id); dbname, last_insert_id, insert_id, server_id, sql_text, thread_id,
rows_affected);
END; END;
END IF; END IF;
END; END;
......
...@@ -5264,7 +5264,8 @@ slow_log CREATE TABLE `slow_log` ( ...@@ -5264,7 +5264,8 @@ slow_log CREATE TABLE `slow_log` (
`insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL, `server_id` int(10) unsigned NOT NULL,
`sql_text` mediumtext NOT NULL, `sql_text` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL `thread_id` bigint(21) unsigned NOT NULL,
`rows_affected` int(11) NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
SET @@global.log_output= @old_log_output_state; SET @@global.log_output= @old_log_output_state;
SET @@global.slow_query_log= @old_slow_query_log_state; SET @@global.slow_query_log= @old_slow_query_log_state;
......
...@@ -273,7 +273,8 @@ slow_log CREATE TABLE `slow_log` ( ...@@ -273,7 +273,8 @@ slow_log CREATE TABLE `slow_log` (
`insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL, `server_id` int(10) unsigned NOT NULL,
`sql_text` mediumtext NOT NULL, `sql_text` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL `thread_id` bigint(21) unsigned NOT NULL,
`rows_affected` int(11) NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
show create table table_stats; show create table table_stats;
Table Create Table Table Create Table
......
...@@ -172,6 +172,7 @@ def mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) ...@@ -172,6 +172,7 @@ def mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11)
def mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references def mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references
def mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6) select,insert,update,references def mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6) select,insert,update,references
def mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6) select,insert,update,references def mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6) select,insert,update,references
def mysql slow_log rows_affected 13 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references
def mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references def mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references
def mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references def mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references
def mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL NULL int(10) unsigned select,insert,update,references def mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL NULL int(10) unsigned select,insert,update,references
...@@ -499,6 +500,7 @@ NULL mysql slow_log insert_id int NULL NULL NULL NULL int(11) ...@@ -499,6 +500,7 @@ NULL mysql slow_log insert_id int NULL NULL NULL NULL int(11)
NULL mysql slow_log server_id int NULL NULL NULL NULL int(10) unsigned NULL mysql slow_log server_id int NULL NULL NULL NULL int(10) unsigned
1.0000 mysql slow_log sql_text mediumtext 16777215 16777215 utf8 utf8_general_ci mediumtext 1.0000 mysql slow_log sql_text mediumtext 16777215 16777215 utf8 utf8_general_ci mediumtext
NULL mysql slow_log thread_id bigint NULL NULL NULL NULL bigint(21) unsigned NULL mysql slow_log thread_id bigint NULL NULL NULL NULL bigint(21) unsigned
NULL mysql slow_log rows_affected int NULL NULL NULL NULL int(11)
3.0000 mysql tables_priv Host char 60 180 utf8 utf8_bin char(60) 3.0000 mysql tables_priv Host char 60 180 utf8 utf8_bin char(60)
3.0000 mysql tables_priv Db char 64 192 utf8 utf8_bin char(64) 3.0000 mysql tables_priv Db char 64 192 utf8 utf8_bin char(64)
3.0000 mysql tables_priv User char 80 240 utf8 utf8_bin char(80) 3.0000 mysql tables_priv User char 80 240 utf8 utf8_bin char(80)
......
...@@ -172,6 +172,7 @@ def mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) ...@@ -172,6 +172,7 @@ def mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11)
def mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) def mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11)
def mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6) def mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6)
def mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6) def mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6)
def mysql slow_log rows_affected 13 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11)
def mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) def mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11)
def mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) def mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11)
def mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL NULL int(10) unsigned def mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL NULL int(10) unsigned
...@@ -499,6 +500,7 @@ NULL mysql slow_log insert_id int NULL NULL NULL NULL int(11) ...@@ -499,6 +500,7 @@ NULL mysql slow_log insert_id int NULL NULL NULL NULL int(11)
NULL mysql slow_log server_id int NULL NULL NULL NULL int(10) unsigned NULL mysql slow_log server_id int NULL NULL NULL NULL int(10) unsigned
1.0000 mysql slow_log sql_text mediumtext 16777215 16777215 utf8 utf8_general_ci mediumtext 1.0000 mysql slow_log sql_text mediumtext 16777215 16777215 utf8 utf8_general_ci mediumtext
NULL mysql slow_log thread_id bigint NULL NULL NULL NULL bigint(21) unsigned NULL mysql slow_log thread_id bigint NULL NULL NULL NULL bigint(21) unsigned
NULL mysql slow_log rows_affected int NULL NULL NULL NULL int(11)
3.0000 mysql tables_priv Host char 60 180 utf8 utf8_bin char(60) 3.0000 mysql tables_priv Host char 60 180 utf8 utf8_bin char(60)
3.0000 mysql tables_priv Db char 64 192 utf8 utf8_bin char(64) 3.0000 mysql tables_priv Db char 64 192 utf8 utf8_bin char(64)
3.0000 mysql tables_priv User char 80 240 utf8 utf8_bin char(80) 3.0000 mysql tables_priv User char 80 240 utf8 utf8_bin char(80)
......
...@@ -309,7 +309,8 @@ CREATE TABLE `slow_log` ( ...@@ -309,7 +309,8 @@ CREATE TABLE `slow_log` (
`insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL, `server_id` int(10) unsigned NOT NULL,
`sql_text` mediumtext NOT NULL, `sql_text` mediumtext NOT NULL,
`thread_id` BIGINT(21) UNSIGNED NOT NULL `thread_id` BIGINT(21) UNSIGNED NOT NULL,
`rows_affected` int(11) NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'; ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log';
set global general_log='ON'; set global general_log='ON';
...@@ -743,7 +744,7 @@ CREATE procedure `db_17876.archiveSlowLog`() ...@@ -743,7 +744,7 @@ CREATE procedure `db_17876.archiveSlowLog`()
BEGIN BEGIN
DECLARE start_time, query_time, lock_time CHAR(28); DECLARE start_time, query_time, lock_time CHAR(28);
DECLARE user_host MEDIUMTEXT; DECLARE user_host MEDIUMTEXT;
DECLARE rows_set, rows_examined, last_insert_id, insert_id, server_id INT; DECLARE rows_set, rows_examined, last_insert_id, insert_id, server_id, rows_affected INT;
DECLARE thread_id BIGINT UNSIGNED; DECLARE thread_id BIGINT UNSIGNED;
DECLARE dbname MEDIUMTEXT; DECLARE dbname MEDIUMTEXT;
DECLARE sql_text BLOB; DECLARE sql_text BLOB;
...@@ -762,7 +763,7 @@ BEGIN ...@@ -762,7 +763,7 @@ BEGIN
FETCH cur1 INTO FETCH cur1 INTO
start_time, user_host, query_time, lock_time, start_time, user_host, query_time, lock_time,
rows_set, rows_examined, dbname, last_insert_id, rows_set, rows_examined, dbname, last_insert_id,
insert_id, server_id, sql_text, thread_id; insert_id, server_id, sql_text, thread_id, rows_affected;
END; END;
IF NOT done THEN IF NOT done THEN
...@@ -770,7 +771,8 @@ BEGIN ...@@ -770,7 +771,8 @@ BEGIN
INSERT INTO INSERT INTO
`db_17876.slow_log_data` `db_17876.slow_log_data`
VALUES(start_time, user_host, query_time, lock_time, rows_set, rows_examined, VALUES(start_time, user_host, query_time, lock_time, rows_set, rows_examined,
dbname, last_insert_id, insert_id, server_id, sql_text, thread_id); dbname, last_insert_id, insert_id, server_id, sql_text, thread_id,
rows_affected);
END; END;
END IF; END IF;
END; END;
......
...@@ -95,7 +95,7 @@ DROP PREPARE stmt; ...@@ -95,7 +95,7 @@ DROP PREPARE stmt;
-- Create slow_log if CSV is enabled. -- Create slow_log if CSV is enabled.
SET @str = IF (@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, user_host MEDIUMTEXT NOT NULL, query_time TIME(6) NOT NULL, lock_time TIME(6) NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512) NOT NULL, last_insert_id INTEGER NOT NULL, insert_id INTEGER NOT NULL, server_id INTEGER UNSIGNED NOT NULL, sql_text MEDIUMTEXT NOT NULL, thread_id BIGINT(21) UNSIGNED NOT NULL) engine=CSV CHARACTER SET utf8 comment="Slow log"', 'SET @dummy = 0'); SET @str = IF (@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, user_host MEDIUMTEXT NOT NULL, query_time TIME(6) NOT NULL, lock_time TIME(6) NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512) NOT NULL, last_insert_id INTEGER NOT NULL, insert_id INTEGER NOT NULL, server_id INTEGER UNSIGNED NOT NULL, sql_text MEDIUMTEXT NOT NULL, thread_id BIGINT(21) UNSIGNED NOT NULL, rows_affected INTEGER NOT NULL) engine=CSV CHARACTER SET utf8 comment="Slow log"', 'SET @dummy = 0');
PREPARE stmt FROM @str; PREPARE stmt FROM @str;
EXECUTE stmt; EXECUTE stmt;
......
...@@ -250,6 +250,8 @@ SET @old_log_state = @@global.slow_query_log; ...@@ -250,6 +250,8 @@ SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF'; SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE slow_log ALTER TABLE slow_log
ADD COLUMN thread_id BIGINT(21) UNSIGNED NOT NULL AFTER sql_text; ADD COLUMN thread_id BIGINT(21) UNSIGNED NOT NULL AFTER sql_text;
ALTER TABLE slow_log
ADD COLUMN rows_affected INTEGER NOT NULL AFTER thread_id;
ALTER TABLE slow_log ALTER TABLE slow_log
MODIFY start_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, MODIFY start_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
MODIFY user_host MEDIUMTEXT NOT NULL, MODIFY user_host MEDIUMTEXT NOT NULL,
......
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
use strict; use strict;
use Getopt::Long; use Getopt::Long;
# t=time, l=lock time, r=rows # t=time, l=lock time, r=rows, a=rows affected
# at, al, and ar are the corresponding averages # at, al, ar and aa are the corresponding averages
my %opt = ( my %opt = (
s => 'at', s => 'at',
...@@ -110,9 +110,11 @@ while ( defined($_ = shift @pending) or defined($_ = <>) ) { ...@@ -110,9 +110,11 @@ while ( defined($_ = shift @pending) or defined($_ = <>) ) {
s/^#? Time: \d{6}\s+\d+:\d+:\d+.*\n//; s/^#? Time: \d{6}\s+\d+:\d+:\d+.*\n//;
my ($user,$host) = s/^#? User\@Host:\s+(\S+)\s+\@\s+(\S+).*\n// ? ($1,$2) : ('',''); my ($user,$host) = s/^#? User\@Host:\s+(\S+)\s+\@\s+(\S+).*\n// ? ($1,$2) : ('','');
s/^# Thread_id: [0-9]+\s+Schema: [^\n]+\n//; s/^# Thread_id: [0-9]+\s+Schema: .*\s+QC_hit:.*[^\n]+\n//;
s/^# Query_time: ([0-9.]+)\s+Lock_time: ([0-9.]+)\s+Rows_sent: ([0-9.]+)\s+Rows_examined: ([0-9.]+).*\n//; s/^# Query_time: ([0-9.]+)\s+Lock_time: ([0-9.]+)\s+Rows_sent: ([0-9.]+)\s+Rows_examined: ([0-9.]+).*\n//;
my ($t, $l, $r, $e) = ($1, $2, $3, $4); my ($t, $l, $r, $e) = ($1, $2, $3, $4);
s/^# Rows_affected: ([0-9.]+).*\n//;
my ($a) = ($1);
$t -= $l unless $opt{l}; $t -= $l unless $opt{l};
...@@ -156,6 +158,7 @@ while ( defined($_ = shift @pending) or defined($_ = <>) ) { ...@@ -156,6 +158,7 @@ while ( defined($_ = shift @pending) or defined($_ = <>) ) {
$s->{l} += $l; $s->{l} += $l;
$s->{r} += $r; $s->{r} += $r;
$s->{e} += $e; $s->{e} += $e;
$s->{a} += $a;
$s->{users}->{$user}++ if $user; $s->{users}->{$user}++ if $user;
$s->{hosts}->{$host}++ if $host; $s->{hosts}->{$host}++ if $host;
...@@ -164,11 +167,12 @@ while ( defined($_ = shift @pending) or defined($_ = <>) ) { ...@@ -164,11 +167,12 @@ while ( defined($_ = shift @pending) or defined($_ = <>) ) {
foreach (keys %stmt) { foreach (keys %stmt) {
my $v = $stmt{$_} || die; my $v = $stmt{$_} || die;
my ($c, $t, $l, $r, $e) = @{ $v }{qw(c t l r e)}; my ($c, $t, $l, $r, $e, $a) = @{ $v }{qw(c t l r e a)};
$v->{at} = $t / $c; $v->{at} = $t / $c;
$v->{al} = $l / $c; $v->{al} = $l / $c;
$v->{ar} = $r / $c; $v->{ar} = $r / $c;
$v->{ae} = $e / $c; $v->{ae} = $e / $c;
$v->{aa} = $a / $c;
} }
my @sorted = sort { $stmt{$b}->{$opt{s}} <=> $stmt{$a}->{$opt{s}} } keys %stmt; my @sorted = sort { $stmt{$b}->{$opt{s}} <=> $stmt{$a}->{$opt{s}} } keys %stmt;
...@@ -177,13 +181,13 @@ my @sorted = sort { $stmt{$b}->{$opt{s}} <=> $stmt{$a}->{$opt{s}} } keys %stmt; ...@@ -177,13 +181,13 @@ my @sorted = sort { $stmt{$b}->{$opt{s}} <=> $stmt{$a}->{$opt{s}} } keys %stmt;
foreach (@sorted) { foreach (@sorted) {
my $v = $stmt{$_} || die; my $v = $stmt{$_} || die;
my ($c, $t,$at, $l,$al, $r,$ar,$e, $ae) = @{ $v }{qw(c t at l al r ar e ae)}; my ($c, $t, $at, $l, $al, $r, $ar, $e, $ae, $a, $aa) = @{ $v }{qw(c t at l al r ar e ae a aa)};
my @users = keys %{$v->{users}}; my @users = keys %{$v->{users}};
my $user = (@users==1) ? $users[0] : sprintf "%dusers",scalar @users; my $user = (@users==1) ? $users[0] : sprintf "%dusers",scalar @users;
my @hosts = keys %{$v->{hosts}}; my @hosts = keys %{$v->{hosts}};
my $host = (@hosts==1) ? $hosts[0] : sprintf "%dhosts",scalar @hosts; my $host = (@hosts==1) ? $hosts[0] : sprintf "%dhosts",scalar @hosts;
printf "Count: %d Time=%.2fs (%ds) Lock=%.2fs (%ds) Rows_sent=%.1f (%d), Rows_examined=%.1f (%d), $user\@$host\n%s\n\n", printf "Count: %d Time=%.2fs (%ds) Lock=%.2fs (%ds) Rows_sent=%.1f (%d), Rows_examined=%.1f (%d), Rows_affected=%.1f (%d), $user\@$host\n%s\n\n",
$c, $at,$t, $al,$l, $ar,$r, $ae, $e, $_; $c, $at,$t, $al,$l, $ar,$r, $ae, $e, $aa, $a, $_;
} }
sub usage { sub usage {
...@@ -203,6 +207,7 @@ Parse and summarize the MySQL slow query log. Options are ...@@ -203,6 +207,7 @@ Parse and summarize the MySQL slow query log. Options are
al: average lock time al: average lock time
ar: average rows sent ar: average rows sent
at: average query time at: average query time
aa: average rows affected
c: count c: count
l: lock time l: lock time
r: rows sent r: rows sent
......
...@@ -837,7 +837,7 @@ bool Log_to_csv_event_handler:: ...@@ -837,7 +837,7 @@ bool Log_to_csv_event_handler::
restore_record(table, s->default_values); // Get empty record restore_record(table, s->default_values); // Get empty record
/* check that all columns exist */ /* check that all columns exist */
if (table->s->fields < 11) if (table->s->fields < 13)
goto err; goto err;
/* store the time and user values */ /* store the time and user values */
...@@ -918,6 +918,12 @@ bool Log_to_csv_event_handler:: ...@@ -918,6 +918,12 @@ bool Log_to_csv_event_handler::
if (table->field[11]->store((longlong) thd->thread_id, TRUE)) if (table->field[11]->store((longlong) thd->thread_id, TRUE))
goto err; goto err;
/* Rows_affected */
if (table->field[12]->store(thd->get_stmt_da()->is_ok() ?
(longlong) thd->get_stmt_da()->affected_rows() :
0, TRUE))
goto err;
/* log table entries are not replicated */ /* log table entries are not replicated */
if (table->file->ha_write_row(table->record[0])) if (table->file->ha_write_row(table->record[0]))
goto err; goto err;
...@@ -2918,12 +2924,16 @@ bool MYSQL_QUERY_LOG::write(THD *thd, time_t current_time, ...@@ -2918,12 +2924,16 @@ bool MYSQL_QUERY_LOG::write(THD *thd, time_t current_time,
sprintf(lock_time_buff, "%.6f", ulonglong2double(lock_utime)/1000000.0); sprintf(lock_time_buff, "%.6f", ulonglong2double(lock_utime)/1000000.0);
if (my_b_printf(&log_file, if (my_b_printf(&log_file,
"# Thread_id: %lu Schema: %s QC_hit: %s\n" \ "# Thread_id: %lu Schema: %s QC_hit: %s\n" \
"# Query_time: %s Lock_time: %s Rows_sent: %lu Rows_examined: %lu\n", "# Query_time: %s Lock_time: %s Rows_sent: %lu Rows_examined: %lu\n" \
"# Rows_affected: %lu\n",
(ulong) thd->thread_id, (thd->db ? thd->db : ""), (ulong) thd->thread_id, (thd->db ? thd->db : ""),
((thd->query_plan_flags & QPLAN_QC) ? "Yes" : "No"), ((thd->query_plan_flags & QPLAN_QC) ? "Yes" : "No"),
query_time_buff, lock_time_buff, query_time_buff, lock_time_buff,
(ulong) thd->get_sent_row_count(), (ulong) thd->get_sent_row_count(),
(ulong) thd->get_examined_row_count()) == (size_t) -1) (ulong) thd->get_examined_row_count(),
thd->get_stmt_da()->is_ok() ?
(ulong) thd->get_stmt_da()->affected_rows() :
0) == (size_t) -1)
tmp_errno= errno; tmp_errno= errno;
if ((thd->variables.log_slow_verbosity & LOG_SLOW_VERBOSITY_QUERY_PLAN) && if ((thd->variables.log_slow_verbosity & LOG_SLOW_VERBOSITY_QUERY_PLAN) &&
(thd->query_plan_flags & (thd->query_plan_flags &
......
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