笔者之前的文章介绍了 ABAP Development Tool 里提供的 ABAP 源代码全文搜索功能:
SAP ABAP 代码全文(Full Text)搜索的技术实现原理
里面提到,开启这个功能的前提条件:
系统版本 ≥ 7.40 SP05
底层数据库为 HANA
Business Function SRIS_SOURCE_SEARCH 需要处于开启状态
在相关的 ABAP 框架代码里,我们可以看到通过检查系统字段 sy-dbsys 的值是否等于 HDB,来判断当前系统底层数据库是否是 HANA 数据库。
同时,上面这段代码,通过方法 is_source_index_existing, 检测存储 ABAP 报表源代码的数据库表 REPOSRC,是否存在名叫 SRC 的索引。
ABAP 帮助文档里提到:
数据库表中类型为 STRING 和 RAWSTRING 的字段,不能用作索引字段。
https://help.sap.com/doc/abapdocu_753_index_htm/7.53/en-US/abenddic_database_tables_index.htm
支持 ABAP 全文搜索的 REPOSRC 数据库表的 DATA 字段,用来存储压缩后的 ABAP 源代码。其类型正好就是 RAWSTRING:
不过 SAP HANA 数据库支持为 RAWSTRING 类型的字段创建 Full Text Index,所以就不存在上述限制了。
下图即 REPOSRC 数据库表在 DATA 字段上创建的 Full Text Index:
看看 ABAP 框架是如何判断该 Index 是否存在的?
还是使用前一篇文章介绍的 ADBC(ABAP Database Connectivity),在 ABAP 层调用 HANA SQLScript,从一张名为 INDEXES 的视图中去查询。这张视图位于 Schema SYS 下,故又称为系统视图。
SAP 帮助文档对于这些系统视图,有详细介绍:
https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/20a7044375191014a939f50ae14306f7.html
系统视图允许开发人员通过 SQL 命令查询各种系统状态信息,获得有关数据库架构、对象元数据、运行时统计等多方面的信息。
系统视图以表格形式提供系统状态的信息,这些视图位于 SYS Schema 中。ABAP 开发人员可以将 Schema 类比成 ABAP 开发包。
SAP HANA 系统视图主要分为两大类:元数据视图(Metadata Views)和运行时视图(Runtime Views)。
元数据视图用于提供数据库中对象的元数据信息,包括通过 DDL 语句设置的选项或设置,例如表、索引、约束等的定义信息。
DDL 全称是 Data Definition Language,即数据定义语言。它是用于定义、修改和删除数据库中的对象(如表、视图、索引等)的一种特殊语言。
运行时视图则用于提供 HANA 实时数据,包括与 DML 语句执行相关的统计信息和状态信息。
运行时视图的名称通常以 M_ 开头,通常用于监控系统的运行状态。
一个常见的命名对称性是,例如 TABLES 和 M_TABLES,前者用于描述数据库中表的结构信息,而后者则提供运行时的状态信息。
下图是 TABLES 系统视图的定义:
通过这张视图,我们能够轻易得到系统中数据库表很多维度的信息。
比如笔者当前使用的 ABAP 系统里,高达 95.8% 的数据库表都是列存储表。
M_TABLES 则提供了当前系统每一张数据库表的存储使用情况。比如我们可以按照表存储的记录数和占据的存储空间这些指标,从高到低进行排序。
同理,INDEXES 与 M_CS_INDEXES 之间也存在类似的命名关系。其中 INDEXES 提供索引的元数据信息,而 M_CS_INDEXES 则提供与列存储索引相关的具体运行状态。
M_CS_INDEXES 系统视图可以帮助我们了解列存储索引在运行时的状态信息,包括索引的大小、使用频率以及对系统性能的影响。这些信息对于进行索引优化是非常有价值的。通过这些视图,开发人员可以判断某些索引是否在实际应用中被有效利用,或者某些索引是否因数据变更而需要重新构建。
从 SAP HANA 1.0 SPS 07 开始,HANA 提供了内嵌的统计服务视图,这些视图位于 _SYS_STATISTICS Schema 中。这些统计服务视图提供了丰富的系统性能和资源利用率的统计数据,可以用于帮助开发者和系统管理员更好地理解系统的性能瓶颈并进行优化。