diff --git a/mysql-test/suite/period/r/perfschema.result b/mysql-test/suite/period/r/perfschema.result new file mode 100644 index 00000000000..7dff0f28c39 --- /dev/null +++ b/mysql-test/suite/period/r/perfschema.result @@ -0,0 +1,26 @@ +# +# MDEV-36720 Possible memory leak on updating table with index without overlaps +# +create table t1 (id int not null primary key auto_increment, rel_id int not null, start_date datetime not null, end_date datetime not null, period for p (start_date, end_date), unique key (rel_id, p without overlaps)); +insert into t1 (rel_id, start_date, end_date) values (1, '2024-01-01', '2025-01-01'); +select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1'; +object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock +TABLE test t1 0 0 WRITE CONCURRENT INSERT NULL +update t1 set end_date = '2025-01-16' where id = 1; +select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1'; +object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock +TABLE test t1 0 0 WRITE NULL +update t1 set end_date = '2025-01-16' where id = 1; +select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1'; +object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock +TABLE test t1 0 0 WRITE NULL +update t1 set end_date = '2025-01-16' where id = 1; +select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1'; +object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock +TABLE test t1 0 0 WRITE NULL +update t1 set end_date = '2025-01-16' where id = 1; +select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1'; +object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock +TABLE test t1 0 0 WRITE NULL +drop table t1; +# End of 10.11 tests diff --git a/mysql-test/suite/period/t/perfschema.test b/mysql-test/suite/period/t/perfschema.test new file mode 100644 index 00000000000..783099f8683 --- /dev/null +++ b/mysql-test/suite/period/t/perfschema.test @@ -0,0 +1,19 @@ +--source include/not_embedded.inc +--source include/have_perfschema.inc +--echo # +--echo # MDEV-36720 Possible memory leak on updating table with index without overlaps +--echo # +create table t1 (id int not null primary key auto_increment, rel_id int not null, start_date datetime not null, end_date datetime not null, period for p (start_date, end_date), unique key (rel_id, p without overlaps)); +insert into t1 (rel_id, start_date, end_date) values (1, '2024-01-01', '2025-01-01'); +select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1'; +update t1 set end_date = '2025-01-16' where id = 1; +select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1'; +update t1 set end_date = '2025-01-16' where id = 1; +select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1'; +update t1 set end_date = '2025-01-16' where id = 1; +select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1'; +update t1 set end_date = '2025-01-16' where id = 1; +select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1'; +drop table t1; + +--echo # End of 10.11 tests diff --git a/sql/handler.cc b/sql/handler.cc index 82444061834..fade28431fe 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -7346,6 +7346,7 @@ int handler::ha_reset() { lookup_handler->ha_external_unlock(table->in_use); lookup_handler->close(); + PSI_CALL_close_table(table_share, lookup_handler->m_psi); delete lookup_handler; lookup_handler= this; }