You are on page 1of 51

TEC 1238

Advanced Query Processing Techniques in


SAP Sybase
Peter J. Schneider
October 17, 2012
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.

2012 SAP AG. All rights reserved. 2


Agenda

Three new features in SAP Sybase Adaptive Server Enterprise (ASE) 15.7 ESD #2:
Hash-based update statistics
Reduce maintenance window and reduce tempdb usage
Shared query plans
Reduce memory footprint and improve performance
User-defined optimization policy
Improve performance

2012 SAP AG. All rights reserved. 3


Hash-based update statistics
Topics on hash-based update statistics in SAP Sybase ASE

Statistics in SAP Sybase ASE

Generating statistics

Update statistics commands

Update statistics examples

Hash-based update statistics performance

2012 SAP AG. All rights reserved. 5


Statistics in SAP Sybase ASE
What kind of statistics does SAP Sybase ASE use?

Table level statistics:


1. Total number of rows
2. Average row width
3. Clustering ratios

Column level statistics:


1. Average value width
2. Total number of unique values
3. Density of values
4. Histograms to track the distribution of values

2012 SAP AG. All rights reserved. 6


Statistics in SAP Sybase ASE
Example schema

create table A (a1 int, a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int)
go
declare @count int
select @count = 0
while (@count < 1000)
begin
Insert into A values (@count % 100, @count, @count, @count, @count, @count, @count, @count, @count)
select @count = @count + 1
end
go
create index a_idx1 on A(a1, a2, a6, a7)
go
create index a_idx2 on A(a9)
go

2012 SAP AG. All rights reserved. 7


Statistics in SAP Sybase ASE
Density

An approximation of the uniqueness of column values


Density = (sum of the squares of the counts of each unique column value)/(number of rows squared)

insert into A values (@count % 100, @count, @count, @count, @count, @count, @count, @count, @count)

For table A, column a1: 100 unique values, each occurring 10 times
Density = ((10 * 10) + (10 * 10) + )/(1000 * 1000) = 10000/1000000 = 0.01

For table A, column a2: 1000 unique values


Density = ((1 * 1) + (1 * 1) + )/(1000 * 1000) = 1000/1000000 = 0.001

Need the counts of the unique column values

2012 SAP AG. All rights reserved. 8


Statistics in SAP Sybase ASE
Histogram

A representation of the distribution of the values of a column consisting of range intervals and
weights
The number of range intervals can be given in the UPDATE STATISTICS command default is 20
update statistics A (a1) using 11 values
To create a histogram:
Sort the column values in ascending order
Calculate the number of rows to put in each range cell
Divide the total number of rows in the table by the number of ranges (values - 1) (i.e. 1000/10 = 100)
Determine the range cell boundary values by reading the rows and setting a boundary every 100 values
(value, count) pairs
o First boundary value is -1
o (0, 10), (1, 10), (2, 10), (3, 10) (9,10) = 100 rows, so boundary value is 9
o (10, 10), (11, 10), (12, 10) (19, 10) = 100 rows, so boundary value is 19

2012 SAP AG. All rights reserved. 9


Statistics in SAP Sybase ASE
Histogram

Histogram for A (a1): Lower Bound Count Upper bound


-1 100 9
9 100 19
19 100 29
29 100 39
39 100 49
49 100 59
59 100 69
69 100 79
79 100 89
89 100 99

Need the ordered column values


Can use unique counts if they are ordered on the column values

2012 SAP AG. All rights reserved. 10


Statistics in SAP Sybase ASE
How does SAP Sybase ASE use statistics?

The SAP Sybase ASE query optimizer uses statistics:


It evaluates the cost of executing different query plans and chooses the lowest cost plan to execute.
It uses statistics to calculate the costs of various access paths.
Densities to estimate row counts that qualify simple equality predicates
Histograms to estimate row counts that qualify range predicates and join predicates

Example: select a1, a9 from A where a1 = 5 and a9 = 9


Table A has two indexes: a_idx1(a1, a2, a6, a7) and a_idx2(a9)
Statistics (from the densities for a1 and a9):
a1 has a density of 0.01, so (0.01 * 1000 rows) indicates 10 rows have a value of 5
a9 has a density of 0.001, so (0.001 * 1000 rows) indicates that 1 row has a value of 9
The optimizer chooses the query plan:
scan index a_idx2 to find the rows of A with a9 = 9 (Only one row qualifies)
read that row and evaluate whether a1 = 5

2012 SAP AG. All rights reserved. 11


Generating statistics
Algorithms for generating statistics

Density and unique-value count: grouping


select a1, count(a1) from A group by a1
Number of rows in result set is the unique-value count
(Sum of (count(a1) * (count(a1))/(sum(count(a1)) * sum(count(a1)) is the density
Histogram: grouping plus ordering
select a1, count(a1) from A group by a1 order by a1
Read the result rows, adding up the count(a1) values until the range-cell count has been reached, then set the
boundary
Continue reading the result rows and start adding again until the next boundary is reached.
The result set of this query can be used to generate density and unique-value counts, too
Two algorithms for grouping
Sort-based (Traditional)
Hash-based (New)

2012 SAP AG. All rights reserved. 12


Generating statistics
Sort-based vs. hash-based processing

Update statistics A1 (a1) Update statistics A1 (a1) with hashing

Read 1000 column values Read 1000 column values


Sort 1000 rows Aggregate to 100 rows
Sort 100 aggregate rows
Read 1000 rows and aggregate to 100 rows Calculate the density using 100 rows
Calculate the density using 100 rows Create the histogram using 100 rows
Create the histogram using 100 rows

2012 SAP AG. All rights reserved. 13


Generating statistics
How does SAP Sybase ASE update statistics ?

SQL Statements are used to trigger statistics gathering:


UPDATE STATISTICS command
Executed to explicitly update statistics
CREATE INDEX command
Executed to create an index implicitly updates statistics

As data in a table changes over time, the statistics can become inaccurate.
The SAP Sybase ASE optimizer can miscalculate the costs of various access paths and choose the
wrong plan.

UPDATE STATISTICS must be executed regularly to help the optimizer choose the best plan.
select datachange(A, A, a1)

2012 SAP AG. All rights reserved. 14


Update statistics
Three update statistics commands

Update statistics
Updates histogram and density for the first column in each index
Uses the available ordering of the index rows to do sort based statistics generation on first column
Updates multi-column densities for prefixes containing the remaining columns in each index
Updates table and index level statistics (row size, cluster ratios)

Update index statistics


Update statistics plus:
Updates histogram and density for all non-leading columns in each index
Must generate unique counts and ordering on each column of each index

Update all statistics


Update index statistics plus:
Updates histogram and density for all columns of the table that are not in any index
Must generate unique counts and ordering on each column of the table that is not in an index
2012 SAP AG. All rights reserved. 15
Update statistics
Update statistics syntax

update index statistics


table_name [ [partition data_partition_name] | [ [index_name [partition index_partition_name]]
[using step values] [with consumers = consumers] [, sampling=N [percent]]
[, no_hashing | partial_hashing | hashing]
[, max_resource_granularity = N [percent]]
[, histogram_tuning_factor = int ]
[, print_progress = int ]
update statistics
table_name [[partition data_partition_name]
[ (col1, col2, ) | (col1), (col2), ] | [ [index_name [partition index_partition_name]]]
[using step values] [with consumers = consumers] [, sampling=N [percent]]
[, no_hashing | partial_hashing | hashing]
[, max_resource_granularity = N [percent]]
[, histogram_tuning_factor = int ]
[, print_progress = int ]
2012 SAP AG. All rights reserved. 16
Update statistics
Hashing options

no_hashing
Use sort-based stats

partial_hashing
Use hash-based stats for low unique count domains (threshold defined internally as <= 65535 )
Fall back to sort-based stats if unique values exceed threshold
Will use a subsequent index/table scan to do sorting.

hashing
Hash-based stats with low domain AND high domain hashing.
When unique count exceeds low domain threshold, switch to high domain hashing algorithm internally.
Generates and merges intermediate statistics
Unique counts and densities could become less accurate histograms OK.

2012 SAP AG. All rights reserved. 17


Update statistics
Resource granularity

max_resource_granularity is an SAP Sybase ASE configuration setting (sp_configure)


Sets an upper limit to the percentage of SAP Sybase ASE total resources that a single session can
acquire.
Default value is 10%
Overridden by the max_resource_granularity = N clause for update statistics execution

Hash-based update statistics uses buffer cache pages of tempdb


When buffer cache usage reaches the limit set by max_resource_granularity:
A victim column will be picked to recycle its memory for the remaining columns
Victim column(s) statistics will be gathered by hashing in a subsequent index/table scan
If a scan cannot complete hash-based stats on at least one column, then sort-based statistics will be used

Use with max_resource_granularity clause to increase available buffer cache for big tables

2012 SAP AG. All rights reserved. 18


Update statistics
Sort-based processing example

update index statistics A a_idx1 with no_hashing, print_progress = 1

Update Statistics STARTED.


Update Statistics index scan started on index 'a_idx1'.
Update Statistics table scan started on table 'A' for summary statistics.
Update Statistics table scan started on table 'A'.
...Sorting started for column 'a2' (column id = 2).
Update Statistics table scan started on table 'A'.
...Sorting started for column 'a6' (column id = 6).
Update Statistics table scan started on table 'A'.
...Sorting started for column 'a7' (column id = 7).
Update Statistics FINISHED.

2012 SAP AG. All rights reserved. 19


Update statistics
Hash-based processing example

update index statistics A a_idx1 with hashing, print_progress = 1

Update Statistics STARTED.


Update Statistics index scan started on index 'a_idx1'.
...It is using existing scan to hash column 'a2' (column id = 2).
...It is using existing scan to hash column 'a6' (column id = 6).
...It is using existing scan to hash column 'a7' (column id = 7).
Update Statistics table scan started on table 'A' for summary statistics.
Update Statistics FINISHED

2012 SAP AG. All rights reserved. 20


Hash-based update statistics performance
Business suite example

Table LTAP, indexes:


LTAP~0 (MANDT ASC, LGNUM ASC, TANUM ASC, TAPOS ASC)
LTAP~M (MANDT ASC, LGNUM ASC, PQUIT ASC, MATNR ASC)
LTAP~V (MANDT ASC, LGNUM ASC, PQUIT ASC, VLTYP ASC, VLPLA ASC)

update index statistics SAPSR3.LTAP with no_hashing (Sorting)


update index statistics SAPSR3.LTAP with hashing (Hashing)

Table Row count Column count Index count Sorting Hashing Ratio (S/H)
LTAP 85,973,877 160 3 84.19 16.18 5.2
IDOCREL 692,211,695 6 5 351.26 105.82 3.3

2012 SAP AG. All rights reserved. 21


Hash-based update statistics
Limitations

Cannot use parallel execution


update statistics A (a1) with hashing, consumers = 3

Cannot use sampling-based statistics


update statistics A (a1) with hashing, sampling = 10

May get less accurate statistics if the number of unique column values exceeds 65535
Intermediate density and unique-value counts are combined to generate the final statistics
Can avoid this by using partial hashing instead of hashing
update statistics A (a1) with partial_hashing

Cannot get multi-columns densities


Update statistics A (a1, a2, a3) with hashing

2012 SAP AG. All rights reserved. 22


Shared query plans
Topics on query plan sharing

What is a query plan?

How is a query plan created?

Configuring query plan sharing in SAP Sybase


ASE.

Query plan sharing numbers.

2012 SAP AG. All rights reserved. 24


What is a query plan?

Tells the SAP Sybase ASE query execution engine how to generate the result set of a SQL
statement (query).

Example: select col1 from tab1


1. Get read locks on tab1
2. Open an access path to table, tab1
3. Read the rows of tab1, one at a time.
4. For each row, extract column col1
5. Format each value of col1 and send to client
6. Close access path to tab1
7. Release locks

2012 SAP AG. All rights reserved. 25


What is a query plan?
Components of a query plan

A query plan is made up the three components:


1. Instructions
2. Meta data
3. Temporary storage

Example:
1. Get read locks on tab1
Instruction: Get lock on table
Meta data: Read lock, table tab1
4. For each row, extract column col1
Temporary storage: Memory to write the value of col1 into

2012 SAP AG. All rights reserved. 26


What is a query plan?
Meta data

What objects to access


Tables
Columns

Which tables to read from and which to write to

What types of locks to get on each table

What buffer size is needed to build rows in


Insert/update queries only

Metadata is stored in memory that is only read, not written to during execution.

2012 SAP AG. All rights reserved. 27


What is a query plan
Instructions

What operations to perform and in what order


select col1 from tab1
1. Get locks on object
2. Open an access path to object
3. Read the rows of object, one at a time.
4. For each row, extract the required column(s)
5. Format each column value and send to client
6. Close access path to object
7. Release locks

Instructions are read-only

2012 SAP AG. All rights reserved. 28


What is a query plan?
Temporary storage

Memory that is used to:


1. Hold value of col1 from current row of tab1
2. Build rows for insert/update
3. Build hash tables for hash-based operations
4. Manage sorting of rows.
5. Manage work tables.
6. Store rows for in-memory caches

Memory that is written to during execution.

Generally, the largest part of a query plan.

2012 SAP AG. All rights reserved. 29


What is a query plan?
Summary

A query plan is made up of two read-only parts:


1. Meta data
2. Instructions

A query plan also has one writable part:


1. Memory for temporary storage

Because of the writable part of the query plan, each query plan can only be executed by a
single SAP Sybase ASE process (connection) at a time.
If two connections execute the same query at the same time, each must create its own query plan.

Only read-only parts of a query plan can be shared.

2012 SAP AG. All rights reserved. 30


How is a query plan created?

Query plans can be created in one of two ways:


1. Compilation
Traditional way that SAP Sybase ASE creates query plans
2. Cloning
New way to create query plans, starting in SAP Sybase ASE 15.7 ESD #2

2012 SAP AG. All rights reserved. 31


How is a query plan created?
Compilation

SAP Sybase ASE query processing (QP) layer compiles query plans:
1. Parse SQL text into internal structures (query tree)
2. Resolve data base object references in the query tree
3. Preprocess/transform the query tree
4. Optimize
Permute through possible access paths, costing each one to find the query plan with the lowest estimated
cost.
5. Create the query plan chosen by the optimizer
6. Execute the query plan
7. Release the query plan to procedure cache for re-use

Compilation produces a PRIMARY query plan


The query plan is a complete, standalone plan, independent of all other plans.

2012 SAP AG. All rights reserved. 32


How is a query plan created?
Cloning

Starting with SAP Sybase ASE 15.7 ESD #2, query plans can be created by cloning.
Thread #1 is executing a query plan for the same SQL statement that thread #2 will execute:
Thread #2 will clone the plan that is in use by thread #1 by:
1. Allocating memory to hold a new query plan
2. Allocating memory corresponding to the writable parts of the original plan in the new query plan memory
3. Copying some of the meta data from the original plan into the new plan memory
4. Setting memory pointers into the original plans instructions and remaining meta data
5. Marking the new plan as a shared plan.

Cloning produces a SHARED query plan


The plan is a partial plan that includes pointers to some elements of a PRIMARY plan.

2012 SAP AG. All rights reserved. 33


How is a query plan created?
Plan properties

PRIMARY plan
1. A compiled query plan and is a complete, standalone query plan.
2. Can be used as a source plan to clone a SHARED plan.
3. Is pinned in the procedure cache as long as any SHARED plan points to it.
4. Has a larger memory footprint than a SHARED plan.

SHARED plan
1. A cloned plan that is a partial plan that includes pointers to some elements of a PRIMARY plan.
2. Cannot be used as a source to clone another SHARED plan.
3. Is not pinned in the procedure cache when it is not in use.
4. Has a smaller memory footprint than a PRIMARY plan.

2012 SAP AG. All rights reserved. 34


Configuring query plan sharing in SAP Sybase ASE

Query plan sharing is disabled by default.

To enable query plan sharing:


1. sp_configure command
1. sp_configure enable plan sharing, [1 | 0]
1. 1 enables plan sharing
2. 0 disables plan sharing
2. sp_configure enable functionality group, 1
1. 1 enables query plan sharing if setting of enable plan sharing is DEFAULT (or 1)

2012 SAP AG. All rights reserved. 35


Query plan sharing numbers

Example query from Business Suite SD Benchmark:

SELECT * FROM "SECURITY_CONTEXT" WHERE "EOL_TIMESTAMP" > ? AND


"EOL_TIMESTAMP" < ? /* R3:sign:17673 T:SECURITY_CONTEXT M:900 */ /*10*/

Plan Size (page Query Compilation


count) time
Without Plan 14 5053s
Sharing
Plan Sharing 10 238s

28% in resource 95% reduction in


reduction compilation time

2012 SAP AG. All rights reserved. 36


User-defined optimization goals
Topics on user-defined optimization goals

What is an optimization goal?

Why is an optimization goal needed?

Usage of a user-defined optimization goals

Useful facts about user-defined optimization goals

2012 SAP AG. All rights reserved. 38


What is an optimization goal?

An optimization goal is a collection of access paths and optimizer costing algorithms that are
used to control the SAP Sybase ASE optimizer
It lists the access paths/algorithms that the optimizer may consider when searching for a query plan.
It lists which of the code changes that may influence optimizer costing are enabled or disabled.
Both access paths and code changes are called optcriteria.

Optimization goals have names


SAP Sybase ASE is shipped with 3 system optimization goals:
allrows_oltp optimized for OLTP workloads
allrows_mix allrows_oltp plus extra algorithms for light DSS workloads
allrows_dss allrows_mix plus extra algorithms for DSS workloads

2012 SAP AG. All rights reserved. 39


What is an optimization goal?

System optimization goals - summarized


Access Path allrows_oltp allrows_mix allrows_dss set <name> 0/1
Partition Scans X X X
Nary Nested Loop X X X
Merge Join X X merge_join
Hash Join X hash_join
Hash Distinct X X X distinct_hashing
Group Sorted X X X group_sorted
Group Hashing X X X group_hashing
Hash union X X X hash_union_distinct
Merge Union X X X merge_union
Merge Union All X X X merge_union_all
Parallel Plans X X parallel_query
Bushy Tree Plans X bushy_space_search
Eager Aggregation X advanced_aggregation

2012 SAP AG. All rights reserved. 40


What is an optimization goal?

Optimizer costing code evolves from one SAP Sybase ASE release to the next
Costing bug fixes
Costing enhancements
Each bug fix or enhancement to the optimizers costing algorithms is called an optcriteria.
Each optcriteria is given a name, i.e. cr421607
When optcriteria are introduced in an SAP Sybase ASE ESD release, they are off by default
Each optcriteria can be turned on or off using a set command
set cr421607 on
The collection of all of the optcriteria for an ESD release is called an optlevel
set plan optlevel ase157esd1
set plan optlevel ase_current enables all optcriteria up to and including the current ESD release

2012 SAP AG. All rights reserved. 41


Why is an optimization goal needed?

The more choices the optimizer has to cost, the longer it takes to find a plan.
Allrows_oltp has the fewest number of enabled access paths
The optimizer will cost the possible query plans more quickly than the other optimizer goals.
The optimizer has fewer plans to choose from and so has a smaller chance of picking the wrong plan.
If the SAP Sybase ASE installation is used for an OLTP workload, there may be little benefit to considering the
extra plans.

Limiting costing algorithms may provide performance stability on upgrade


Optimizer costing code evolves from one SAP Sybase ASE release to the next
By disabling the optimizer costing changes in a newer SAP Sybase ASE release, the costing will not
change upon upgrade, resulting in performance stability.

Optimization goals are used to customize the SAP Sybase ASE optimizer to fit the application.

2012 SAP AG. All rights reserved. 42


Usage of user-defined optimization goals
sp_optgoal

sp_optgoal
New system stored procedure to administer user optimization goals.
sp_optgoal [goal_name], [action]
[goal-name]
User-defined name
Limited to 12 characters
[action]
show - displays the definition of [goal-name]
save creates a new goal or modifies an existing goal called [goal_name]
delete deletes [goal_name]
If [goal-name] is not given, sp_optgoal displays names of all user-defined optimization goals

2012 SAP AG. All rights reserved. 43


Usage of user-defined optimization goals
Creating a user-defined optimization goal - example

First set/unset the required optcriteria, then use sp_optgoal:


set plan optlevel ase157esd1
go
set plan optgoal allrows_oltp
go
set hash_joins 1
go
set cr487450 0
go
sp_optgoal my_dss, save
go

2012 SAP AG. All rights reserved. 44


Usage of user-defined optimization goals
Displaying an optgoal - example

1> sp_optgoal my_dss, 'show'


2> go
name
------------------------------
distinct_sorted
distinct_sorting
group_sorted
group_hashing
...
conserve_tempdb_space: keep estimated tempdb below resource granularity
cr559034: avoid preferring non-covering over covered index scans
allow_wide_top_sort: allow max row size to be exceeded for top sorts
cr562947: OPTLEVEL EXCEPTION SEE CR - allow cursor table scans
...

2012 SAP AG. All rights reserved. 45


Usage of user-defined optimization goals
Enabling optgoals

SAP Sybase ASE wide configuration


sp_configure optimization goal, 1, my_dss
Edit sybase.cfg
optimization goal = my_dss

Within the current session set command


set plan optgoal my_dss

For a single query abstract query plan


Select from PLAN (use optgoal my_dss)

Use global variable, @@optgoal to find out which optimization goal is currently enabled

2012 SAP AG. All rights reserved. 46


Usage of user-defined optimization goals
Enabling optgoals - example

set plan optgoal my_dss


go
select @@optgoal
go

------------------------------------------------------------
my_dss

(1 row affected)

2012 SAP AG. All rights reserved. 47


Useful facts about user-defined optimization goals

User-defined optimization goals are not migrated with a database dump


Goal descriptions are stored in master..sysattributes

SQL Statement Cache is sensitive to optimizer goal settings


When an optimizer goal definition is changed, query plans for cached statement using the goal are recompiled.
The same statement, run under different goals, will have separate entries for each goal.

User-created stored procedures are insensitive to optimization goal changes


Once a query plan has been created using a given goal definition, it will not be recompiled when the goal
changes.

2012 SAP AG. All rights reserved. 48


Further Information

SAP Public Web


SAP Sybase ASE 15.7 ESD #2 Reference Manual
SAP Sybase ASE 15.7 ESD #2 New Features Guide
http://sybooks.sybase.com/sybooks/sybooks.xhtml

Watch SAP TechEd Online


www.sapteched.com/online

2012 SAP AG. All rights reserved. 49


Feedback
Please complete your session evaluation for TEC 1238.

Thanks for attending this SAP TechEd session.


2012 SAP AG. All rights reserved.

No part of this publication may be reproduced or transmitted in any form or for any purpose without the express Google App Engine, Google Apps, Google Checkout, Google Data API, Google Maps, Google Mobile Ads,
permission of SAP AG. The information contained herein may be changed without prior notice. Google Mobile Updater, Google Mobile, Google Store, Google Sync, Google Updater, Google Voice,
Google Mail, Gmail, YouTube, Dalvik and Android are trademarks or registered trademarks of Google Inc.
Some software products marketed by SAP AG and its distributors contain proprietary software components of
other software vendors. INTERMEC is a registered trademark of Intermec Technologies Corporation.
Microsoft, Windows, Excel, Outlook, PowerPoint, Silverlight, and Visual Studio are registered trademarks of Wi-Fi is a registered trademark of Wi-Fi Alliance.
Microsoft Corporation.
Bluetooth is a registered trademark of Bluetooth SIG Inc.
IBM, DB2, DB2 Universal Database, System i, System i5, System p, System p5, System x, System z, System
Motorola is a registered trademark of Motorola Trademark Holdings LLC.
z10, z10, z/VM, z/OS, OS/390, zEnterprise, PowerVM, Power Architecture, Power Systems, POWER7,
POWER6+, POWER6, POWER, PowerHA, pureScale, PowerPC, BladeCenter, System Storage, Storwize, Computop is a registered trademark of Computop Wirtschaftsinformatik GmbH.
XIV, GPFS, HACMP, RETAIN, DB2 Connect, RACF, Redbooks, OS/2, AIX, Intelligent Miner, WebSphere,
Tivoli, Informix, and Smarter Planet are trademarks or registered trademarks of IBM Corporation. SAP, R/3, SAP NetWeaver, Duet, PartnerEdge, ByDesign, SAP BusinessObjects Explorer, StreamWork,
SAP HANA, and other SAP products and services mentioned herein as well as their respective logos are
Linux is the registered trademark of Linus Torvalds in the United States and other countries. trademarks or registered trademarks of SAP AG in Germany and other countries.
Adobe, the Adobe logo, Acrobat, PostScript, and Reader are trademarks or registered trademarks of Adobe Business Objects and the Business Objects logo, BusinessObjects, Crystal Reports, Crystal Decisions, Web
Systems Incorporated in the United States and other countries. Intelligence, Xcelsius, and other Business Objects products and services mentioned herein as well as their
respective logos are trademarks or registered trademarks of Business Objects Software Ltd. Business Objects
Oracle and Java are registered trademarks of Oracle and its affiliates.
is an SAP company.
UNIX, X/Open, OSF/1, and Motif are registered trademarks of the Open Group.
Sybase and Adaptive Server, iAnywhere, Sybase 365, SQL Anywhere, and other Sybase products and services
Citrix, ICA, Program Neighborhood, MetaFrame, WinFrame, VideoFrame, and MultiWin are trademarks or mentioned herein as well as their respective logos are trademarks or registered trademarks of Sybase Inc.
registered trademarks of Citrix Systems Inc. Sybase is an SAP company.
HTML, XML, XHTML, and W3C are trademarks or registered trademarks of W3C, World Wide Web Crossgate, m@gic EDDY, B2B 360, and B2B 360 Services are registered trademarks of Crossgate AG
Consortium, Massachusetts Institute of Technology. in Germany and other countries. Crossgate is an SAP company.
Apple, App Store, iBooks, iPad, iPhone, iPhoto, iPod, iTunes, Multi-Touch, Objective-C, Retina, Safari, Siri, All other product and service names mentioned are the trademarks of their respective companies. Data
and Xcode are trademarks or registered trademarks of Apple Inc. contained in this document serves informational purposes only. National product specifications may vary.
IOS is a registered trademark of Cisco Systems Inc. The information in this document is proprietary to SAP. No part of this document may be reproduced, copied,
or transmitted in any form or for any purpose without the express prior written permission of SAP AG.
RIM, BlackBerry, BBM, BlackBerry Curve, BlackBerry Bold, BlackBerry Pearl, BlackBerry Torch, BlackBerry
Storm, BlackBerry Storm2, BlackBerry PlayBook, and BlackBerry App World are trademarks or registered
trademarks of Research in Motion Limited.

2012 SAP AG. All rights reserved. 51

You might also like