SAP HANA内存使用监控
当使用SAP HANA作为分析型系统或数据仓库时,经常要监控系统的内存的使用情况,本文介绍一些常用的功能或查询SQL。
1. 查看服务器内存使用情况
双击服务器图标打开服务器监控界面:
在内存监控中,Used Memory和Peak Used Memory是重要的内存使用指标;Used Memory代表SAP HANA使用内存的大小,Peak Used Memory记录着当前HANA系统曾经使用内存的高峰值,而Allocation Limit是分配给当前HANA系统能够使用的大的内存。
第二个需要注意的是Resident Memory,其中Total Resident指服务器上常驻使用的内存,本机是多租户,所以常驻内存比较多,实际剩余使用内存大概等于 总可用内存-常驻内存 。
2. 列存储表相关内存信息
① 以下SQL语句可以查询HANA系统中所有列存储的数据库表一共使用了多少内存:
SELECT
ROUND(SUM(MEMORY_SIZE_IN_TOTAL/1024/1024)) AS "Column Tables MB Used"
FROM M_CS_TABLES
② 以下SQL语句显示当前SAP HANA系统中所有Schema占用的内存空间:
SELECT
SCHEMA_NAME AS "Schema",
ROUND(SUM(MEMORY_SIZE_IN_TOTAL)/1024/1024) AS "MB Used"
FROM M_CS_TABLES
GROUP BY SCHEMA_NAME
ORDER BY "MB Used" DESC
③ 以下SQL语句可以列出某个Schema中所有的表使用的内存大小:
SELECT
TABLE_NAME AS "Table",
ROUND(MEMORY_SIZE_IN_TOTAL/1024/1024,2) AS "MB Used"
FROM M_CS_TABLES
WHERE
SCHEMA_NAME = '<Schema 名称>'
ORDER BY "MB Used" DESC
④ 使用以下SQL语句,可以显示某个数据库表未压缩前的大小,以及在Main区域、Delta区域中数据所占用内存大小:
SELECT
COLUMN_NAME AS "Column",
LOADED,
ROUND(UNCOMPRESSED_SIZE/1024/1024) AS "Uncompressed MB",
ROUND(MEMORY_SIZE_IN_MAIN/1024/1024) AS "Main MB",
ROUND(MEMORY_SIZE_IN_DELTA/1024/1024) AS "Delta MB",
ROUND(MEMORY_SIZE_IN_TOTAL/1024/1024) AS "Total Used MB",
ROUND(COMPRESSION_RATIO_IN_PERCENTAGE/100,2) AS "Compr. Ratio"
FROM M_CS_COLUMNS
WHERE
TABLE_NAME = '<数据库表名称>'
⑤ 使用以下SQL语句,可以得到某个数据库表在内存中的整体压缩比(或者直接查看数据库表的Runtime Information,能都得到数据库表每一个数据列的压缩比):
SELECT
ROUND(SUM(MEMORY_SIZE_IN_MAIN)/1024/1024,2) AS "Memory Size in MAIN-MB",
ROUND(SUM(MEMORY_SIZE_IN_DELTA)/1024/1024,2) AS "Memory Size in Delta-MB",
ROUND(SUM(MEMORY_SIZE_IN_TOTAL)/1024/1024,2) AS "Total Size in Memory-MB",
ROUND(SUM(UNCOMPRESSED_SIZE)/1024/1024,2) AS "Uncompressed Total Size in Memory-MB",
ROUND(ROUND(SUM(UNCOMPRESSED_SIZE) /1024 /1024,2)/ROUND(SUM(MEMORY_SIZE_IN_TOTAL)/1024/1024,2),2) AS "Compressed Rate"
FROM M_CS_COLUMNS
WHERE
SCHEMA_NAME = '<Schema名称>' and
TABLE_NAME = '<数据库表名称>'
3. 行存储表相关内存信息
① 使用以下SQL语句,可以显示当前HANA系统中所有行存储表使用了多少内存空间:
SELECT
ROUND(SUM(USED_FIXED_PART_SIZE + USED_VARIABLE_PART_SIZE)/1024/1024) AS "Row Tables MB Used"
FROM M_RS_TABLES
② 使用以下的SQL语句,可以显示所有Schema中每个行存储表单独使用的内存空间:
SELECT
SCHEMA_NAME,
TABLE_NAME,
ROUND((USED_FIXED_PART_SIZE + USED_VARIABLE_PART_SIZE)/1024/1024,2) AS "MB Used"
FROM M_RS_TABLES
WHERE
SCHEMA_NAME = '<Schema名称>'
ORDER BY "MB Used" DESC,TABLE_NAME
本文仅是作者的粗浅理解,若有更好的方法欢迎与我沟通,十分感谢。
来源 https://mp.weixin.qq.com/s/haGcaMnk1MZgRvBWPTlV8Q
相关文章