上一篇博客对SAP HANA SYSTEM VIEWS进行了简单介绍,并且介绍了使用SAP HANA SQL TRACE来跟踪HANA STUDIOAdministration里使用的SQL语句,这篇博客将会具体介绍HANA STUDIOAdministrationOverview Tab中使用到的SYSTEM VIEWS

/wp-content/uploads/2014/03/1_413860.png

     上面这张图是HANA STUDIOOverview Tab,主要是对当前SAP HANA系统中的基本信息做了一些大体介绍,主要涉及SAP HANA系统、操作系统基本信息,Alert信息,内存信息、CPU使用信息和硬盘使用信息。

     将上图划分成4个区域,其中,区域1主要描述了系统信息,包括运行状态、服务启动时间、分布式信息、SAP HANA版本、编译时间、操作系统、Linux内核和硬件提供商,涉及如下几张系统表:SYS.M_SERVICES, M_SERVICE_STATISTICS, SYS.M_HOST_INFORMATION

     系统表SYS.M_SERVICES描述了系统当前所有服务的运行状态,但是比系统表M_SERVICE_STATISTICS的介绍简略的多,只是一些主机名,端口,运行状态等等简单的字段。而在HANA STUDIO中,该系统表是用来检测当前SAP HANA系统是否为分布式系统,语句如下:






SELECT COUNT(DISTINCT(HOST)) FROM SYS.M_SERVICES;



     如果返回结果大于0,则该SAP HANA是一个分布式HANA系统。

     系统表M_SERVICE_STATISTICS则具体的介绍了每个活动的服务,包括服务的基本信息:主机、端口等,也包括每个服务使用的内存信息、               CPU使用信息,也包括了一些服务统计信息:服务每秒钟处理的请求个数、当前活动的请求个数、提交的请求个数以及一些服务使用的线程个数。在下面的SQL语句中,查询了一些个人认为比较重要的字段:


SELECT HOST,PORT,SERVICE_NAME,ACTIVE_STATUS,PROCESS_CPU,PROCESS_CPU_TIME,TOTAL_CPU_TIME,AVAILABLE_MEMO
RY,ACTIVE_REQUEST_COUNT,PENDING_REQUEST_COUNT FROM M_SERVICE_STATISTICS;



/wp-content/uploads/2014/03/2_413870.png

     系统表M_HOST_INFORMATION用来查询一些数据库及操作系统信息,该视图以“键值”方式来存储信息,在HANA_STUDIO中使用到了以下的键:build_version, build_time, os_name, os_kernel_version, hw_manufacturer,当然,也有一些其他信息,这里列出一些个人认为比较重要的:start_time, mem_swap, mem_phys, 所以可以通过如下语句查询这些信息:






SELECT * FROM M_HOST_INFORMATION WHERE KEY=’key’;



     当然也可以不加过滤条件全部筛选出来再寻找有效信息。

     图中区域2主要是一些数据库警告的概况,涉及的表是_SYS_STATISTICS.STATISTICS_CURRENT_ALERTS, 这张表在官方SYSTEM VIEW中并没有介绍。其中个人认为比较重要的是如下字段:INDEX, ALERT_DESCRIPTION, ALERT_DETAIL, ALERT_NAME, ALERT_RATING, ALERT_TIMESTAMP, ALERT_USERACTION。下面的表格展示了一条ALERT记录:

字段

结果

描述

INDEX

BACKUP_NO_DATA_EXISTS

警告的索引名

ALERT_DESCRPTION

Determines whether or not a data backup exists. Without a data backup, your database cannot be recovered.

警告描述

ALERT_DETAIL

Data backup does not exist. Without a data backup, your database cannot be recovered.

警告详细信息

ALERT_NAME

Existence of data backup

警告的名称

ALERT_RATING

4

警告级别,从14,严重程度由低到高

ALERT_TIMESTAMP

Mar 10, 2014 1:09:27.0 PM

警告出现时间

ALERT_USERACTION

Perform a data backup as soon as possible.

建议执行的操作

     图中区域3主要是描述内存使用情况和CPU使用情况,涉及的表比较多,SQL语句也比较复杂。先看第一个部分:SAP HANA USED MEMORYHANA STUDIO使用了如下语句来获取相关信息:

select

        m1.HOST as HOST,

        m1.ALLOCATION_LIMIT/(1024*1024*1024) as ALLOCATION_LIMIT,

        m1.INSTANCE_TOTAL_MEMORY_USED_SIZE/(1024*1024*1024) as TOTAL_MEMORY_USED_SIZE,

        (b1.PEAK+m1.INSTANCE_CODE_SIZE+ m1.INSTANCE_SHARED_MEMORY_ALLOCATED_SIZE)/(1024*1024*1024) as PEAK

from SYS.M_HOST_RESOURCE_UTILIZATION m1 join (select

        a2.HOST as HOST,

        sum(ifnull (a1.INCLUSIVE_PEAK_ALLOCATION_SIZE,

        a2.HEAP_MEMORY_USED_SIZE)) as PEAK

       from SYS.M_SERVICE_MEMORY a2

       left outer join (select

        HOST,

        PORT,

        INCLUSIVE_PEAK_ALLOCATION_SIZE

              from SYS.M_HEAP_MEMORY_RESET

              where DEPTH = 0 ) as a1 on a2.HOST = a1.HOST

       and a2.PORT = a1.PORT

       group by a2.HOST) as b1 on m1.HOST = b1.HOST

  ;

     涉及了表SYS.M_HOST_RESOURCE_UTILIZATION, SYS.M_SERVICE_MEMORY, SYS.M_HEAP_MEMORY_RESETM_HOST_RESOURCE_UTILIZATION用来描述主机资源利用情况,包括物理内存使用/空闲,交换区使用/空闲,数据库实例相关内存使用/分配,共享库代码内存占用,在上面SQL中,用到了HOST(主机名),ALLOCATION_LIMIT(分配内存限制),INSTANCE_TOTAL_MEMORY_USED_SIZE(实例使用内存总和),INSTANCE_CODE_SIZE(共享库代码内存占用)和INSTANCE_SHARED_MEMORY_ALLOCATED_SIZE(数据库进程间共享内存),所以数据库状态中的Used MemoryAllocation Limit可以直接通过其中的两个字段获取。M_SERVICE_MEMORY表描述了每个进程逻辑/物理内存,代码段/栈内存,堆分配/使用内存,共享内存使用/分配,可能/实际能够回收的内存。SYS.M_HEAP_MEMORY_RESET以一种层级的方式展现了系统中每个进程使用的内存情况,下面给出一个查询结果片段:

DEPTH

CATEGORY

0

/

1

Pool

2

Pool/L

3

Pool/L/llang

4

Pool/L/llang/Context

     在上面的SQL中,筛选DEPTH0从而可以在高层面直接获取每个进程使用的内存峰值。所以整个子查询计算了每个进程所占用内存的峰值,最后对其进行求和汇总,而实例所使用的内存峰值则为子查询SQL计算出的内存使用峰值加上共享代码内存占用大小加上进程间共享内存占用大小。

第二部分Resident Memory则是从数据库层面和系统层面给出了内存使用情况,使用的SQL如下:

select

        T1.HOST,

       T1.FREE_PHYSICAL_MEMORY/(1024*1024*1024),

       (T1.USED_PHYSICAL_MEMORY+ T2.SHARED_MEMORY_ALLOCATED_SIZE)/(1024*1024*1024),

       T2.PHYSICAL_MEMORY_SIZE/(1024*1024*1024),

       (T1.FREE_PHYSICAL_MEMORY+T1.USED_PHYSICAL_MEMORY)/(1024*1024*1024)

from M_HOST_RESOURCE_UTILIZATION as T1 join (select

        M_SERVICE_MEMORY.HOST,

        sum(M_SERVICE_MEMORY.PHYSICAL_MEMORY_SIZE) as PHYSICAL_MEMORY_SIZE,

       sum(M_SERVICE_MEMORY.SHARED_MEMORY_ALLOCATED_SIZE) as SHARED_MEMORY_ALLOCATED_SIZE

       from SYS.M_SERVICE_MEMORY

       group by M_SERVICE_MEMORY.HOST) as T2 on T2.HOST = T1.HOST

  ;

     涉及了表M_HOST_RESOURCE_UTILIZATION, M_SERVICE_MEMORY,这些表在上面的例子中已经提到过,但是使用的字段并不相同。系统总内存大小可以使用M_HOST_RESOURCE_UTILIZATION中的空闲物理内存大小和使用的物理内存大小之和来计算,而子查询中的SQL语句统计了M_SERVICE_MEMORY表中的物理内存使用大小和进程间共享内存使用大小来求和获取总物理内存使用情况。在整个SQL层面,使用数据库使用过的物理内存大小和线程间共享内存使用大小之和来表示数据库系统内存使用峰值,使用子查询中的物理内存使用大小来表示当前数据库使用的物理内存。

     第三部分CPU Usage比较简单,使用如下SQL就能获得:

select HOST, MAX(PROCESS_CPU), MAX(TOTAL_CPU) from sys.m_service_statistics GROUP BY HOST ;

     图中区域4是对硬盘使用情况的统计。分为数据区、Log区和Trace区,使用的SQL语句如下:

select

        v1.host,

        d.usage_type,

        d.total_size/(1024*1024*1024),

       sum(v2.data_size)/(1024*1024*1024) data_size,

        d.path,

        d.device_id,

        d.used_size/(1024*1024*1024)

from ( ( m_volumes as v1 join M_VOLUME_SIZES as v2 on v1.volume_id = v2.volume_id )

       right outer join m_disks as d on d.disk_id = v2.disk_id )

where d.usage_type =’XXX’

group by v1.host,

        d.usage_type,

        d.total_size,

       d.device_id,

        d.path,

        d.used_size

order by d.device_id,

       v1.host

  ;

     其中XXX可以替换成DATA或者LOG,表M_VOLUMES介绍了数据库每个进程的VOLUME信息,而表M_VOLUME_SIZES记录了每个进程的DATALOG区数据大小,M_DISKS记录了当前硬盘总大小和已使用的硬盘大小。从而DATA/LOG当前使用数据大小可以使用M_VOLUME_SIZES表中相对应类型的数据文件大小之和求得,而数据库总使用大小和硬盘总大小可以使用M_DISKS中的使用数据大小和总容量大小求得。

     对于TRACE区,使用如下SQL

select

        d.host,

        d.usage_type,

        d.total_size/(1024*1024*1024),

       sum(t.file_size)/(1024*1024*1024) file_size,

        d.path,

        d.device_id,

        d.used_size /(1024*1024*1024)

from ( m_tracefiles as t

       right outer join m_disks as d on d.host = t.host )

where d.usage_type like ‘%TRACE%’

group by d.host,

        d.usage_type,

        d.total_size,

       d.device_id,

        d.path,

        d.used_size

order by d.device_id,

       d.host

  ;

     硬盘总容量和总是用大小不变,而trace文件大小是从表M_TRACEFILES中获取,将所有的trace文件容量(file_size)求和即可。


参考资料:SAP HANA SQL and System Views Reference




想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply