Technical Articles
Optimize CDS views using dbHints annotation
Discover CDS views with potential Quick Wins
Gateway performance analysis via /IWFND/STATS gives powerful tools to analyze load on backend S4 system from a volume perspective, among others. What about expensive CDS statements within S4? From SQL Editor in S4 via DBACOCKPIT -> Diagnostics -> SQL Editor we can determine which CDS views can be optimized by running following statement:
- SELECT TOP 50 plan_size_count AS plansize, *
FROM m_sql_plan_cache
WHERE statement_string like ‘%Z<CDS View(s)>%’
ORDER BY plansize DESC
Add dbHint annotation and confirm performance benefit
Hints placed on CDS view itself @AbapCatalog.dbHints: [{dbSystem: #HDB, hint: ‘<hint_name>’}]. Since CDS views are not actual tables, and indices less relevant, the join engines should be considered to optimize performance: OLAP, JOIN, HEX, or ESX engines (see SAP HANA Performance Developer Guide). With CDS view(s) having potential for performance benefit, run following SQL statement, with and without hints, selecting fields causing joins or emulating long run times with searching on non-key fields, for example:
- SELECT *
FROM Z<CDS View>
WITH HINT ( USE_ESX_PLAN )
Also try following hints, among others from relevant documentation from SAP, to understand engines and associated costs (see corresponding engines and hints below).
-
Column
-
USE_OLAP_PLAN
- NO_USE_OLAP_PLAN
- NO_USE_HEX_PLAN
-
NO_USE_ESX_PLAN
-
-
HEX
-
USE_HEX_PLAN
-
-
ESX
-
USE_ESX_PLAN
-
SAP HANA Execution Engine (HEX)
HEX engine is preferable in this case, with all things remaining the same.

Discover current join engine
What does PlanViz show without dbHints annotation on this particular CDS view? Column, which is the same as without the hint declared in SQL Statement. To confirm set SQL trace using ST05, run odata request, display trace, Execution Trace download as .plv file (see Display Execution Plan below), and upload .plv in Eclipse. Alternatively Graphical Explain will show similar PlanViz information.

Explain Plan -> Graphical Explain will launch Browser

Run Explain Query plan

Execution Trace or PlanViz from Eclipse using Open File… -> .plv

Results
Add dbHints annotation with HEX to CDS view and check performance improved:
@AbapCatalog.dbHints: [{dbSystem: #HDB, hint: ‘USE_HEX_PLAN’}]

Results
Odata Gateway result without hint is 6.5 seconds

Odata Gateway result with hint is 1.4 seconds

Conclusion
In conclusion the HEX engine capitalizes on SAP HANA, see note 2570371 – FAQ: SAP HANA Execution Engine (HEX). Without dbHints set to USE_HEX_PLAN in the CDS views, consumption via gateway odata requests using SADL framework, are not using the latest, most innovative query processing engine from SAP.
Thanks for reading
Hi Todd,
Thanks for elaborative blog.
For the one's who faced issue with using the annotation mentioned here they have to use latest annotation. I have captured a sample in this https://blogs.sap.com/2022/02/24/sap-cds-hints-annotation-its-application-in-abap/#
Best Regards,
Pavan G