mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
310afbd4a9
Currently the Last_query_cost session status variable shows only the cost of a single flat subselect. For complex queries (with subselects or unions etc) Last_query_cost is not valid as it was showing the cost for the last optimized subselect. Fixed by reseting to zero Last_query_cost when the complete cost of the query cannot be determined. Last_query_cost will be non-zero only for single flat queries. mysql-test/r/status.result: Bug #30377: test case mysql-test/t/status.test: Bug #30377: test case sql/sql_lex.h: Bug #30377: helper function sql/sql_select.cc: Bug #30377: don't assign cost if not on single level statement
93 lines
2.4 KiB
Text
93 lines
2.4 KiB
Text
flush status;
|
|
show status like 'Table_lock%';
|
|
Variable_name Value
|
|
Table_locks_immediate 0
|
|
Table_locks_waited 0
|
|
SET SQL_LOG_BIN=0;
|
|
drop table if exists t1;
|
|
create table t1(n int) engine=myisam;
|
|
insert into t1 values(1);
|
|
lock tables t1 read;
|
|
unlock tables;
|
|
lock tables t1 read;
|
|
update t1 set n = 3;
|
|
unlock tables;
|
|
show status like 'Table_lock%';
|
|
Variable_name Value
|
|
Table_locks_immediate 3
|
|
Table_locks_waited 1
|
|
drop table t1;
|
|
select 1;
|
|
1
|
|
1
|
|
show status like 'last_query_cost';
|
|
Variable_name Value
|
|
Last_query_cost 0.000000
|
|
FLUSH STATUS;
|
|
SHOW STATUS LIKE 'max_used_connections';
|
|
Variable_name Value
|
|
Max_used_connections 1
|
|
SET @save_thread_cache_size=@@thread_cache_size;
|
|
SET GLOBAL thread_cache_size=3;
|
|
SHOW STATUS LIKE 'max_used_connections';
|
|
Variable_name Value
|
|
Max_used_connections 3
|
|
FLUSH STATUS;
|
|
SHOW STATUS LIKE 'max_used_connections';
|
|
Variable_name Value
|
|
Max_used_connections 2
|
|
SHOW STATUS LIKE 'max_used_connections';
|
|
Variable_name Value
|
|
Max_used_connections 3
|
|
SHOW STATUS LIKE 'max_used_connections';
|
|
Variable_name Value
|
|
Max_used_connections 4
|
|
SET GLOBAL thread_cache_size=@save_thread_cache_size;
|
|
CREATE TABLE t1 ( a INT );
|
|
INSERT INTO t1 VALUES (1), (2);
|
|
SELECT a FROM t1 LIMIT 1;
|
|
a
|
|
1
|
|
SHOW SESSION STATUS LIKE 'Last_query_cost';
|
|
Variable_name Value
|
|
Last_query_cost 2.402418
|
|
EXPLAIN SELECT a FROM t1;
|
|
id select_type table type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2
|
|
SHOW SESSION STATUS LIKE 'Last_query_cost';
|
|
Variable_name Value
|
|
Last_query_cost 2.402418
|
|
SELECT a FROM t1 UNION SELECT a FROM t1 ORDER BY a;
|
|
a
|
|
1
|
|
2
|
|
SHOW SESSION STATUS LIKE 'Last_query_cost';
|
|
Variable_name Value
|
|
Last_query_cost 0.000000
|
|
EXPLAIN SELECT a FROM t1 UNION SELECT a FROM t1 ORDER BY a;
|
|
id select_type table type possible_keys key key_len ref rows Extra
|
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
|
2 UNION t1 ALL NULL NULL NULL NULL 2
|
|
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL Using filesort
|
|
SHOW SESSION STATUS LIKE 'Last_query_cost';
|
|
Variable_name Value
|
|
Last_query_cost 0.000000
|
|
SELECT a IN (SELECT a FROM t1) FROM t1 LIMIT 1;
|
|
a IN (SELECT a FROM t1)
|
|
1
|
|
SHOW SESSION STATUS LIKE 'Last_query_cost';
|
|
Variable_name Value
|
|
Last_query_cost 0.000000
|
|
SELECT (SELECT a FROM t1 LIMIT 1) x FROM t1 LIMIT 1;
|
|
x
|
|
1
|
|
SHOW SESSION STATUS LIKE 'Last_query_cost';
|
|
Variable_name Value
|
|
Last_query_cost 0.000000
|
|
SELECT * FROM t1 a, t1 b LIMIT 1;
|
|
a a
|
|
1 1
|
|
SHOW SESSION STATUS LIKE 'Last_query_cost';
|
|
Variable_name Value
|
|
Last_query_cost 4.805836
|
|
DROP TABLE t1;
|