mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
Bug#21013: Performance Degrades when importing data that uses Trigger
and Stored Procedure The essence of the bug was that for every re-execution of stored routine or prepared statement new items for character set conversions were created, thus increasing the number of items and the time of their processing, and creating memory leak. No test case is provided since current test suite can't cover such type of bugs. mysql-test/r/sp.result: Add result for bug#21013: Performance Degrades when importing data that uses Trigger and Stored Procedure. mysql-test/t/sp.test: Add test case for bug#21013: Performance Degrades when importing data that uses Trigger and Stored Procedure. sql/item.cc: Switch arena only when in statement prepare mode. Subsequent executions will use cached item tree.
This commit is contained in:
parent
f60d9a3eee
commit
ca00a985a1
3 changed files with 42 additions and 2 deletions
|
@ -5057,4 +5057,16 @@ concat('data was: /', var1, '/')
|
|||
data was: /1/
|
||||
drop table t3|
|
||||
drop procedure bug15217|
|
||||
DROP PROCEDURE IF EXISTS bug21013 |
|
||||
CREATE PROCEDURE bug21013(IN lim INT)
|
||||
BEGIN
|
||||
DECLARE i INT DEFAULT 0;
|
||||
WHILE (i < lim) DO
|
||||
SET @b = LOCATE(_latin1'b', @a, 1);
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
END |
|
||||
SET @a = _latin2"aaaaaaaaaa" |
|
||||
CALL bug21013(10) |
|
||||
DROP PROCEDURE bug21013 |
|
||||
drop table t1,t2;
|
||||
|
|
|
@ -5962,6 +5962,33 @@ call bug15217()|
|
|||
drop table t3|
|
||||
drop procedure bug15217|
|
||||
|
||||
|
||||
#
|
||||
# BUG#21013: Performance Degrades when importing data that uses
|
||||
# Trigger and Stored Procedure
|
||||
#
|
||||
# This is a performance and memory leak test. Run with large number
|
||||
# passed to bug21013() procedure.
|
||||
#
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS bug21013 |
|
||||
--enable_warnings
|
||||
|
||||
CREATE PROCEDURE bug21013(IN lim INT)
|
||||
BEGIN
|
||||
DECLARE i INT DEFAULT 0;
|
||||
WHILE (i < lim) DO
|
||||
SET @b = LOCATE(_latin1'b', @a, 1);
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
END |
|
||||
|
||||
SET @a = _latin2"aaaaaaaaaa" |
|
||||
CALL bug21013(10) |
|
||||
|
||||
DROP PROCEDURE bug21013 |
|
||||
|
||||
|
||||
#
|
||||
# BUG#NNNN: New bug synopsis
|
||||
#
|
||||
|
|
|
@ -1418,7 +1418,8 @@ bool agg_item_charsets(DTCollation &coll, const char *fname,
|
|||
In case we're in statement prepare, create conversion item
|
||||
in its memory: it will be reused on each execute.
|
||||
*/
|
||||
arena= thd->activate_stmt_arena_if_needed(&backup);
|
||||
arena= thd->is_stmt_prepare() ? thd->activate_stmt_arena_if_needed(&backup)
|
||||
: NULL;
|
||||
|
||||
for (i= 0, arg= args; i < nargs; i++, arg+= item_sep)
|
||||
{
|
||||
|
@ -1453,7 +1454,7 @@ bool agg_item_charsets(DTCollation &coll, const char *fname,
|
|||
been created in prepare. In this case register the change for
|
||||
rollback.
|
||||
*/
|
||||
if (arena && arena->is_conventional())
|
||||
if (arena)
|
||||
*arg= conv;
|
||||
else
|
||||
thd->change_item_tree(arg, conv);
|
||||
|
|
Loading…
Add table
Reference in a new issue