SAP HANA Hint簡介

我發現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 Oracle133381 Database hints in Open SQL for MS SQL Server150037 Database hints in Open SQL for DB6 (DB2 UDB)152913 Database hints in Open SQL for Informix162034 DB2/390: Database hints in Open SQL485420 iSeries: Database hints for Open SQL/Native SQL652096 Database hints in Open SQL for SAPDB / MaxDB1702338SYB: 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_unfoldingce2qo_for_nested_views_with_sql_executionenable_star_join_ceqoce2qo_for_unit_conversionqo_pop_hintsquery_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技術文章。