• Alexander Nozdrin's avatar
    Patch for Bug#27863 (excessive memory usage for many small queries in a · 5c4333bc
    Alexander Nozdrin authored
    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).
    5c4333bc
parser_stack.test 12.7 KB