From cba102408cb1cd1ce06dc0906701cf6c21239fce Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 19 Sep 2023 12:34:57 +1000 Subject: [PATCH 1/9] MDEV-29993: myrocks_hotbackup.1 and test suite files installed when engine is disabled --- storage/rocksdb/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index cf8a821a3e4..261e97837ae 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -1,5 +1,10 @@ # TODO: Copyrights +IF(PLUGIN_ROCKSDB STREQUAL "NO") + ADD_FEATURE_INFO(ROCKSDB "OFF" "Storage Engine") + RETURN() +ENDIF() + SET(CPACK_RPM_rocksdb-engine_PACKAGE_SUMMARY "RocksDB storage engine for MariaDB server" PARENT_SCOPE) SET(CPACK_RPM_rocksdb-engine_PACKAGE_DESCRIPTION "The RocksDB storage engine is a high performance storage engine, aimed at maximising storage efficiency while maintaining InnoDB-like performance." PARENT_SCOPE) From bf5c2512397b6bb44752528bff4315b06834cd7a Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 19 Sep 2023 13:39:27 +1000 Subject: [PATCH 2/9] MDEV-27757 Database upgrade fails from 5.1: slow_log table The table structure from MySQL-5.1.14 is: CREATE TABLE `slow_log` ( `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `user_host` mediumtext NOT NULL, `query_time` time NOT NULL, `lock_time` time NOT NULL, `rows_sent` int(11) NOT NULL, `rows_examined` int(11) NOT NULL, `db` varchar(512) DEFAULT NULL, `last_insert_id` int(11) DEFAULT NULL, `insert_id` int(11) DEFAULT NULL, `server_id` int(11) DEFAULT NULL, `sql_text` mediumtext NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' Even as far back as MySQL-5.5.40 this table could be created as NULLs where not permitted in the CSV table time, but it seems they where allowed sometime. As the first part of mariadb-upgrade adds the column thread_id without correcting the 'NULL'able status of existing columns it fails. We reorder the sql statements in the ugprade as follows: ALTER TABLE slow_log MODIFY {columns} {new types} NOT NULL,.... As thread_id doesn't exist in the above statement it was removed from the first ALTER TABLE statement to prevent failure. Previous ALTER TABLE slow_log where moved later appending thread_id and rows_affected, and also enforces the type of thread_id if it was incorrectly like the now first ALTER STATEMENT slow_log used to do. --- scripts/mysql_system_tables_fix.sql | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/mysql_system_tables_fix.sql b/scripts/mysql_system_tables_fix.sql index c009a3de4a0..81d8d183e4b 100644 --- a/scripts/mysql_system_tables_fix.sql +++ b/scripts/mysql_system_tables_fix.sql @@ -247,10 +247,6 @@ SET GLOBAL general_log = @old_log_state; SET @old_log_state = @@global.slow_query_log; SET GLOBAL slow_query_log = 'OFF'; -ALTER TABLE slow_log - 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 MODIFY start_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, MODIFY user_host MEDIUMTEXT NOT NULL, @@ -262,8 +258,12 @@ ALTER TABLE slow_log MODIFY last_insert_id INTEGER NOT NULL, MODIFY insert_id INTEGER NOT NULL, MODIFY server_id INTEGER UNSIGNED NOT NULL, - MODIFY sql_text MEDIUMTEXT NOT NULL, - MODIFY thread_id BIGINT(21) UNSIGNED NOT NULL; + MODIFY sql_text MEDIUMTEXT NOT NULL; +ALTER TABLE slow_log + ADD COLUMN thread_id BIGINT(21) UNSIGNED NOT NULL AFTER sql_text; +ALTER TABLE slow_log + MODIFY thread_id BIGINT(21) UNSIGNED NOT NULL, + ADD COLUMN rows_affected INTEGER NOT NULL AFTER thread_id; SET GLOBAL slow_query_log = @old_log_state; ALTER TABLE plugin From 73ef86d4ef9f2d225501f8cc153b737a4177ff1e Mon Sep 17 00:00:00 2001 From: Oleg Smirnov Date: Tue, 19 Sep 2023 19:20:21 +0700 Subject: [PATCH 3/9] MDEV-29731 Assertion failure when HAVING in a correlated subquery references columns in the outer query When resolving a column from the HAVING clause, a new Item_field object may be created inside Item_ref::fix_fields(). But the object is created with an empty name resolution context, which then leads to debug assertion failure during Item_field::fix_fields(). The solution is to pass the correct name resolution context when creating the Item_field object. Reviewer: Oleksandr Byelkin (sanja@mariadb.com) --- mysql-test/main/having.result | 49 +++++++++++++++++++++++++++++++++++ mysql-test/main/having.test | 47 ++++++++++++++++++++++++++++++++- sql/item.cc | 2 +- 3 files changed, 96 insertions(+), 2 deletions(-) diff --git a/mysql-test/main/having.result b/mysql-test/main/having.result index 5f75c847993..95497a59c20 100644 --- a/mysql-test/main/having.result +++ b/mysql-test/main/having.result @@ -904,5 +904,54 @@ SELECT * FROM t HAVING f = 'foo'; f DROP TABLE t; # +# MDEV-29731 Crash when HAVING in a correlated subquery references +# columns in the outer query +# +CREATE TABLE t (a INT, b INT); +SELECT 1 FROM t +WHERE b = (SELECT 1 FROM t GROUP BY a HAVING b = a+1); +1 +DROP TABLE t; +CREATE TABLE t (a INT, b INT, c INT); +SELECT 1 FROM t +WHERE (b,c) = (SELECT 1,1 FROM t GROUP BY a HAVING b = a+1 and c = a-1); +1 +DROP TABLE t; +CREATE TABLE t (a TEXT, b INT UNIQUE); +SELECT 1 FROM t +WHERE b IN (SELECT 1 FROM t +GROUP BY '', a +HAVING (CASE b WHEN 1 +'' THEN 3 ELSE a END) +ORDER BY b) +GROUP BY b HAVING b = 1; +1 +Warnings: +Warning 1292 Truncated incorrect DOUBLE value: '' +DROP TABLE t; +CREATE TABLE t (a INT, b CHAR KEY UNIQUE); +CREATE VIEW v AS SELECT * FROM t WHERE a LIKE '' GROUP BY b HAVING a > a; +SELECT * FROM v AS v1 NATURAL JOIN v AS v5 NATURAL JOIN v +WHERE a LIKE '' AND b IN (SELECT a FROM t +WHERE a LIKE '' + GROUP BY a +HAVING b LIKE (b < +1 OR a > 1) >= b); +a b +DROP VIEW v; +DROP TABLE t; +EXECUTE IMMEDIATE 'SELECT LEAD(c) OVER (ORDER BY c) + FROM (SELECT 0 AS c) AS a NATURAL JOIN (SELECT 0 AS c) AS b;'; +LEAD(c) OVER (ORDER BY c) +NULL +CREATE TABLE t (a INT); +UPDATE t SET a = '' + WHERE 1 IN (SELECT * FROM +(SELECT * FROM +(SELECT * FROM t AS v5 NATURAL JOIN t AS v4 NATURAL JOIN t) AS v3 +NATURAL JOIN t +GROUP BY a) AS v2 +WHERE (0, a) IN ((0,-1),(+1,0)) +ORDER BY 1+AVG(a) OVER (ORDER BY a)) ORDER BY a; +DROP TABLE t; +# # End of 10.4 tests # diff --git a/mysql-test/main/having.test b/mysql-test/main/having.test index 618fcb57250..f5212d441d5 100644 --- a/mysql-test/main/having.test +++ b/mysql-test/main/having.test @@ -950,8 +950,53 @@ DROP TABLE t1,t2; CREATE TABLE t (f VARCHAR(512)); INSERT INTO t VALUES ('a'),('b'); SELECT * FROM t HAVING f = 'foo'; +DROP TABLE t; -# Cleanup +--echo # +--echo # MDEV-29731 Crash when HAVING in a correlated subquery references +--echo # columns in the outer query +--echo # +CREATE TABLE t (a INT, b INT); +SELECT 1 FROM t + WHERE b = (SELECT 1 FROM t GROUP BY a HAVING b = a+1); +DROP TABLE t; + +CREATE TABLE t (a INT, b INT, c INT); +SELECT 1 FROM t + WHERE (b,c) = (SELECT 1,1 FROM t GROUP BY a HAVING b = a+1 and c = a-1); +DROP TABLE t; + +CREATE TABLE t (a TEXT, b INT UNIQUE); +SELECT 1 FROM t + WHERE b IN (SELECT 1 FROM t + GROUP BY '', a + HAVING (CASE b WHEN 1 +'' THEN 3 ELSE a END) + ORDER BY b) + GROUP BY b HAVING b = 1; +DROP TABLE t; + +CREATE TABLE t (a INT, b CHAR KEY UNIQUE); +CREATE VIEW v AS SELECT * FROM t WHERE a LIKE '' GROUP BY b HAVING a > a; +SELECT * FROM v AS v1 NATURAL JOIN v AS v5 NATURAL JOIN v + WHERE a LIKE '' AND b IN (SELECT a FROM t + WHERE a LIKE '' + GROUP BY a + HAVING b LIKE (b < +1 OR a > 1) >= b); +DROP VIEW v; +DROP TABLE t; + +EXECUTE IMMEDIATE 'SELECT LEAD(c) OVER (ORDER BY c) + FROM (SELECT 0 AS c) AS a NATURAL JOIN (SELECT 0 AS c) AS b;'; + +CREATE TABLE t (a INT); +UPDATE t SET a = '' + WHERE 1 IN (SELECT * FROM + (SELECT * FROM + (SELECT * FROM t AS v5 NATURAL JOIN t AS v4 NATURAL JOIN t) AS v3 + NATURAL JOIN t + GROUP BY a) AS v2 + WHERE (0, a) IN ((0,-1),(+1,0)) + ORDER BY 1+AVG(a) OVER (ORDER BY a)) ORDER BY a; DROP TABLE t; --echo # diff --git a/sql/item.cc b/sql/item.cc index 472cf3ce2fc..500d9f73a08 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -8041,7 +8041,7 @@ bool Item_ref::fix_fields(THD *thd, Item **reference) if (from_field != not_found_field) { Item_field* fld; - if (!(fld= new (thd->mem_root) Item_field(thd, from_field))) + if (!(fld= new (thd->mem_root) Item_field(thd, context, from_field))) goto error; thd->change_item_tree(reference, fld); mark_as_dependent(thd, last_checked_context->select_lex, From 5a7bcf16940967e5f78d48366216f07d2c0e5284 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Wed, 20 Sep 2023 16:44:39 +0200 Subject: [PATCH 4/9] Make WITH_WSREP=NO built with clang --- sql/sql_class.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 17feb006e21..9d25ecfdcfc 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -68,8 +68,6 @@ #include "wsrep_thd.h" #include "wsrep_trans_observer.h" #include "wsrep_server_state.h" -#else -static inline bool wsrep_is_bf_aborted(THD* thd) { return false; } #endif /* WITH_WSREP */ #include "opt_trace.h" From 2bf291ba59b4477375a4e888846ebe699f622247 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Thu, 13 Jul 2023 13:39:54 +0200 Subject: [PATCH 5/9] MDEV-30820 slow log Rows_examined out of range Fix row counters to be able to get any possible value. --- mysql-test/main/log_slow.result | 6 +-- mysql-test/main/log_slow_debug.result | 29 ++++++++++++++ mysql-test/main/log_slow_debug.test | 38 +++++++++++++++++++ mysql-test/main/log_tables.result | 24 ++++++------ mysql-test/main/mysqldump.result | 30 +++++++-------- mysql-test/main/system_mysql_db.result | 6 +-- .../main/system_mysql_db_fix40123.result | 6 +-- .../main/system_mysql_db_fix50030.result | 6 +-- .../main/system_mysql_db_fix50117.result | 6 +-- .../main/system_mysql_db_fix50568.result | 6 +-- .../suite/funcs_1/r/is_columns_mysql.result | 12 +++--- .../r/is_columns_mysql_embedded.result | 12 +++--- .../suite/rpl/r/rpl_mysql_upgrade.result | 10 ++--- scripts/mysql_system_tables.sql | 2 +- scripts/mysql_system_tables_fix.sql | 6 +-- scripts/wsrep_sst_mysqldump.sh | 2 +- sql/sql_class.cc | 2 + 17 files changed, 136 insertions(+), 67 deletions(-) diff --git a/mysql-test/main/log_slow.result b/mysql-test/main/log_slow.result index 6b9fddb7fb6..b7d543305c6 100644 --- a/mysql-test/main/log_slow.result +++ b/mysql-test/main/log_slow.result @@ -52,15 +52,15 @@ start_time timestamp(6) NO current_timestamp(6) on update current_timestamp(6) user_host mediumtext NO NULL query_time time(6) NO NULL lock_time time(6) NO NULL -rows_sent int(11) NO NULL -rows_examined int(11) NO NULL +rows_sent bigint(20) unsigned NO NULL +rows_examined bigint(20) unsigned NO NULL db varchar(512) NO NULL last_insert_id int(11) NO NULL insert_id int(11) NO NULL server_id int(10) unsigned NO NULL sql_text mediumtext NO NULL thread_id bigint(21) unsigned NO NULL -rows_affected int(11) NO NULL +rows_affected bigint(20) unsigned NO NULL flush slow logs; set long_query_time=0.1; set log_slow_filter=''; diff --git a/mysql-test/main/log_slow_debug.result b/mysql-test/main/log_slow_debug.result index 16d67d7fdc7..f06e47604ac 100644 --- a/mysql-test/main/log_slow_debug.result +++ b/mysql-test/main/log_slow_debug.result @@ -224,3 +224,32 @@ SET @@global.slow_query_log= @org_slow_query_log; SET @@global.log_output= @org_log_output; SET @@global.log_slow_admin_statements= @org_log_slow_admin_statements; DROP PROCEDURE show_slow_log; +# +# MDEV-30820: slow log Rows_examined out of range +# +CREATE TABLE `tab_MDEV_30820` ( +`ID` int(11) NOT NULL AUTO_INCREMENT, +`A` int(11), +PRIMARY KEY(ID) +); +insert into tab_MDEV_30820 values (null, 0),(null, 0); +SET @old_slow_query_log= @@global.slow_query_log; +SET @old_log_output= @@global.log_output; +SET @old_long_query_time= @@long_query_time; +SET @old_dbug= @@GLOBAL.debug_dbug; +SET GLOBAL log_output= "TABLE"; +SET GLOBAL slow_query_log= ON; +SET SESSION long_query_time= 0; +SET GLOBAL debug_dbug="+d,debug_huge_number_of_examined_rows"; +SELECT * FROM tab_MDEV_30820 ORDER BY 1; +ID A +1 0 +2 0 +SET GLOBAL debug_dbug=@old_dbug; +SET @@long_query_time= @old_long_query_time; +SET @@global.log_output= @old_log_output; +SET @@global.slow_query_log= @old_slow_query_log; +drop table tab_MDEV_30820; +# +# End of 10.4 test +# diff --git a/mysql-test/main/log_slow_debug.test b/mysql-test/main/log_slow_debug.test index aba4cbc8dcb..17ca9039850 100644 --- a/mysql-test/main/log_slow_debug.test +++ b/mysql-test/main/log_slow_debug.test @@ -93,3 +93,41 @@ SET @@global.slow_query_log= @org_slow_query_log; SET @@global.log_output= @org_log_output; SET @@global.log_slow_admin_statements= @org_log_slow_admin_statements; DROP PROCEDURE show_slow_log; + + +--echo # +--echo # MDEV-30820: slow log Rows_examined out of range +--echo # + +CREATE TABLE `tab_MDEV_30820` ( +`ID` int(11) NOT NULL AUTO_INCREMENT, +`A` int(11), +PRIMARY KEY(ID) +); + +insert into tab_MDEV_30820 values (null, 0),(null, 0); + +SET @old_slow_query_log= @@global.slow_query_log; +SET @old_log_output= @@global.log_output; +SET @old_long_query_time= @@long_query_time; +SET @old_dbug= @@GLOBAL.debug_dbug; +SET GLOBAL log_output= "TABLE"; + +SET GLOBAL slow_query_log= ON; +SET SESSION long_query_time= 0; + +SET GLOBAL debug_dbug="+d,debug_huge_number_of_examined_rows"; +SELECT * FROM tab_MDEV_30820 ORDER BY 1; +SET GLOBAL debug_dbug=@old_dbug; + + +## Reset to initial values +SET @@long_query_time= @old_long_query_time; +SET @@global.log_output= @old_log_output; +SET @@global.slow_query_log= @old_slow_query_log; + +drop table tab_MDEV_30820; + +--echo # +--echo # End of 10.4 test +--echo # diff --git a/mysql-test/main/log_tables.result b/mysql-test/main/log_tables.result index 2923289325c..0bd56c63b5f 100644 --- a/mysql-test/main/log_tables.result +++ b/mysql-test/main/log_tables.result @@ -73,15 +73,15 @@ slow_log CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log' show fields from mysql.slow_log; Field Type Null Key Default Extra @@ -89,15 +89,15 @@ start_time timestamp(6) NO current_timestamp(6) on update current_timestamp(6) user_host mediumtext NO NULL query_time time(6) NO NULL lock_time time(6) NO NULL -rows_sent int(11) NO NULL -rows_examined int(11) NO NULL +rows_sent bigint(20) unsigned NO NULL +rows_examined bigint(20) unsigned NO NULL db varchar(512) NO NULL last_insert_id int(11) NO NULL insert_id int(11) NO NULL server_id int(10) unsigned NO NULL sql_text mediumtext NO NULL thread_id bigint(21) unsigned NO NULL -rows_affected int(11) NO NULL +rows_affected bigint(20) unsigned NO NULL flush logs; flush tables; SET GLOBAL GENERAL_LOG=ON; @@ -180,15 +180,15 @@ slow_log CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log' alter table mysql.general_log engine=myisam; alter table mysql.slow_log engine=myisam; @@ -209,15 +209,15 @@ slow_log CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log' set global general_log='ON'; set global slow_query_log='ON'; diff --git a/mysql-test/main/mysqldump.result b/mysql-test/main/mysqldump.result index 8334c50080a..739b4288f8d 100644 --- a/mysql-test/main/mysqldump.result +++ b/mysql-test/main/mysqldump.result @@ -5281,15 +5281,15 @@ slow_log CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log' SET @@global.log_output= @old_log_output_state; SET @@global.slow_query_log= @old_slow_query_log_state; @@ -5747,15 +5747,15 @@ CREATE TABLE IF NOT EXISTS `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log'; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `innodb_index_stats`; @@ -5842,15 +5842,15 @@ CREATE TABLE IF NOT EXISTS `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log'; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `innodb_index_stats`; @@ -5947,15 +5947,15 @@ CREATE TABLE IF NOT EXISTS `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log'; /*!40101 SET character_set_client = @saved_cs_client */; DROP TABLE IF EXISTS `innodb_index_stats`; @@ -6395,15 +6395,15 @@ DROP TABLE IF EXISTS mysql.column_stats; - - + + - + diff --git a/mysql-test/main/system_mysql_db.result b/mysql-test/main/system_mysql_db.result index 38bcc53d2dd..455d276d037 100644 --- a/mysql-test/main/system_mysql_db.result +++ b/mysql-test/main/system_mysql_db.result @@ -204,15 +204,15 @@ slow_log CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log' show create table table_stats; Table Create Table diff --git a/mysql-test/main/system_mysql_db_fix40123.result b/mysql-test/main/system_mysql_db_fix40123.result index d9c42b98f62..cebba96864a 100644 --- a/mysql-test/main/system_mysql_db_fix40123.result +++ b/mysql-test/main/system_mysql_db_fix40123.result @@ -242,15 +242,15 @@ slow_log CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log' show create table table_stats; Table Create Table diff --git a/mysql-test/main/system_mysql_db_fix50030.result b/mysql-test/main/system_mysql_db_fix50030.result index b02a50a8d3d..704c7faa39f 100644 --- a/mysql-test/main/system_mysql_db_fix50030.result +++ b/mysql-test/main/system_mysql_db_fix50030.result @@ -246,15 +246,15 @@ slow_log CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log' show create table table_stats; Table Create Table diff --git a/mysql-test/main/system_mysql_db_fix50117.result b/mysql-test/main/system_mysql_db_fix50117.result index ca817b198c6..0332524c43f 100644 --- a/mysql-test/main/system_mysql_db_fix50117.result +++ b/mysql-test/main/system_mysql_db_fix50117.result @@ -226,15 +226,15 @@ slow_log CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log' show create table table_stats; Table Create Table diff --git a/mysql-test/main/system_mysql_db_fix50568.result b/mysql-test/main/system_mysql_db_fix50568.result index 898b11a6ce4..0feea2ba896 100644 --- a/mysql-test/main/system_mysql_db_fix50568.result +++ b/mysql-test/main/system_mysql_db_fix50568.result @@ -247,15 +247,15 @@ slow_log CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log' show create table table_stats; Table Create Table diff --git a/mysql-test/suite/funcs_1/r/is_columns_mysql.result b/mysql-test/suite/funcs_1/r/is_columns_mysql.result index f5f134bd7a7..e707c46e726 100644 --- a/mysql-test/suite/funcs_1/r/is_columns_mysql.result +++ b/mysql-test/suite/funcs_1/r/is_columns_mysql.result @@ -171,9 +171,9 @@ 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 NEVER NULL def mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6) select,insert,update,references NEVER NULL def mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6) select,insert,update,references NEVER NULL -def mysql slow_log rows_affected 13 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL -def mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL -def mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) select,insert,update,references NEVER NULL +def mysql slow_log rows_affected 13 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL +def mysql slow_log rows_examined 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL +def mysql slow_log rows_sent 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references NEVER NULL def mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL NULL int(10) unsigned select,insert,update,references NEVER NULL def mysql slow_log sql_text 11 NULL NO mediumtext 16777215 16777215 NULL NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references NEVER NULL def mysql slow_log start_time 1 current_timestamp(6) NO timestamp NULL NULL NULL NULL 6 NULL NULL timestamp(6) on update current_timestamp(6) select,insert,update,references NEVER NULL @@ -497,15 +497,15 @@ NULL mysql slow_log start_time timestamp NULL NULL NULL NULL timestamp(6) 1.0000 mysql slow_log user_host mediumtext 16777215 16777215 utf8 utf8_general_ci mediumtext NULL mysql slow_log query_time time NULL NULL NULL NULL time(6) NULL mysql slow_log lock_time time NULL NULL NULL NULL time(6) -NULL mysql slow_log rows_sent int NULL NULL NULL NULL int(11) -NULL mysql slow_log rows_examined int NULL NULL NULL NULL int(11) +NULL mysql slow_log rows_sent bigint NULL NULL NULL NULL bigint(20) unsigned +NULL mysql slow_log rows_examined bigint NULL NULL NULL NULL bigint(20) unsigned 3.0000 mysql slow_log db varchar 512 1536 utf8 utf8_general_ci varchar(512) NULL mysql slow_log last_insert_id int NULL NULL NULL NULL int(11) 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 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 rows_affected int NULL NULL NULL NULL int(11) +NULL mysql slow_log rows_affected bigint NULL NULL NULL NULL bigint(20) unsigned 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 User char 80 240 utf8 utf8_bin char(80) diff --git a/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result b/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result index 0a375faf072..606a555a5e4 100644 --- a/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result +++ b/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result @@ -157,9 +157,9 @@ 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) NEVER NULL def mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6) NEVER NULL def mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL 6 NULL NULL time(6) NEVER NULL -def mysql slow_log rows_affected 13 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) NEVER NULL -def mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) NEVER NULL -def mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) NEVER NULL +def mysql slow_log rows_affected 13 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned NEVER NULL +def mysql slow_log rows_examined 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned NEVER NULL +def mysql slow_log rows_sent 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned NEVER NULL def mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL NULL int(10) unsigned NEVER NULL def mysql slow_log sql_text 11 NULL NO mediumtext 16777215 16777215 NULL NULL NULL utf8 utf8_general_ci mediumtext NEVER NULL def mysql slow_log start_time 1 current_timestamp(6) NO timestamp NULL NULL NULL NULL 6 NULL NULL timestamp(6) on update current_timestamp(6) NEVER NULL @@ -480,15 +480,15 @@ NULL mysql slow_log start_time timestamp NULL NULL NULL NULL timestamp(6) 1.0000 mysql slow_log user_host mediumtext 16777215 16777215 utf8 utf8_general_ci mediumtext NULL mysql slow_log query_time time NULL NULL NULL NULL time(6) NULL mysql slow_log lock_time time NULL NULL NULL NULL time(6) -NULL mysql slow_log rows_sent int NULL NULL NULL NULL int(11) -NULL mysql slow_log rows_examined int NULL NULL NULL NULL int(11) +NULL mysql slow_log rows_sent bigint NULL NULL NULL NULL bigint(20) unsigned +NULL mysql slow_log rows_examined bigint NULL NULL NULL NULL bigint(20) unsigned 3.0000 mysql slow_log db varchar 512 1536 utf8 utf8_general_ci varchar(512) NULL mysql slow_log last_insert_id int NULL NULL NULL NULL int(11) 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 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 rows_affected int NULL NULL NULL NULL int(11) +NULL mysql slow_log rows_affected bigint NULL NULL NULL NULL bigint(20) unsigned 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 User char 80 240 utf8 utf8_bin char(80) diff --git a/mysql-test/suite/rpl/r/rpl_mysql_upgrade.result b/mysql-test/suite/rpl/r/rpl_mysql_upgrade.result index 1c8ff2befdc..128e4afed75 100644 --- a/mysql-test/suite/rpl/r/rpl_mysql_upgrade.result +++ b/mysql-test/suite/rpl/r/rpl_mysql_upgrade.result @@ -28,8 +28,8 @@ slow_log CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, @@ -48,15 +48,15 @@ slow_log CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Slow log' SET GLOBAL general_log = 'OFF'; SET GLOBAL slow_query_log = 'OFF'; diff --git a/scripts/mysql_system_tables.sql b/scripts/mysql_system_tables.sql index 300210c48ab..8f73beb84f2 100644 --- a/scripts/mysql_system_tables.sql +++ b/scripts/mysql_system_tables.sql @@ -162,7 +162,7 @@ DROP PREPARE stmt; -- 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, rows_affected INTEGER 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 BIGINT UNSIGNED NOT NULL, rows_examined BIGINT UNSIGNED 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 BIGINT UNSIGNED NOT NULL) engine=CSV CHARACTER SET utf8 comment="Slow log"', 'SET @dummy = 0'); PREPARE stmt FROM @str; EXECUTE stmt; diff --git a/scripts/mysql_system_tables_fix.sql b/scripts/mysql_system_tables_fix.sql index 81d8d183e4b..885d01e6b20 100644 --- a/scripts/mysql_system_tables_fix.sql +++ b/scripts/mysql_system_tables_fix.sql @@ -252,8 +252,8 @@ ALTER TABLE slow_log MODIFY user_host MEDIUMTEXT NOT NULL, MODIFY query_time TIME(6) NOT NULL, MODIFY lock_time TIME(6) NOT NULL, - MODIFY rows_sent INTEGER NOT NULL, - MODIFY rows_examined INTEGER NOT NULL, + MODIFY rows_sent BIGINT UNSIGNED NOT NULL, + MODIFY rows_examined BIGINT UNSIGNED NOT NULL, MODIFY db VARCHAR(512) NOT NULL, MODIFY last_insert_id INTEGER NOT NULL, MODIFY insert_id INTEGER NOT NULL, @@ -263,7 +263,7 @@ ALTER TABLE slow_log ADD COLUMN thread_id BIGINT(21) UNSIGNED NOT NULL AFTER sql_text; ALTER TABLE slow_log MODIFY thread_id BIGINT(21) UNSIGNED NOT NULL, - ADD COLUMN rows_affected INTEGER NOT NULL AFTER thread_id; + ADD COLUMN rows_affected BIGINT UNSIGNED NOT NULL AFTER thread_id; SET GLOBAL slow_query_log = @old_log_state; ALTER TABLE plugin diff --git a/scripts/wsrep_sst_mysqldump.sh b/scripts/wsrep_sst_mysqldump.sh index e1efcbf11ad..5bd2e9ff656 100644 --- a/scripts/wsrep_sst_mysqldump.sh +++ b/scripts/wsrep_sst_mysqldump.sh @@ -85,7 +85,7 @@ PREPARE stmt FROM @stmt; EXECUTE stmt; DROP PREPARE stmt; -SET @stmt = IF (@cond = '1', 'CREATE TABLE IF NOT EXISTS slow_log ( start_time timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), user_host mediumtext NOT NULL, query_time time(6) NOT NULL, lock_time time(6) NOT NULL, rows_sent int(11) NOT NULL, rows_examined int(11) NOT NULL, db varchar(512) NOT NULL, last_insert_id int(11) NOT NULL, insert_id int(11) NOT NULL, server_id int(10) unsigned NOT NULL, sql_text mediumtext NOT NULL, thread_id bigint(21) unsigned NOT NULL) ENGINE=CSV DEFAULT CHARSET=utf8mb3 COMMENT=\"Slow log\"', 'SET @dummy = 0'); +SET @stmt = IF (@cond = '1', 'CREATE TABLE IF NOT EXISTS slow_log ( start_time timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), user_host mediumtext NOT NULL, query_time time(6) NOT NULL, lock_time time(6) NOT NULL, rows_sent bigint(20) UNSIGNED NOT NULL, rows_examined bigint(20) UNSIGNED NOT NULL, db varchar(512) NOT NULL, last_insert_id int(11) NOT NULL, insert_id int(11) NOT NULL, server_id int(10) unsigned NOT NULL, sql_text mediumtext NOT NULL, thread_id bigint(21) unsigned NOT NULL) ENGINE=CSV DEFAULT CHARSET=utf8mb3 COMMENT=\"Slow log\"', 'SET @dummy = 0'); PREPARE stmt FROM @stmt; EXECUTE stmt; diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 9d25ecfdcfc..37a650ee3e3 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -5681,6 +5681,8 @@ void THD::set_examined_row_count(ha_rows count) void THD::inc_sent_row_count(ha_rows count) { m_sent_row_count+= count; + DBUG_EXECUTE_IF("debug_huge_number_of_examined_rows", + m_examined_row_count= (ULONGLONG_MAX - 1000000);); MYSQL_SET_STATEMENT_ROWS_SENT(m_statement_psi, m_sent_row_count); } From 89a493d64cb3d2900500894ff78b11332dad96d3 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Wed, 19 Jul 2023 16:14:39 +0200 Subject: [PATCH 6/9] MDEV-31742 incorrect examined rows in case of stored function usage The counter is global so we do not need add backup to it if we do not zero it after taking the backup. --- mysql-test/main/log_slow.result | 51 ++++++++++++++++++++++++ mysql-test/main/log_slow.test | 65 +++++++++++++++++++++++++++++++ mysql-test/main/log_tables.result | 12 +++--- mysql-test/main/log_tables.test | 12 +++--- sql/sql_class.cc | 1 - 5 files changed, 128 insertions(+), 13 deletions(-) diff --git a/mysql-test/main/log_slow.result b/mysql-test/main/log_slow.result index b7d543305c6..b80e92da760 100644 --- a/mysql-test/main/log_slow.result +++ b/mysql-test/main/log_slow.result @@ -133,3 +133,54 @@ drop table t; # # End of 10.3 tests # +# +# MDEV-31742: incorrect examined rows in case of stored function usage +# +CREATE TABLE `tab_MDEV_30820` ( +`ID` int(11) NOT NULL AUTO_INCREMENT, +`NAME_F` varchar(50) DEFAULT NULL, +PRIMARY KEY (`ID`) +); +CREATE TABLE `tab2` ( +`ID` int(11) NOT NULL AUTO_INCREMENT, +`TAB1_ID` int(11) DEFAULT NULL, +PRIMARY KEY (`id`) +); +CREATE FUNCTION `get_zero`() RETURNS int(11) +BEGIN +RETURN(0) ; +END +// +for i in 1..100 do insert into tab_MDEV_30820 values (i,'qwerty'); end for ; // +for i in 1..1000 do insert into tab2 values (i,i+300); end for ; // +SET @old_slow_query_log= @@global.slow_query_log; +SET @old_log_output= @@global.log_output; +SET @old_long_query_time= @@long_query_time; +SET GLOBAL log_output= "TABLE"; +SET GLOBAL slow_query_log= ON; +SET SESSION slow_query_log=ON; +SET SESSION long_query_time= 0; +SELECT 0 as zero, (SELECT ID FROM tab2 where tab2.TAB1_ID = +tab_MDEV_30820.ID ORDER BY 1 LIMIT 1 ) AS F1 FROM tab_MDEV_30820 ORDER BY 2 DESC LIMIT 2; +zero F1 +0 NULL +0 NULL +SELECT get_zero() as zero, (SELECT ID FROM tab2 where tab2.TAB1_ID = +tab_MDEV_30820.ID ORDER BY 1 LIMIT 1) AS F1 FROM tab_MDEV_30820 ORDER BY 2 DESC LIMIT 2; +zero F1 +0 NULL +0 NULL +# should be the same rows_examined +SELECT rows_examined FROM mysql.slow_log WHERE sql_text LIKE '%SELECT%tab_MDEV_30820%'; +rows_examined +100202 +100202 +SET @@long_query_time= @old_long_query_time; +SET @@global.log_output= @old_log_output; +SET @@global.slow_query_log= @old_slow_query_log; +SET SESSION slow_query_log=default; +drop table tab_MDEV_30820, tab2; +drop function get_zero; +# +# End of 10.4 tests +# diff --git a/mysql-test/main/log_slow.test b/mysql-test/main/log_slow.test index c92dc76a48a..6120ac77756 100644 --- a/mysql-test/main/log_slow.test +++ b/mysql-test/main/log_slow.test @@ -121,3 +121,68 @@ drop table t; --echo # --echo # End of 10.3 tests --echo # + + +--echo # +--echo # MDEV-31742: incorrect examined rows in case of stored function usage +--echo # + + +CREATE TABLE `tab_MDEV_30820` ( +`ID` int(11) NOT NULL AUTO_INCREMENT, +`NAME_F` varchar(50) DEFAULT NULL, + PRIMARY KEY (`ID`) +); + + CREATE TABLE `tab2` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `TAB1_ID` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +); + +--disable_ps2_protocol + +--delimiter // +CREATE FUNCTION `get_zero`() RETURNS int(11) +BEGIN + RETURN(0) ; +END +// + +for i in 1..100 do insert into tab_MDEV_30820 values (i,'qwerty'); end for ; // +for i in 1..1000 do insert into tab2 values (i,i+300); end for ; // + +--delimiter ; + +SET @old_slow_query_log= @@global.slow_query_log; +SET @old_log_output= @@global.log_output; +SET @old_long_query_time= @@long_query_time; +SET GLOBAL log_output= "TABLE"; +SET GLOBAL slow_query_log= ON; + +SET SESSION slow_query_log=ON; +SET SESSION long_query_time= 0; + +SELECT 0 as zero, (SELECT ID FROM tab2 where tab2.TAB1_ID = +tab_MDEV_30820.ID ORDER BY 1 LIMIT 1 ) AS F1 FROM tab_MDEV_30820 ORDER BY 2 DESC LIMIT 2; + +SELECT get_zero() as zero, (SELECT ID FROM tab2 where tab2.TAB1_ID = +tab_MDEV_30820.ID ORDER BY 1 LIMIT 1) AS F1 FROM tab_MDEV_30820 ORDER BY 2 DESC LIMIT 2; + +--echo # should be the same rows_examined +SELECT rows_examined FROM mysql.slow_log WHERE sql_text LIKE '%SELECT%tab_MDEV_30820%'; + +## Reset to initial values +SET @@long_query_time= @old_long_query_time; +SET @@global.log_output= @old_log_output; +SET @@global.slow_query_log= @old_slow_query_log; +SET SESSION slow_query_log=default; + +drop table tab_MDEV_30820, tab2; +drop function get_zero; + +--enable_ps2_protocol + +--echo # +--echo # End of 10.4 tests +--echo # diff --git a/mysql-test/main/log_tables.result b/mysql-test/main/log_tables.result index 0bd56c63b5f..9f13170be11 100644 --- a/mysql-test/main/log_tables.result +++ b/mysql-test/main/log_tables.result @@ -287,15 +287,15 @@ ON UPDATE CURRENT_TIMESTAMP, `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, -`rows_sent` int(11) NOT NULL, -`rows_examined` int(11) NOT NULL, +`rows_sent` bigint(20) unsigned NOT NULL, +`rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` BIGINT(21) UNSIGNED NOT NULL, -`rows_affected` int(11) NOT NULL +`rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'; set global general_log='ON'; set global slow_query_log='ON'; @@ -580,15 +580,15 @@ CREATE TABLE `db_17876.slow_log_data` ( `user_host` mediumtext , `query_time` time(6) , `lock_time` time(6) , -`rows_sent` int(11) , -`rows_examined` int(11) , +`rows_sent` bigint(20) unsigned, +`rows_examined` bigint(20) unsigned, `db` varchar(512) default NULL, `last_insert_id` int(11) default NULL, `insert_id` int(11) default NULL, `server_id` int(11) default NULL, `sql_text` mediumtext, `thread_id` bigint(21) unsigned default NULL, -`rows_affected` int(11) default NULL +`rows_affected` bigint(20) unsigned default NULL ); CREATE TABLE `db_17876.general_log_data` ( `event_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, diff --git a/mysql-test/main/log_tables.test b/mysql-test/main/log_tables.test index b63ad9f4a5c..0c7f6df7953 100644 --- a/mysql-test/main/log_tables.test +++ b/mysql-test/main/log_tables.test @@ -307,15 +307,15 @@ CREATE TABLE `slow_log` ( `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, - `rows_sent` int(11) NOT NULL, - `rows_examined` int(11) NOT NULL, + `rows_sent` bigint(20) unsigned NOT NULL, + `rows_examined` bigint(20) unsigned NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, `thread_id` BIGINT(21) UNSIGNED NOT NULL, - `rows_affected` int(11) NOT NULL + `rows_affected` bigint(20) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'; set global general_log='ON'; @@ -743,15 +743,15 @@ CREATE TABLE `db_17876.slow_log_data` ( `user_host` mediumtext , `query_time` time(6) , `lock_time` time(6) , - `rows_sent` int(11) , - `rows_examined` int(11) , + `rows_sent` bigint(20) unsigned, + `rows_examined` bigint(20) unsigned, `db` varchar(512) default NULL, `last_insert_id` int(11) default NULL, `insert_id` int(11) default NULL, `server_id` int(11) default NULL, `sql_text` mediumtext, `thread_id` bigint(21) unsigned default NULL, - `rows_affected` int(11) default NULL + `rows_affected` bigint(20) unsigned default NULL ); CREATE TABLE `db_17876.general_log_data` ( diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 37a650ee3e3..bd40f3c05f5 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -5603,7 +5603,6 @@ void THD::restore_sub_statement_state(Sub_statement_state *backup) The following is added to the old values as we are interested in the total complexity of the query */ - inc_examined_row_count(backup->examined_row_count); cuted_fields+= backup->cuted_fields; DBUG_VOID_RETURN; } From 1ee0d09a2bc2b7c6131ffde19c6b4246ab3f2147 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Fri, 22 Sep 2023 12:11:57 +0200 Subject: [PATCH 7/9] MDEV-32228 speedup opening tablespaces on Windows is_file_on_ssd() is more expensive than it should be. It caches the results by volume name, but still calls GetVolumePathName() every time, which, as procmon shows, opens multiple directories in filesystem hierarchy (db directory, datadir, and all ancestors) The fix is to cache SSD status by volume serial ID, which is cheap to retrieve with GetFileInformationByHandleEx() --- storage/innobase/os/os0file.cc | 42 +++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 832f5e05658..71e48da0dec 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -7358,36 +7358,40 @@ static bool is_volume_on_ssd(const char *volume_mount_point) } #include -static bool is_file_on_ssd(char *file_path) +static bool is_path_on_ssd(char *file_path) { - /* Cache of volume_path => volume_info, protected by rwlock.*/ - static std::unordered_map cache; - static SRWLOCK lock= SRWLOCK_INIT; - /* Preset result, in case something fails, e.g we're on network drive.*/ char volume_path[MAX_PATH]; if (!GetVolumePathName(file_path, volume_path, array_elements(volume_path))) return false; + return is_volume_on_ssd(volume_path); +} - /* Try cached volume info first.*/ - std::string volume_path_str(volume_path); +static bool is_file_on_ssd(HANDLE handle, char *file_path) +{ + ULONGLONG volume_serial_number; + FILE_ID_INFO info; + if(!GetFileInformationByHandleEx(handle, FileIdInfo, &info, sizeof(info))) + return false; + volume_serial_number= info.VolumeSerialNumber; + + static std::unordered_map cache; + static SRWLOCK lock= SRWLOCK_INIT; bool found; bool result; AcquireSRWLockShared(&lock); - auto e= cache.find(volume_path_str); + auto e= cache.find(volume_serial_number); if ((found= e != cache.end())) result= e->second; ReleaseSRWLockShared(&lock); - - if (found) - return result; - - result= is_volume_on_ssd(volume_path); - - /* Update cache */ - AcquireSRWLockExclusive(&lock); - cache[volume_path_str]= result; - ReleaseSRWLockExclusive(&lock); + if (!found) + { + result= is_path_on_ssd(file_path); + /* Update cache */ + AcquireSRWLockExclusive(&lock); + cache[volume_serial_number]= result; + ReleaseSRWLockExclusive(&lock); + } return result; } @@ -7427,7 +7431,7 @@ void fil_node_t::find_metadata(os_file_t file space->atomic_write_supported = space->purpose == FIL_TYPE_TEMPORARY || space->purpose == FIL_TYPE_IMPORT; #ifdef _WIN32 - on_ssd = is_file_on_ssd(name); + on_ssd = is_file_on_ssd(file, name); FILE_STORAGE_INFO info; if (GetFileInformationByHandleEx( file, FileStorageInfo, &info, sizeof(info))) { From ab9b1461a06fa3ed7e9d032f4db645ed60d51663 Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Sat, 23 Sep 2023 19:02:52 -0700 Subject: [PATCH 8/9] MDEV-32225 Test case from opt_tvc.test fails with statement memory protection Memory for type holders of the columns of a table value constructor must be allocated only once. Approved by Oleksandr Byelkin --- sql/sql_tvc.cc | 53 ++++++++++++++++++++++++++------------------------ sql/sql_tvc.h | 4 +++- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/sql/sql_tvc.cc b/sql/sql_tvc.cc index 71377d3661d..a351e3fa308 100644 --- a/sql/sql_tvc.cc +++ b/sql/sql_tvc.cc @@ -227,7 +227,7 @@ bool table_value_constr::prepare(THD *thd, SELECT_LEX *sl, List_item *first_elem= li++; uint cnt= first_elem->elements; - Type_holder *holders; + Type_holder *holders= type_holders; if (cnt == 0) { @@ -238,32 +238,35 @@ bool table_value_constr::prepare(THD *thd, SELECT_LEX *sl, if (fix_fields_for_tvc(thd, li)) DBUG_RETURN(true); - if (!(holders= new (thd->stmt_arena->mem_root) Type_holder[cnt]) || - join_type_handlers_for_tvc(thd, li, holders, cnt) || - get_type_attributes_for_tvc(thd, li, holders, - lists_of_values.elements, cnt)) - DBUG_RETURN(true); - - List_iterator_fast it(*first_elem); - Item *item; - Query_arena *arena, backup; - arena=thd->activate_stmt_arena_if_needed(&backup); - - sl->item_list.empty(); - for (uint pos= 0; (item= it++); pos++) + if (!holders) { - /* Error's in 'new' will be detected after loop */ - Item_type_holder *new_holder= new (thd->mem_root) - Item_type_holder(thd, item, holders[pos].type_handler(), - &holders[pos]/*Type_all_attributes*/, - holders[pos].get_maybe_null()); - sl->item_list.push_back(new_holder); + holders= type_holders= new (thd->stmt_arena->mem_root) Type_holder[cnt]; + if (!holders || + join_type_handlers_for_tvc(thd, li, holders, cnt) || + get_type_attributes_for_tvc(thd, li, holders, + lists_of_values.elements, cnt)) + DBUG_RETURN(true); + List_iterator_fast it(*first_elem); + Item *item; + Query_arena *arena, backup; + arena=thd->activate_stmt_arena_if_needed(&backup); + + sl->item_list.empty(); + for (uint pos= 0; (item= it++); pos++) + { + /* Error's in 'new' will be detected after loop */ + Item_type_holder *new_holder= new (thd->mem_root) + Item_type_holder(thd, item, holders[pos].type_handler(), + &holders[pos]/*Type_all_attributes*/, + holders[pos].get_maybe_null()); + sl->item_list.push_back(new_holder); + } + if (arena) + thd->restore_active_arena(arena, &backup); + + if (unlikely(thd->is_fatal_error)) + DBUG_RETURN(true); // out of memory } - if (arena) - thd->restore_active_arena(arena, &backup); - - if (unlikely(thd->is_fatal_error)) - DBUG_RETURN(true); // out of memory result= tmp_result; diff --git a/sql/sql_tvc.h b/sql/sql_tvc.h index 594a77af65c..cdd5f5262df 100644 --- a/sql/sql_tvc.h +++ b/sql/sql_tvc.h @@ -24,6 +24,7 @@ class Explain_query; class Item_func_in; class st_select_lex_unit; typedef class st_select_lex SELECT_LEX; +class Type_holder; /** @class table_value_constr @@ -38,6 +39,7 @@ public: List lists_of_values; select_result *result; SELECT_LEX *select_lex; + Type_holder *type_holders; enum { QEP_NOT_PRESENT_YET, QEP_AVAILABLE} have_query_plan; @@ -46,7 +48,7 @@ public: table_value_constr(List tvc_values, SELECT_LEX *sl, ulonglong select_options_arg) : - lists_of_values(tvc_values), result(0), select_lex(sl), + lists_of_values(tvc_values), result(0), select_lex(sl), type_holders(0), have_query_plan(QEP_NOT_PRESENT_YET), explain(0), select_options(select_options_arg) { }; From b6773f58196d74e0a0be83b4499fcb82799e1144 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Thu, 17 Aug 2023 10:58:03 +1000 Subject: [PATCH 9/9] MDEV-31936 Simplify deinit_spider.inc Spider is part of the server, and there's no need to check the version. All spider plugins are uninstalled in clean_up_spider.inc DROP SERVER IF EXISTS makes things easier --- .../spider/include/deinit_spider.inc | 90 ++----------------- 1 file changed, 6 insertions(+), 84 deletions(-) diff --git a/storage/spider/mysql-test/spider/include/deinit_spider.inc b/storage/spider/mysql-test/spider/include/deinit_spider.inc index 71c198f95c2..e62f433b4bf 100644 --- a/storage/spider/mysql-test/spider/include/deinit_spider.inc +++ b/storage/spider/mysql-test/spider/include/deinit_spider.inc @@ -1,85 +1,7 @@ -let $SERVER_NAME= - `SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(version(), '-', 2), '-', -1)`; -let $SERVER_MAJOR_VERSION= - `SELECT SUBSTRING_INDEX(version(), '.', 1)`; -let $SERVER_MINOR_VERSION= - `SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(version(), '.', 2), '.', -1)`; -let $PLUGIN_VERSION= - `SELECT SUBSTRING_INDEX(plugin_version, '.', 1) - FROM information_schema.plugins - WHERE plugin_name = 'SPIDER'`; -if (`SELECT IF($PLUGIN_VERSION = 3, 1, 0)`) -{ - let $HAS_REWRITE= - `SELECT IF (STRCMP('$SERVER_NAME', 'MariaDB') = 0, - IF ($SERVER_MAJOR_VERSION = 10, - IF ($SERVER_MINOR_VERSION < 4, 0, 1), - IF ($SERVER_MAJOR_VERSION < 10, 0, 1)), - 0)`; - let $HAS_REWRITE= 0; - if ($HAS_REWRITE) - { - DROP FUNCTION spider_flush_rewrite_cache; - UNINSTALL PLUGIN spider_rewrite; - DROP TABLE IF EXISTS mysql.spider_rewrite_tables; - DROP TABLE IF EXISTS mysql.spider_rewrite_table_tables; - DROP TABLE IF EXISTS mysql.spider_rewrite_table_partitions; - DROP TABLE IF EXISTS mysql.spider_rewrite_table_subpartitions; - DROP TABLE IF EXISTS mysql.spider_rewritten_tables; - } -} --source clean_up_spider.inc -if ($VERSION_COMPILE_OS_WIN) -{ - if ($CHILD2_1_MYPORT) - { - DROP SERVER s_2_1; - } - if ($CHILD2_2_MYPORT) - { - DROP SERVER s_2_2; - } - if ($CHILD2_3_MYPORT) - { - DROP SERVER s_2_3; - } - if ($CHILD3_1_MYPORT) - { - DROP SERVER s_3_1; - } - if ($CHILD3_2_MYPORT) - { - DROP SERVER s_3_2; - } - if ($CHILD2_3_MYPORT) - { - DROP SERVER s_3_3; - } -} -if (!$VERSION_COMPILE_OS_WIN) -{ - if ($CHILD2_1_MYSOCK) - { - DROP SERVER s_2_1; - } - if ($CHILD2_2_MYSOCK) - { - DROP SERVER s_2_2; - } - if ($CHILD2_3_MYSOCK) - { - DROP SERVER s_2_3; - } - if ($CHILD3_1_MYSOCK) - { - DROP SERVER s_3_1; - } - if ($CHILD3_2_MYSOCK) - { - DROP SERVER s_3_2; - } - if ($CHILD3_3_MYSOCK) - { - DROP SERVER s_3_3; - } -} +DROP SERVER IF EXISTS s_2_1; +DROP SERVER IF EXISTS s_2_2; +DROP SERVER IF EXISTS s_2_3; +DROP SERVER IF EXISTS s_3_1; +DROP SERVER IF EXISTS s_3_2; +DROP SERVER IF EXISTS s_3_3;