我发现Google和百度上关于HANA DB Hint的中文介绍比较少,所以就写了这一篇。本文部分内容来自SAP note 2142945 – FAQ: SAP HANA Hints。
什么是SAP HANA Hint
HANA Hint是SAP14 HANA数据库服务器执行的一种指令。HANA Hint会影响一个数据库请求的生成和处理的方式,但绝不会改变这些数据库请求的响应结果。通俗的说,如果你不用Hint, 执行某条SQL语句查询到了N条记录。那么用了Hint,查询结果仍然是N条。HANA Hint通常用来进行HANA的性能调优,比如对执行某条SQL语句CPU或者内存占用率的优化。
SAP HANA Hint有下列几种类型:
1. SAP HANA DB Hints
直接用于HANA Studio的SQL语句里。通过select * from hints能够拿到当前版本的HANA支持的所有Hint. 在我用的HANA服务器上总共216个:
用法: 如下图红色下划线所示:
如果您的Netweaver用的数据库是HANA,而您又想把这些Hint用在ABAP Open SQL里,那么可以使用语法: %_HINTS HDB后跟Hint的具体内容。例如下图:
如果Netweaver的版本小于740, 需要将HDB替换成ADABAS。
2. SAP ABAP Hints
对于那些Netweaver用的数据库是非HANA DB的场景,需要使用数据库提供商特定的Hint。具体细节可以查询对应的SAP note。
-
130480 Database hints in Open SQL for Oracle
-
133381 Database hints in Open SQL for MS SQL Server
-
150037 Database hints in Open SQL for DB6 (DB2 UDB)
-
152913 Database hints in Open SQL for Informix
-
162034 DB2/390: Database hints in Open SQL
-
485420 iSeries: Database hints for Open SQL/Native SQL
-
652096 Database hints in Open SQL for SAPDB / MaxDB
-
1702338SYB: Database hints in Open SQL for Sybase ASE
在ABAP的OPEN SQL里使用方法类似,把 %_HINTS后的HDB替换成指定数据库提供商的代号,再加上数据库提供商特定的Hint.
ABAP支持的数据库提供商的代号在ABAP help里能查到。
3. SAP HANA Calculation View Hints
- ce2qo_disable_unfolding
- ce2qo_for_nested_views_with_sql_execution
- enable_star_join_ceqo
- ce2qo_for_unit_conversion
- qo_pop_hints
- query_level_sql_hints
这种类型的Hint用于HANA Studio里创建的Calculation View,而非ABAP Development Tool创建的CDS(Core Data Service) View. 我没有用过,没法举例。
更多细节请查询SAP note 2509161。
常用的HANA Hint介绍
详细列表能在note 2142945的正文里找到,这里就不赘述了。值得一提的是,并没有一个统一的最佳实践指明了诸如”应用某某hint就一定能提高性能”。Hint的使用需要根据具体的SQL语句来分析,没办法一概而论。
最极端的例子就是这对互斥的Hint: CS_JOIN 和NO_CS_JOIN, 它们分别用于建议HANA数据库采用或者不采用Column Store Join来响应数据请求。
我的一个实际工作中的例子:这个简单的报表从HANA数据库中读取100条描述信息包含了文本”2017-12-11″的服务订单:
总共花费了15秒钟:
而当我加上NO_CS_JOIN的hint之后,
性能提升到不到1秒即完成了数据查询。
在note 2142945的末尾还包含很多其他有用的note。将来如果工作需要,我会将这些note陆续翻译成中文并加上自己的理解。
希望本文能帮助您对SAP HANA Hint有一个最基本的认识。您可以关注我的微信公众号”汪子熙“获得我的更多原创SAP技术文章。