summaryrefslogtreecommitdiff
path: root/sql/sql_base.cc
diff options
context:
space:
mode:
authorDmitry Lenev <Dmitry.Lenev@oracle.com>2011-10-23 09:37:35 +0400
committerDmitry Lenev <Dmitry.Lenev@oracle.com>2011-10-23 09:37:35 +0400
commit45526450044c2f5e82138f9ca778d1fcf8ea734b (patch)
tree77ed2b402c0e6dc5339f597406d7bbfb2e428056 /sql/sql_base.cc
parentf816d4c479d8d7f534c710e13e90ad03958e90ae (diff)
downloadmariadb-git-45526450044c2f5e82138f9ca778d1fcf8ea734b.tar.gz
Fix for bug #13116518 - "OPEN_TABLES() SHOULD NOT ALLOCATE AND FREE
NEW_FRM_MEM WITHOUT NEEDING TO". During the process of opening tables for a statement, we allocated memory which was used only during view loading even in cases when the statement didn't use any views. Such an unnecessary allocation (and corresponding freeing) might have caused significant performance overhead in some workloads. For example, it caused up to 15% slowdown in a simple stored routine calculating Fibonacci's numbers. This memory was pre-allocated as part of "new_frm_mem" MEM_ROOT initialization at the beginning of open_tables(). This patch addresses this issue by turning off memory pre-allocation during initialization for this MEM_ROOT. Now, memory on this root will be allocated only at the point when the first .FRM for a view is opened. The patch doesn't contain a test case since it is hard to test the performance improvements or the absence of memory allocation in our test framework.
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r--sql/sql_base.cc7
1 files changed, 4 insertions, 3 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 644796ea337..e0472e2c9b5 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -4810,10 +4810,11 @@ bool open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags,
}
/*
- temporary mem_root for new .frm parsing.
- TODO: variables for size
+ Initialize temporary MEM_ROOT for new .FRM parsing. Do not allocate
+ anything yet, to avoid penalty for statements which don't use views
+ and thus new .FRM format.
*/
- init_sql_alloc(&new_frm_mem, 8024, 8024);
+ init_sql_alloc(&new_frm_mem, 8024, 0);
thd->current_tablenr= 0;
restart: