Symptom
Large amount of memory is allocated by Pool/RowEngine/MonitorView and never be reduced until system restart, when searching M_EXPENSIVE_STATMENTS monitoring view collected by use_in_memory_tracing feature.
Reason and Prerequisites
Since Revision70, a new feature of M_EXPENSIVE_STATEMENTS monitoring view was introduced. This feature is a performance enhancement by keeping the information of expensive statements in memory. It can reduce overhead of tracing/querying expensive statements. This feature can be turned on/off by ‘use_in_memory_tracing’ parameter in section [expensive_statement] of global.ini. Its default value is ‘true’.
- global.ini
[expensive_statement]
use_in_memory_tracing = true
When information of expensive statements is stored in memory and M_EXPENSIVE_STATEMENTS monitoring view is searched with filter conditions (WHERE …) for one of following columns;
- CONNECTION_ID
- TRANSACTION_ID
- STATEMENT_ID
- DB_USER
- APP_USER
- START_TIME
- OBJECT_NAME
Then, memory allocated by “Pool/RowEngine/MonitorView” for M_EXPENSIVE_STATEMENTS monitoring view won’t be released due to programming error.
You can check the memory size allocated by Pool/RowEngine/MonitorView with following sql
- select exclusive_size_in_use from m_heap_memory where category = ‘Pool/RowEngine/MonitorView’
Solution
This programming error was fixed from Rev85.1 and higher version.
In Revision70 ~ 85, you can avoid this memory leak by turning off use_in_memory_tracing
In Revision70 ~ 85, you can avoid this memory leak by turning off use_in_memory_tracing
- alter system alter configuration (‘global.ini’, ‘system’) set (‘expensive_statement’, ‘use_in_memory_tracing’) = ‘false’;