SAP HANA内存使用监控

2022-03-07 00:00:00 语句 数据库 系统 内存 名称

当使用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_TABLESGROUP BY SCHEMA_NAMEORDER 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_TABLESWHERE    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_COLUMNSWHERE    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_COLUMNSWHERE    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_TABLESWHERESCHEMA_NAME = '<Schema名称>'ORDER BY "MB Used" DESC,TABLE_NAME


本文仅是作者的粗浅理解,若有更好的方法欢迎与我沟通,十分感谢。

来源 https://mp.weixin.qq.com/s/haGcaMnk1MZgRvBWPTlV8Q

相关文章