Bug #112924 PSI batch mode assertion error
Submitted: 1 Nov 2023 16:09 Modified: 21 Dec 2023 17:02
Reporter: Pedro Ferreira Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: DML Severity:S6 (Debug Builds)
Version:8.2.0 OS:Ubuntu (22.04)
Assigned to: CPU Architecture:x86 (x86_64)

[1 Nov 2023 16:09] Pedro Ferreira
Description:
I don't have time to reduce this script further, my apologies. Run these queries:

CREATE TABLE t3 (c0 DATETIME(6), c1 DATETIME(3), c2 MEDIUMBLOB);
CREATE TABLE t7 (c0 TINYINT UNSIGNED, c1 INT, c2 BOOLEAN, CONSTRAINT k1 UNIQUE KEY (c0));
INSERT INTO t7(c0,c1,c2) VALUES (94,97,0),(27,41,0),(72,-60,0),(82,58,0),(46,42,1),(58,87,0),(52,NULL,0),(73,-30,1),(35,-81,1),(17,46,0);
CREATE TABLE t0 (c0 VARBINARY(100), c1 TIMESTAMP(2), c2 TIMESTAMP(3), c3 MEDIUMINT AUTO_INCREMENT UNIQUE KEY, CONSTRAINT k2 PRIMARY KEY (c0(3), c2, c1));
INSERT IGNORE INTO t0 (c0, c1, c2) VALUES ROW('a', NULL, TIMESTAMP '1998-1-31 14:44:16');
INSERT INTO t3 (c0, c1, c2) VALUES ROW(CAST('1096-3-26 16:5:39.000022' AS DATETIME), CAST('1096-3-26 16:5:39.000022' AS DATETIME), 1);
CREATE INDEX i4 ON t0 (c2);
CREATE VIEW t1 (c0, c1, c2, c3, c4) AS (SELECT lag(DATE '1072-7-18', 51) OVER (PARTITION BY t0d0n1.c3, (SELECT pi() pd1c0 FROM ((SELECT t3d2n0.c1 pd2c0 FROM t3 t3d2n0 WHERE (NOT b'10001000000000000000') LIMIT 98) subd1n0 (c0) LEFT JOIN t3 t3d1n1 ON (t3d1n1.c2 = subd1n0.c0)) WHERE (t3d1n1.c1 = t3d1n1.c2))) pd0c0, t0d0n1.c3 pd0c1, t7d0n2.c2 pd0c2, insert(CAST(NULL AS SIGNED), t0d0n0.c3, t7d0n2.c0, CONVERT(CASE WHEN t7d0n2.c1 THEN 1 END USING utf32)) pd0c3, b'00000110000000000000000' pd0c4 FROM ((t0 t0d0n0 JOIN t0 t0d0n1 USE INDEX FOR ORDER BY (i4) ON (t0d0n0.c0 = t0d0n1.c3)) RIGHT JOIN t7 t7d0n2 ON (t0d0n0.c2 = t7d0n2.c0)));
INSERT INTO t0 (c2, c0, c1) (VALUES ROW(TIMESTAMP '2006-2-6 4:23:35.000052', CAST(X'6865' AS CHAR), date_sub(TIMESTAMP '1979-1-28 18:30:12.000037', INTERVAL '-49 86:9:-47.1' DAY_MICROSECOND)),ROW((SELECT CAST(unix_timestamp() AS DATETIME(5)) pd2c0 FROM (t7 t7d2n0 JOIN t3 t3d2n1 ON ((t7d2n0.c2 = t3d2n1.c0) AND (t7d2n0.c1 = t3d2n1.c0)))), uuid_short(), CASE WHEN CAST(X'69D0768B' AS CHAR) THEN TIMESTAMP '2028-11-23 3:59:25.000012' WHEN rtrim(CAST(X'68696D' AS CHAR)) THEN utc_date() WHEN CAST(X'6E6577' AS CHAR) THEN now() END));
INSERT INTO t0 (c1, c0, c2) (SELECT timestampadd(WEEK, CAST(t7d1n2.c0 AS SIGNED), t3d1n0.c2), CAST(X'74' AS CHAR), DATE '1072-7-18' FROM t3 t3d1n0 LEFT JOIN t1 ON (t3d1n0.c0 < t1.c0) RIGHT JOIN t7 t7d1n2 ON (t3d1n0.c0 = t7d1n2.c0));
SELECT 1 FROM t7 WHERE greatest(t7.c0, t7.c1) = t7.c0;

The SELECT query will trigger an assertion error at sql/handler.cc:2749
assert(m_psi_batch_mode == PSI_BATCH_MODE_NONE);

How to repeat:
Run the queries above.
[3 Nov 2023 11:26] MySQL Verification Team
Hello Pedro Ferreira,

Thank you for the report and feedback.
Tried to reproduce on 8.2.0/8.1.0/8.0.35 debug/release build but not seeing any issues. Could you please share exact cmake options used for the build? Thank you.

regards,
Umesh
[8 Nov 2023 11:25] Pedro Ferreira
I used these compilation flags with GCC 11.4.0:

-DWITH_DEBUG=1 -DWITH_ASAN=ON -DWITH_UBSAN=ON and boost library version 1.77

This is the configuration file:

[mysqld]
server_id=1
skip-log-bin
character_set_server=utf8mb4
collation_server=utf8mb4_0900_bin
slow_query_log=ON
long_query_time=5
gtid_mode=ON
enforce_gtid_consistency=ON
log_bin=ON
innodb_extend_and_initialize=ON
secure-file-priv=""
[15 Nov 2023 9:54] MySQL Verification Team
Hello Pedro Ferreira,

Thank you for the feedback.
Observed that debug build is affected.

regards,
Umesh
[15 Nov 2023 9:55] MySQL Verification Team
-bt
#0  0x00007fb8a1a4eaa1 in pthread_kill () from /lib64/libpthread.so.0
#1  0x00000000040c60c1 in my_write_core(int) ()
#2  0x000000000334a9c2 in handle_fatal_signal ()
#3  <signal handler called>
#4  0x00007fb89fd98387 in raise () from /lib64/libc.so.6
#5  0x00007fb89fd99a78 in abort () from /lib64/libc.so.6
#6  0x00007fb89fd911a6 in __assert_fail_base () from /lib64/libc.so.6
#7  0x00007fb89fd91252 in __assert_fail () from /lib64/libc.so.6
#8  0x0000000003458c7d in handler::start_psi_batch_mode() ()
#9  0x000000000357e7f7 in TableRowIterator::StartPSIBatchMode() ()
#10 0x0000000003598ee4 in FilterIterator::StartPSIBatchMode() ()
#11 0x000000000329fa11 in PFSBatchMode::PFSBatchMode(RowIterator*) ()
#12 0x000000000329e852 in Query_expression::ExecuteIteratorQuery(THD*) ()
#13 0x000000000329ea1c in Query_expression::execute(THD*) ()
#14 0x0000000003228b26 in Sql_cmd_dml::execute_inner(THD*) ()
#15 0x000000000323271d in Sql_cmd_dml::execute(THD*) ()
#16 0x00000000031d13b9 in mysql_execute_command(THD*, bool) ()
#17 0x00000000031d284f in dispatch_sql_command(THD*, Parser_state*) ()
#18 0x00000000031d3f63 in dispatch_command(THD*, COM_DATA const*, enum_server_command) ()
#19 0x00000000031d5c7b in do_command(THD*) ()
#20 0x000000000333c9b6 in handle_connection ()
#21 0x00000000048a7ae8 in pfs_spawn_thread ()
#22 0x00007fb8a1a49ea5 in start_thread () from /lib64/libpthread.so.0
#23 0x00007fb89fe60b2d in clone () from /lib64/libc.so.6
(gdb)
[21 Dec 2023 17:02] Erlend Dahl
Fixed in the upcoming 8.3.0 under the heading of:

Bug#35703114 Assertion `m_psi_batch_mode == PSI_BATCH_MODE_NONE' failed.