Upload
sembcs
View
143
Download
27
Embed Size (px)
DESCRIPTION
Best practices on ABAP HANA Optimization
Citation preview
Stefan Bresch, Boris Gebhardt, Jens Lieberum, Johannes Marbach
October / November 2013
CD262
Tune Your Custom ABAP Code - Get Ready for SAP HANA
2013 SAP AG or an SAP affiliate company. All rights reserved. 2
Disclaimer
This presentation outlines our general product direction and should not be relied on in making a
purchase decision. This presentation is not subject to your license agreement or any other agreement
with SAP. SAP has no obligation to pursue any course of business outlined in this presentation or to
develop or release any functionality mentioned in this presentation. This presentation and SAP's
strategy and possible future developments are subject to change and may be changed by SAP at any
time for any reason without notice. This document is provided without a warranty of any kind, either
express or implied, including but not limited to, the implied warranties of merchantability, fitness for a
particular purpose, or non-infringement. SAP assumes no responsibility for errors or omissions in this
document, except if such damages were caused by SAP intentionally or grossly negligent.
2013 SAP AG or an SAP affiliate company. All rights reserved. 3
Agenda
Motivation
Prepare custom code for SAP HANA
ABAP Test Cockpit
Optimize custom code for SAP HANA
SQL Monitor
SQL Performance Tuning Worklist
Summary
Motivation
2013 SAP AG or an SAP affiliate company. All rights reserved. 5
SAP Business Suite powered by SAP HANA What makes HANA so Unique?
100% In-Memory computing Allow OLTP & OLAP processing in Real-Time
5-20x Compression
Column based compression
Up to 10,000x Faster
Massive parallel scaling
2013 SAP AG or an SAP affiliate company. All rights reserved. 6
SAP Business Suite powered by SAP HANA Migrate to SAP Business Suite powered by SAP HANA
SAP HANA Database
AS ABAP 7.4
SAP Business Suite 2013
Any Database
AS ABAP
SAP Business Suite
Migrate
based on ABAP 7.4 = the to-go release for all SAP HANA based ABAP applications
SAP Business Suite on SAP HANA
Upgrade
Upgrade SAP Business
Suite
Custom Code
SAP Business Suite 2013
Custom Code
Custom code is a central part of the
business functionality
How can customers smoothly migrate and
optimize their code for SAP HANA?
Adapt
VISIT CD261: Creating Efficient Code Using the
Renewed ABAP
2013 SAP AG or an SAP affiliate company. All rights reserved. 7
Migrate to SAP Business Suite powered by SAP HANA Impact on custom ABAP development
Which of my ABAP code must be changed to
avoid potential functional issues?
Which of my ABAP code shall be optimized to
ensure good performance?
Which of my main business processes have
potential for HANA so that I can speed up those
massively?
And how can I find all this ABAP code easily
and do the adaption efficiently?
Prepare Custom Code for SAP HANA ABAP Test Cockpit and Static Checks
2013 SAP AG or an SAP affiliate company. All rights reserved. 9
Prepare your custom code for SAP HANA Functional corrections for existing ABAP code
In general existing ABAP code runs on SAP HANA as before
Only if ABAP code relies on technical specifics of the old database, ABAP code changes
might be necessary
Which of my ABAP code must be changed to avoid potential functional issues
2013 SAP AG or an SAP affiliate company. All rights reserved. 10
Prepare your custom code for SAP HANA Functional corrections for existing ABAP code
Technical changes with SAP HANA that may affect existing DB specific ABAP code
Technical Change Details and Examples Effect on DB specific ABAP code
DB migration Each DB has specific features and unique technical behavior.
DB specific code may rely on these features of the used database.
SAP HANA architecture Column based architecture - as a consequence e.g. secondary DB indexes are
less important.
DB specific code may rely on the existence/usage of certain DB indexes.
Depooling/Declustering During the migration to SAP HANA most pool and cluster DB tables are
transformed to transparent DB tables (depooling/declustering) so that the
tables can be used in analytic scenarios.
DB specific code may rely on the technical specifics of pool and cluster tables.
Details: See OSS note 1785057
2013 SAP AG or an SAP affiliate company. All rights reserved. 11
Technical Change ABAP code which must be checked / corrected Recommended solution
DB migration Native SQL, Hints, ADBC which uses DB specific features Use Open SQL if possible, adapt native SQL and DB hints if necessary
Prepare your custom code for SAP HANA Functional corrections for existing ABAP code Details and examples
Example for native SQL Example for a DB hint
2013 SAP AG or an SAP affiliate company. All rights reserved. 12
Technical Change ABAP code which must be checked / corrected Recommended solution
SAP HANA
architecture
Transparent DB tables:
- Relying on not guaranteed / implicit sorting of DB query
results
- (Rare problem) Analysis of technical DB index information using
function modules 'DB_EXISTS_INDEX, 'DD_INDEX_NAME
Recommendation:
Never rely on any implicit sorting - no robust code!
Always use ORDER BY or SORT BY to sort query result sets explicitly
Try to get rid of DB index analysis
Depooling/
Declustering
Pool/Cluster tables:
- Relying on not guaranteed / implicit sorting of DB query
results
- (Rare problem) Direct access to physical clusters / pools
Recommendation:
Never rely on any implicit sorting - no robust code!
Always use ORDER BY or SORT BY to sort query result sets explicitly
Get rid of direct access to physical clusters / pools
Prepare your custom code for SAP HANA Functional corrections for existing ABAP code Details and examples
Read Table BINARY SEARCH works only for a correctly sorted internal table.
But no explicit sorting of the query result is done
-> Error in code which may work by chance
because of DB Index usage
Correction
Add explicit sorting by adding ORDER BY to
the SELECT or by using an ABAP SORT
Example for ABAP code which
relies on sorted DB query
results
2013 SAP AG or an SAP affiliate company. All rights reserved. 13
Prepare your custom code for SAP HANA Functional corrections for existing ABAP code static checks I
For all main functional error categories we provide Code Inspector checks to find the issues easily
2013 SAP AG or an SAP affiliate company. All rights reserved. 14
Prepare your custom code for SAP HANA Functional corrections for existing ABAP code static checks II
Search problematic statementw/o ORDER BY check Preferred check to find code which relies on sorted DB content searches for statements like READ BINARY SEARCH, DELETE
ADJACENT DUPLICATES, accessing unsorted DB content works for transparent and pool/cluster DB tables low false positive ratio
Depooling/Declustering: Search forw/o ORDER BY check Searches for SELECT without ORDER BY but no
further analysis of the data flow is done
works only for pool/cluster DB tables (before and after depooling/declustering)
high false positive ratio
Recommendation
Run both checks for your custom code Concentrate on findings (priority 1 and 2) of the Search problematic
statementw/o ORDER BY check Treat findings of Depooling/Declustering: check with reduced priority
2013 SAP AG or an SAP affiliate company. All rights reserved. 15
Prepare your custom code for SAP HANA ABAP Test Cockpit Run your Code Inspector checks in a new tool
ABAP Test Cockpit (ATC) is a
framework for running static checks on
ABAP objects to find: functional,
usability, performance, security, bugs
ABAP Test Cockpit is based on Code
Inspector and adds new quality gates,
quality processes and better usability
2013 SAP AG or an SAP affiliate company. All rights reserved. 16
Prepare your custom code for SAP HANA ABAP Test Cockpit Quality process and Q gates
Development System
Quality System
Q-experts run mass checks and distribute the results
Developer run static / unit / scenario tests on their objects
Periodic check runs to validate the code of a development team
Q-Gate:
Check during
transport release
Q-Gate:
Mass check run and
consolidation test
Demo ATC + Static Checks
Exercise 1 Use ABAP Test Cockpit to find code that must be changed
2013 SAP AG or an SAP affiliate company. All rights reserved. 19
Summary - Prepare your custom code for SAP HANA ABAP Test Cockpit and static checks
In general existing ABAP code runs on SAP HANA as
before. Only DB specific ABAP code must be analyzed
New static Code Inspector checks are available which
help to find the code which must be analyzed
ABAP Test Cockpit (ATC) is the new standard tool for
static ABAP code checks
ATC can be used now to prepare the custom ABAP
code for HANA and to improve the general quality of the
code
ATC availability starts with NW 702 SP12 / NW 731 SP5.
In older releases the Code Inspector can be used
Optimize Custom Code for SAP HANA
SQL Monitor, Static Checks and SQL Performance Tuning Worklist
2013 SAP AG or an SAP affiliate company. All rights reserved. 21
Optimize Custom Code for SAP HANA Tooling
How can I find the ABAP code which shall be optimized or which has potential
for massive acceleration using code push down to SAP HANA
In general no changes are necessary if your SQL code follows the golden Open SQL rules
Use static checks to find SQL patterns that violate the golden Open SQL rules
Add runtime performance data from production to rank the findings and to find potential for
massive acceleration
2013 SAP AG or an SAP affiliate company. All rights reserved. 22
Optimize Custom Code for SAP HANA Classic golden SQL rules
2013 SAP AG or an SAP affiliate company. All rights reserved. 23
Optimize Custom Code for SAP HANA Shift in priorities of classic golden SQL rules for SAP HANA
Shift in priorities for SAP HANA
Avoid selecting large numbers of not
required columns
Prefer array operations for INSERT,
UPDATE und DELETE when changing
many records
Avoid nested SELECT loops
In most cases SAP HANA does not
require secondary indices
Keep unnecessary load away from the
database
Code pushdown for data-intensive
calculations to benefit from SAP HANA
2013 SAP AG or an SAP affiliate company. All rights reserved. 24
Optimize Custom Code for SAP HANA Classic Static Performance Checks
Most golden SQL rules are covered by static checks already
Gaps for Minimize amount/number of data transfer(s)
2013 SAP AG or an SAP affiliate company. All rights reserved. 25
Optimize Custom Code for SAP HANA New Static Performance Checks I
Improved and new static performance checks:
SELECT * - Used columns vs. selected columns Nested SELECT statements (across modularization units) SELECT + SELECT FOR ALL ENTRIES
which can be transformed into JOIN or SUBQUERY
SELECT * check
No field used pure existence check
Nested SQL check
SELECT in LOOP (across
modularization unit)
SELECT + SELECT FOR ALL ENTRIES
transform into JOIN or SUBQUERY
2013 SAP AG or an SAP affiliate company. All rights reserved. 26
Optimize Custom Code for SAP HANA New Static Performance Checks II
New checks close gaps for rules Minimize amount/number of data transfer(s)
Check appendix for availability of the new
checks.
NW 740 SP3
Demo ATC + Static Checks II
2013 SAP AG or an SAP affiliate company. All rights reserved. 28
Optimize Custom Code for SAP HANA Static Performance Checks Efficient analysis of the findings
NW 740 SP3
Shall I analyze and correct each and every nested SELECT or SELECT * ? This may destabilize code which is not even performance critical
In general static performance checks:
Have a higher false positive ratio as functional checks Provide mainly performance hints - not all findings are errors Should be combined with performance/runtime data to reduce
the false positive ratio
The findings of the following static performance
checks shall be analyzed like functional errors:
SELECT, UPDATE, DELETE without any WHERE Unsecure use of FOR ALL ENTRIES Table attribute checks
Check DB table settings (especially buffer characteristic)
2013 SAP AG or an SAP affiliate company. All rights reserved. 29
Custom Code Base
Optimize Custom Code for SAP HANA Static Performance Check Efficient analysis I
Covered by Static Checks
Concentrate on the findings
in performance hotspots
We need runtime data from
the productive system to
find the relevant code
Unused
Code
Dynamic
Code
Relevant
for performance
optimizations
Not relevant
for performance
optimizations
2013 SAP AG or an SAP affiliate company. All rights reserved. 30
Optimize Custom Code for SAP HANA Static Performance Check Efficient analysis II
1. Use Usage Procedure
Logging (UPL) to separate
not used (dead) code
VISIT ITM114: Real Software Utilization with Usage and
Procedure Logging
Use monitoring and trace
tools to measure the usage
of ABAP and SQL in your
productive system
3. Find the performance
hotspots with the SQL
Monitor
Dynamic
Code
Unused
Code
Not relevant
for performance
optimizations
Relevant
for performance
optimizations
Covered by monitoring tools
2. Use the standard
performance trace tools
(ST05, SAT, ) to analyze your core business
processes
2013 SAP AG or an SAP affiliate company. All rights reserved. 31
Example: A productive ERP System with 6000 concurrent users
Two weeks in this system means 50k different business processes 130k different ABAP SQL statements
(>15% in customer code) 13B SQL requests (~1B / day) 140B records (~10B / day) read or changed
Where to start an optimization ?
2013 SAP AG or an SAP affiliate company. All rights reserved. 32
New SQL Monitor allows to get performance data for each and every
OPEN SQL executed in production...
Answer questions like What are the most expensive and most
frequently executed SQLs?
Which SQL reads/writes millions of records?
What is the SQL profile of my business process VA01?
Total transparency of the SQL running in production!
Demo SQL Monitor
Exercise 2 Use SQL Monitor to analyze SQL performance
2013 SAP AG or an SAP affiliate company. All rights reserved. 35
Business process list ranked by total DB time
Summary - Optimize Custom Code for SAP HANA SQL Monitor DB performance profile of the business processes
SQL Monitor
Displays performance data on process level (report, transaction, ) Allows to drill down from process level to the single DB operations Can run in production with minimal performance overhead (
2013 SAP AG or an SAP affiliate company. All rights reserved. 36
Summary - Optimize Custom Code for SAP HANA SQL Monitor
SQL Monitor collects performance data for each and
every SQL executed in an ABAP application
SQL Monitor can run in a productive system without
disturbing business processes
SQL Monitor allows to link the monitored SQL to the
driving business process
SQL Monitor can be used in the old productive system before doing the HANA migration
SQL Monitor availability is starting with NW 700 (see
appendix for details)
2013 SAP AG or an SAP affiliate company. All rights reserved. 37
Optimize Custom Code for SAP HANA Static Performance Check Efficient analysis III
Covered by Static Checks
Processes covered by SQL
Monitor after a week / month
running in production.
Quarter-end or year-end
processes may not be
covered
Relevant for
performance
optimizations
Dynamic
Code
Unused
Code
Not relevant
for performance
optimizations
Combine SQL Monitor data
and Code Inspector / ATC
check data to rank the findings
and for complete coverage
Eliminated by UPL
2013 SAP AG or an SAP affiliate company. All rights reserved. 38
Optimize Custom Code for SAP HANA Guided performance optimization
New SQL monitor (SQLM)
Can run in production; also before migration Captures aggregated runtime data (number of executions,
database times, tables, transactions)
Runtime data
Correlate and optimize
Define context from business perspective (entry point, transaction, involved data)
Find code with best cost/benefit ratio Fix performance bugs and unexpected database
accesses
Find code which can be pushed down to SAP HANA (e.g. via a SQL script procedure)
SQL Performance Tuning Worklist (SWLT)
Improved / new code inspector checks, e.g.
Nested SELECT statements across modularization units Used columns vs. selected columns
Static code
analysis
2013 SAP AG or an SAP affiliate company. All rights reserved. 39
Optimize Custom Code for SAP HANA Guided performance optimization System view
Production System
Database
Development / Q- System
Database
SQL Monitor
ABAP Test Cockpit
SQL Performance Tuning Worklist
Download / RFC
Demo SQL Performance Tuning Worklist
Exercise 3 Use SQL Performance Tuning Worklist to combine results of various checks
2013 SAP AG or an SAP affiliate company. All rights reserved. 42
Tune your custom code Get ready for SAP HANA Summary Process view Tool usage
Use ABAP Test Cockpit for your general quality assurance (avoid
regressions)
Use SQL Monitor in the SAP HANA test system ( + SWLT in the
development system) to tune the top custom SQL statements of the
running test cases
Use ABAP Test Cockpit for your general quality assurance
Use SQL Monitor in the SAP HANA productive system ( + SWLT in
the development system) to iteratively tune the custom SQL
statements and to detect and realize HANA potential
Use ABAP Test Cockpit to correct potential functional issues in your
custom code (old system or sandbox system)
Use SQL Monitor in the old productive system ( + SWLT in the development system) to correct custom SQL issues / tune the top
custom SQL statements in your system
Eliminate unused custom code to reduce migration effort
Define your main business processes for testing and tuning
Evaluation in sandbox system
Plan SAP HANA
migration
Prepare SAP
HANA migration
SAP Business Suite
Any Database
Development / Test System
SAP HANA Database
Upgrade
Migrate
SAP HANA
migration
SAP Business Suite
Any Database
Production System
SAP HANA Database
Upgrade
Migrate
SAP Business Suite
Any Database
Sandbox System
SAP HANA Database
Upgrade
Migrate
2013 SAP AG or an SAP affiliate company. All rights reserved. 43
Tune your custom code Get ready for SAP HANA Short overview Realize SAP HANA potential - Code pushdown
AS ABAP
SAP HANA Database
Calculation
Calculation
Data to Code Code to Data
Code pushdown means delegating data intense calculations to the
database layer e.g. by using advanced Open SQL, advanced ABAP views
and SQL Script
VISIT CD263: ABAP on SAP HANA - Building an End-
to-End App from HANA via ABAP to SAP UI5
2013 SAP AG or an SAP affiliate company. All rights reserved. 44
Tune your custom code Get ready for SAP HANA Key takeaways
In general existing ABAP code runs on SAP HANA as
before. Only DB specific ABAP code must be analyzed
ABAP Test Cockpit can be used to find and adapt DB
specific ABAP custom code easily
In general the well known golden Open SQL rules are still
valid on SAP HANA - only some priorities have shifted
For effective SQL tuning and to find HANA potential in
existing ABAP code new monitoring tools like the SQL
Monitor are available
The preparation of your custom code can start now before the migration to SAP HANA
Q & A
2013 SAP AG or an SAP affiliate company. All rights reserved. 46
Further Information
SAP Education and Certification Opportunities
www.sap.com/education
Watch SAP TechEd Online
www.sapteched.com/online
SAP Public Web
ABAP Test Cockpit: http://scn.sap.com/docs/DOC-31773
Community ABAP4HANA: http://scn.sap.com/community/abap/hana
Best Practice Guide - Considerations for Custom ABAP Code During a Migration to SAP HANA: http://scn.sap.com/docs/DOC-46714
Central SAP Notes
1885926, ABAP SQL Monitor 1794297: Secondary Indexes for the business suite on HANA 1785057: Recommendations for migrating suite systems to SAP 1622681: DBSL hints for SAP HANA 1847431: SAP NetWeaver BW ABAP Routine Analyzer 1051576: Conversion of Single Code Page Systems to Unicode 1812713: Add-on compatibility of SAP NW AS ABAP 7.4 for Suite 1760306: SAP EhP6 for SAP ERP 6.0, version for SAP HANA 1.0 1855666: Suite on HANA : 3rd party Add-ons
Watch SAP TechEd Online
www.sapteched.com/online
2013 SAP AG or an SAP affiliate company. All rights reserved. 47
SAP TechEd Virtual Hands-on Workshops and SAP TechEd Online Continue your SAP TechEd education after the event!
SAP TechEd Virtual Hands-on Workshops
Access hands-on workshops post-event
Available January March 2014
Complementary with your SAP TechEd registration
SAP TechEd Online
Access replays of keynotes, Demo Jam, SAP TechEd LIVE interviews, select lecture sessions, and more!
View content only available online
http://saptechedhandson.sap.com/
http://sapteched.com/online
Feedback Please complete your session evaluation for CD262.
Thanks for attending this SAP TechEd session.
Appendix Availability "Guided performance optimization"
2013 SAP AG or an SAP affiliate company. All rights reserved. 50
Tools in the context of guided performance optimization Availability (1/4)
ABAP Test Cockpit
The ABAP Test Cockpit (ATC) is a tool for doing static and dynamic quality checking of ABAP code and associated repository objects.
SAP_BASIS
7.00
SAP_BASIS
7.01
SAP_BASIS
7.02
SAP_BASIS
7.10, 7.11, 7.20,
7.30
SAP_BASIS
7.31
SAP_BASIS
7.40
SAP_BASIS not planned not planned SP12 not planned SP5 SP0
SAP_BASIS
7.00
SAP_BASIS
7.01
SAP_BASIS
7.02
SAP_BASIS
7.10, 7.11, 7.20,
7.30
SAP_BASIS
7.31
SAP_BASIS
7.40
SAP_BASIS SP0 SP0 SP0 SP0 SP0
SP0
Code Inspector
The Code Inspector is a tool to check repository objects in terms of performance, security, syntax and compliance with naming conventions.
2013 SAP AG or an SAP affiliate company. All rights reserved. 51
Tools in the context of guided performance optimization Availability of new static Code Inspector checks (2/4)
Area Check title Availability (SAP_BASIS Version)
Functional / Robust
Code
Search problematic statements for result of SELECT/OPEN CURSOR without ORDER BY
740 SP3
740 SP2 via special transport(note 1875529)
731 SP9
702 SP14
Functional / Robust Depooling/Declustering: Search SELECT for Pool/Cluster-Tables w/o ORDER BY
(Priority/Significance of this check is reduced when the more sophisticated check Search problematic statements for result of SELECT/OPEN CURSOR without ORDER BY is used)
740 SP2
731 SP9
702 SP14
Functional / Robust
Code
Unsecure use of FOR ALL ENTRIES 740 SP2
731 SP5
702 SP12
701 SP14
700 SP29
Performance Search problematic SELECT * statements 740 SP2
731 SP9
702 SP14
Performance Search SELECT .. FOR ALL ENTRIES-clauses to be transformed 740 SP2
731 SP9
702 SP14
Performance Search DB Operations in loops across modularization units (reading and changing SQLs)
740 SP2:
Search SELECTs in loops across modularization units
Changing Database Accesses in Loops (no cross stack analysis !)
Old releases:
SELECTs in Loops (no cross stack analysis !)
Changing Database Accesses in Loops (no cross stack analysis !)
740 SP3
731 SP9
702 SP14
Performance Search SELECT statement with DELETE statement 740 SP2
731 SP9
702 SP14
2013 SAP AG or an SAP affiliate company. All rights reserved. 52
Tools in the context of guided performance optimization Availability (3/4)
SQL Monitor
The SQL Monitor is a monitoring tool for ABAP based SAP systems which allows to collect performance data of all executed SQL statements in a
productive environment. It exists in two flavours: one is delivered via SAP_BASIS, one via ST-PI plug-in. In release 7.02, 7.31 and 7.40 we
recommend to use the SQL monitor delivered via SAP_BASIS.
SQL Performance Tuning Worklist
The SQL Performance Tuning Worklist allows to combine static performance check results with relevant runtime data coming e.g. from a productive
system.
SAP_BASIS
7.00, Kernel
7.21 (PL>118)
SAP_BASIS
7.01, Kernel
7.21 (PL>118)
SAP_BASIS
7.02, Kernel
7.21 (PL>118)
SAP_BASIS
7.10, 7.11, 7.20,
7.30, Kernel
7.21 (PL>118)
SAP_BASIS
7.31, Kernel
7.21 (PL>118)
SAP_BASIS
7.40, Kernel
7.40
SAP_BASIS not planned not planned SAP_BASIS
SP14
not planned SAP_BASIS
SP9
SAP_BASIS
SP2
ST-PI ST-PI 2008_1_*
SP8
ST-PI 2008_1_*
SP8
ST-PI 2008_1_*
SP8
ST-PI 2008_1_*
SP8
ST-PI 2008_1_*
SP8
ST-PI 2008_1_*
SP8
SAP_BASIS
7.00
SAP_BASIS
7.01
SAP_BASIS
7.02
SAP_BASIS
7.10, 7.11, 7.20,
7.30
SAP_BASIS
7.31
SAP_BASIS
7.40
SAP_BASIS not planned not planned SP14 not planned SP9 SP2
2013 SAP AG or an SAP affiliate company. All rights reserved. 53
Tools in the context of guided performance optimization Availability (4/4)
Further remarks
Background information for the ABAP Test Cockpit can be found here: http://scn.sap.com/docs/DOC-32628
The current SAP Support Package Schedule can be found here: https://service.sap.com/~sapidb/011000358700000294692004E
When using the SQL Monitor delivered via ST-PI, in all releases < SAP_BASIS 7.40 OSS notes 1806015 and 1831460 must be applied
In release SAP_BASIS 7.40, SP2 OSS note 1834930 must be applied before using the SQL Monitor
2013 SAP AG or an SAP affiliate company. All rights reserved. 54
2013 SAP AG or an SAP affiliate company. All rights reserved.
No part of this publication may be reproduced or transmitted in any form or for any purpose without the express permission of SAP AG.
The information contained herein may be changed without prior notice.
Some software products marketed by SAP AG and its distributors contain proprietary software components of other software vendors.
National product specifications may vary.
These materials are provided by SAP AG and its affiliated companies ("SAP Group") for informational purposes only, without representation or warranty of any kind, and
SAP Group shall not be liable for errors or omissions with respect to the materials. The only warranties for SAP Group products and services are those that are set forth
in the express warranty statements accompanying such products and services, if any. Nothing herein should be construed as constituting an additional warranty.
SAP and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of SAP AG in Germany and
other countries.
Please see http://www.sap.com/corporate-en/legal/copyright/index.epx#trademark for additional trademark information and notices.