During the development process, we are often the question arises: what is using memory at the moment? Well, we have a little request which helps in part to answer it:
select HOST, COMPONENT, CATEGORY, USED_MEMORY_SIZE from (SELECT HOST, PORT, CAST('Column Store Tables' AS VARCHAR(64)) AS COMPONENT, schema_name || '.' || table_name as CATEGORY, sum(memory_size_in_total) AS USED_MEMORY_SIZE FROM SYS.M_CS_TABLES_ GROUP BY host, port, schema_name || '.' || table_name UNION ALL SELECT HOST, PORT, 'Persistence' AS COMPONENT, CATEGORY, INCLUSIVE_SIZE_IN_USE AS USED_MEMORY_SIZE FROM SYS.M_HEAP_MEMORY_ WHERE CATEGORY = 'Pool/PersistenceManager' UNION ALL SELECT HOST, PORT, 'Column Store Intermediate Results and Shared Datastructures' AS COMPONENT, CATEGORY, INCLUSIVE_SIZE_IN_USE AS USED_MEMORY_SIZE FROM SYS.M_HEAP_MEMORY_ WHERE CATEGORY = 'Pool/malloc/libhdbcscommon.so' UNION ALL SELECT HOST, PORT, 'Memory Management Information' AS COMPONENT, CATEGORY, (EXCLUSIVE_SIZE_IN_USE) AS USED_MEMORY_SIZE FROM SYS.M_HEAP_MEMORY_ WHERE CATEGORY like '%MemoryMapLevel2Blocks' UNION ALL SELECT HOST, PORT, 'Database Kernel Statistics and Merge Statistics' AS COMPONENT, CATEGORY, (INCLUSIVE_SIZE_IN_USE) AS USED_MEMORY_SIZE FROM SYS.M_HEAP_MEMORY_ WHERE CATEGORY = 'Pool/Statistics' OR CATEGORY = 'Pool/MergeMonitor' UNION ALL SELECT HOST, PORT, 'Prepared Statement Cache' AS COMPONENT, CATEGORY, INCLUSIVE_SIZE_IN_USE AS USED_MEMORY_SIZE FROM SYS.M_HEAP_MEMORY_ WHERE CATEGORY = 'Pool/RowEngine/SQLPlan' UNION ALL SELECT HOST, PORT, 'Transaction Management' AS COMPONENT, CATEGORY, INCLUSIVE_SIZE_IN_USE AS USED_MEMORY_SIZE FROM SYS.M_HEAP_MEMORY_ WHERE CATEGORY = 'Pool/RowEngine/Transaction' UNION ALL SELECT HOST, PORT, 'Auxiliary Row Store Components' AS COMPONENT, CATEGORY, (INCLUSIVE_SIZE_IN_USE) AS USED_MEMORY_SIZE FROM SYS.M_HEAP_MEMORY_ WHERE (CATEGORY = 'Pool/RowEngine' OR CATEGORY = 'Pool/malloc/libhdbrskernel.so') and CATEGORY != 'Pool/RowEngine/SQLPlan' and CATEGORY != 'Pool/RowEngine/Transaction' UNION ALL SELECT HOST, PORT, 'Kernel Datastructures (Stack-Allocated)' AS COMPONENT, CATEGORY, INCLUSIVE_SIZE_IN_USE AS USED_MEMORY_SIZE FROM SYS.M_HEAP_MEMORY_ WHERE CATEGORY = 'StackAllocator' UNION ALL SELECT HOST, PORT, 'Row store tables + Indexes' as COMPONENT, table_name as CATEGORY, sum(MEMORY_SIZE) FROM (SELECT HOST, PORT, schema_name || '.' || table_name as table_name, sum(ALLOCATED_FIXED_PART_SIZE) + sum(ALLOCATED_VARIABLE_PART_SIZE) AS MEMORY_SIZE FROM SYS.M_RS_TABLES_ GROUP BY host, port, schema_name || '.' || table_name UNION ALL SELECT HOST, PORT, schema_name || '.' || table_name as table_name, sum(INDEX_SIZE) AS MEMORY_SIZE FROM SYS.M_RS_INDEXES_ GROUP BY host, port, schema_name || '.' || table_name) GROUP BY host, port, table_name UNION ALL SELECT host, port, 'Other Engine Components (misc.)' AS COMPONENT, CATEGORY, (EXCLUSIVE_SIZE_IN_USE) AS USED_MEMORY_SIZE FROM SYS.M_HEAP_MEMORY_ where CATEGORY not in ('Pool/malloc/libhdbrskernel.so', 'StackAllocator', 'Pool/RowEngine/SQLPlan', 'Pool/RowEngine/Transaction', 'Pool/MergeMonitor', 'Pool/Statistics', 'Pool/malloc/libhdbcscommon.so', 'Pool/itab', 'Pool/malloc/libhdbbasement.so', 'Pool/malloc/libhdbcs.so', 'VirtualAlloc') and CATEGORY not like '%MemoryMapLevel2Blocks' and CATEGORY not like 'Pool/RowEngine%' and CATEGORY not like 'Pool/PersistenceManager%' and CATEGORY not like 'Pool/AttributeEngine%') order by USED_MEMORY_SIZE desc
The result looks like this:
Explanation of the fields:
HOST - The host name
Component - the type of object that occupies memory.
Category - their table or object that occupies memory.
USED_MEMORY_SIZE - The size.
Of interest to us are usually two: Column Store Tables, Other Engine Components (misc.). The first table shows the number of which is space in the memory, the second shows no explicit costs when using queries or procedures. For example the growth rate "Pool / ValueArray" during the procedure suggests that one of the elements is stored in uncompressed form.. See note 1840954.