mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Patch for Bug#27863 (excessive memory usage for many small queries in a
multiquery packet). Background: - a query can contain multiple SQL statements; - the server frees resources allocated to process a query when the whole query is handled. In other words, resources allocated to process one SQL statement from a multi-statement query are freed when all SQL statements are handled. The problem was that the parser allocated a buffer of size of the whole query for each SQL statement in a multi-statement query. Thus, if a query had many SQL-statements (so, the query was long), but each SQL statement was short, ther parser tried to allocate huge amount of memory (number of small SQL statements * length of the whole query). The memory was allocated for a so-called "cpp buffer", which is intended to store pre-processed SQL statement -- SQL text without version specific comments. The fix is to allocate memory for the "cpp buffer" once for all SQL statements (once for a query).
This commit is contained in:
@ -399,4 +399,12 @@ delimiter ;$$
|
||||
|
||||
drop procedure p_37228;
|
||||
|
||||
#
|
||||
# Bug#27863 (excessive memory usage for many small queries in a multiquery
|
||||
# packet).
|
||||
#
|
||||
|
||||
let $i=`select repeat("set @a=1;", 65535)`;
|
||||
--disable_query_log
|
||||
eval $i;
|
||||
--enable_query_log
|
||||
|
Reference in New Issue
Block a user