IICS July2024 DataIntegrationPerformanceTuning en
IICS July2024 DataIntegrationPerformanceTuning en
July 2024
This software and documentation are provided only under a separate license agreement containing restrictions on use and disclosure. No part of this document may be
reproduced or transmitted in any form, by any means (electronic, photocopying, recording or otherwise) without prior consent of Informatica LLC.
U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial
computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such,
the use, duplication, disclosure, modification, and adaptation is subject to the restrictions and license terms set forth in the applicable Government contract, and, to the
extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License.
Informatica, Informatica Cloud, Informatica Intelligent Cloud Services, PowerCenter, PowerExchange, and the Informatica logo are trademarks or registered trademarks
of Informatica LLC in the United States and many jurisdictions throughout the world. A current list of Informatica trademarks is available on the web at https://
www.informatica.com/trademarks.html. Other company and product names may be trade names or trademarks of their respective owners.
Portions of this software and/or documentation are subject to copyright held by third parties. Required third party notices are included with the product.
The information in this documentation is subject to change without notice. If you find any problems in this documentation, report them to us at
[email protected].
Informatica products are warranted according to the terms and conditions of the agreements under which they are provided. INFORMATICA PROVIDES THE
INFORMATION IN THIS DOCUMENT "AS IS" WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING WITHOUT ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ANY WARRANTY OR CONDITION OF NON-INFRINGEMENT.
Table of Contents 3
Optimizing expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Factoring out common logic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Minimizing aggregate function calls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Replacing common expressions with local variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Choosing numeric instead of string operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Choosing DECODE instead of LOOKUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Using operators instead of functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Optimizing IIF functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Optimizing window functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Evaluating expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Optimizing Aggregator transformations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Grouping by simple columns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Using sorted input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Filtering data before you aggregate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Limiting connected fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Optimizing Hierarchy Processor transformations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Optimizing Joiner transformations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Optimizing Lookup transformations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Caching lookup tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Optimizing the lookup condition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Filtering lookup rows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Indexing the lookup table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Optimizing multiple lookups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Optimizing Machine Learning transformations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Optimizing Normalizer transformations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Optimizing Router transformations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Optimizing Sequence Generator transformations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Optimizing Sorter transformations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Allocating memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Specifying a work directory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4 Table of Contents
Optimizing master nodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Optimizing worker nodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Optimizing instance types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Using GPU instances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Using Graviton instances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Using AMD chipsets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Table of Contents 5
Preface
Use Data Integration performance tuning to learn how to optimize Data Integration mapping performance.
Informatica Resources
Informatica provides you with a range of product resources through the Informatica Network and other online
portals. Use the resources to get the most from your Informatica products and solutions and to learn from
other Informatica users and subject matter experts.
Informatica Documentation
Use the Informatica Documentation Portal to explore an extensive library of documentation for current and
recent product releases. To explore the Documentation Portal, visit https://docs.informatica.com.
If you have questions, comments, or ideas about the product documentation, contact the Informatica
Documentation team at [email protected].
https://network.informatica.com/community/informatica-network/products/cloud-integration
Developers can learn more and share tips at the Cloud Developer community:
https://network.informatica.com/community/informatica-network/products/cloud-integration/cloud-
developers
https://marketplace.informatica.com/
6
Data Integration connector documentation
You can access documentation for Data Integration Connectors at the Documentation Portal. To explore the
Documentation Portal, visit https://docs.informatica.com.
To search the Knowledge Base, visit https://search.informatica.com. If you have questions, comments, or
ideas about the Knowledge Base, contact the Informatica Knowledge Base team at
[email protected].
Subscribe to the Informatica Intelligent Cloud Services Trust Center to receive upgrade, maintenance, and
incident notifications. The Informatica Intelligent Cloud Services Status page displays the production status
of all the Informatica cloud products. All maintenance updates are posted to this page, and during an outage,
it will have the most current information. To ensure you are notified of updates and outages, you can
subscribe to receive updates for a single component or all Informatica Intelligent Cloud Services
components. Subscribing to all components is the best way to be certain you never miss an update.
To subscribe, on the Informatica Intelligent Cloud Services Status page, click SUBSCRIBE TO UPDATES. You
can choose to receive notifications sent as emails, SMS text messages, webhooks, RSS feeds, or any
combination of the four.
To find online support resources on the Informatica Network, click Contact Support in the Informatica
Intelligent Cloud Services Help menu to go to the Cloud Support page. The Cloud Support page includes
system status information and community discussions. Log in to Informatica Network and click Need Help to
find additional resources and to contact Informatica Global Customer Support through email.
The telephone numbers for Informatica Global Customer Support are available from the Informatica web site
at https://www.informatica.com/services-and-training/support-services/contact-us.html.
Preface 7
Chapter 1
To tune the performance of a mapping, first identify a performance bottleneck, eliminate it, and then identify
the next performance bottleneck until you are satisfied with the performance.
Determining the best way to improve performance is an iterative process. Change one variable at a time, and
time the mapping both before and after the change. If the mapping performance doesn't improve, you might
want to return to the original configuration.
Best practices
Follow best practices to optimize performance.
If the Secure Agent and the components are deployed on the same cloud environment without on-premise
components, put them on the same VPC/subnet. The availability zones should also be in the same region.
8
The following image shows the Informatica Intelligent Cloud Services Secure Agent and the components that
it interacts with:
Be sure the machine that the Secure Agent is installed on meets the following requirements:
Best practices 9
Secure Agent machine sizing requirements
Consider Secure Agent machine memory requirements for optimal performance.
A typical cloud data lake to cloud data warehouse mapping might require up to 3 CPU cores and 1 GB of JVM
heap memory for a data size of approximately 7.5 GB. The default value for JVM heap memory is 64 MB.
Additional DTM buffer block sizing and buffer pool sizing will increase memory footprint.
The following graph illustrates the physical memory (resident memory) usage for a flat file to cloud data
warehouse passthrough mapping as it relates to the number of partitions. The default buffer block size is set
to 100 MB and the JVM heap memory is set to 1 GB.
Adding partitions to a cloud data lake to cloud data warehouse mapping linearly increases the requirement
for CPU cores. The following graph illustrates the CPU consumption in cores for a flat file to cloud data
warehouse passthrough mapping, with an increasing number of partitions.
To improve performance, configure the maxDTMProcesses custom property and the JVM options.
At a minimum, the Secure Agent requires 4 CPUs, 16 GB of memory, and 100 GB of disk space. For optimal
processing, use an SSD.
Number of concurrent Spark tasks CPU and memory JVM heap size
The JVM heap size is set to 2 GB by default. Increase the heap size to avoid out of memory errors.
maxDTMProcesses property
Set the maxDTMProcesses custom property to improve performance.
By default, a Secure Agent can schedule two mapping tasks for execution. If there are more than two tasks,
additional tasks are queued and then scheduled for execution when a slot becomes available. This can cause
the Secure Agent machine's capacity to be underutilized.
To achieve better utilization of the CPU capacity of the Secure Agent machine and achieve a higher degree of
concurrency, you can set the maxDTMProcesses custom property for the Data Integration Server to the
number of parallel tasks. For example, setting this property to 16 allows 16 tasks to run simultaneously.
The following image shows configuration for the maxDTMProcesses custom property on the agent details
page in Administrator:
The recommended maxDTMProcesses value varies based on the connection types of the jobs that the agent
runs:
• If the jobs use file-based or ODBC connections, use the following calculation: 0.75 times number of
logical CPUs
For example, if there are 24 logical CPUs on the Secure Agent machine, set the value to 18.
• If the jobs use cloud data lake or cloud data warehouse connectors, use the following calculation: 0.33
times number logical CPUs
For example, if there are 24 logical CPUs on the Secure Agent machine, set the value to 8.
When you set the maxDTMProcesses custom property, note the following guidelines:
• Setting the property to a high value can help increase parallelism for task execution, but it can also cause
performance bottlenecks in task execution time or increase job dispatch latency for mapping tasks.
• Setting the property to a lower value can lead to mapping jobs waiting for previous jobs to complete to
acquire a slot.
• When you set the maxDTMProcesses property, don't exceed the terms of your license agreement. For
example, if your organization is licensed for 3 Secure Agents and can run each agent on up to 4 CPUs,
don't set this property to a value greater than 12.
Use these guidelines as a starting point and set the correct value iteratively.
For more information about setting agent properties, see Runtime Environments.
Best practices 11
INFA_MEMORY and JVM options
You can configure the INFA_MEMORY property and JVM options to achieve optimal performance and avoid
Java heap and memory-related errors. Define these properties on the agent details page in Administrator.
You can configure the INFA_MEMORY and JVM options using the following formats for values:
Format Description
-Xms**m The initial amount of memory allocated to the JVM when the Java process starts.
Since this is the initial value, the Xms value can be small, for example, 64m or 128m. The
Java process will allocate more space as required.
-Xmx****m The maximum amount of memory that the JVM can allocate as heap. After the Java
process starts, it will continue to allocate space to store its objects. The allocation can
continue until the maximum setting is reached.
Set the value to be large enough to hold all the Java objects and classes. On a 64-bit agent,
the value can be about 1024M or 2048M.
-XX:MaxPermSize=***m The maximum amount of permanent space that the JVM can use at a time. If the JVM
needs more than the specified amount, the Java process fails.
You can set this value to an average of 512M. However, the value must be less than the -
Xmx value. Increase the MaxPermSize value if you receive an error about permGen space.
INFA_MEMORY
Define the INFA_MEMORY property on the agent details page in the System Configuration Details section.
Select the Data Integration Service and the Tomcat JRE type, then define the INFA_MEMORY property.
The following image shows the INFA_MEMORY property on the agent details page:
Figure 1.
JVM options
Define JVM options on the agent details page in the System Configuration Details section. Select the Data
Integration Service and the DTM type, then define a JVMOption property.
Each JVMOption property can include one JVM attribute. You can define up to five JVMOption properties. If
you already have five JVMOption properties, you can create more as a custom property.
The -Xmx property determines the heap size. The default value is 64MB. For mappings that process large
data volumes with multiple partitions, the default value can cause mapping failure because of insufficient
Java heap space. The recommended value for this property is 2024MB.
Using SQL ELT optimization, Data Integration pushes the processing down to the cloud ecosystems or cloud
data warehouses. This improves the data processing performance as data is processed close to the source
and saves your company data transfer costs.
Data Integration supports full SQL ELT optimization for cloud data warehouse to cloud data warehouse
integrations. Data Integration converts mapping logic to equivalent, optimized SQL queries that the cloud
data warehouse executes, without data transfers that would normally incur additional processing time and
data transfer charges. Data Integration uses the cloud data warehouse's compute capacity to process the
data without additional resources, thus achieving compute efficiency.
Try to use SQL ELT optimization for cloud data lake to cloud data warehouse or cloud data warehouse to
cloud data warehouse integrations whenever SQL ELT optimization is supported.
A common design pattern across these connectors is in the way Informatica stages data locally on disk
before uploading to an end point or after downloading data from an end point. This staging process is a disk-
intensive operation and requires both CPU and disk I/O resources. Keep this in mind for all cloud data lake to
cloud data lake, cloud data lake to cloud data warehouse, and cloud data warehouse to cloud data
warehouse integrations when SQL ELT optimization isn't used.
Best practices 13
The following graph represents the performance of a concurrent cloud data warehouse mapping and the
impact that sustained disk I/O has on it:
Informatica recommends a storage device with 500 Mbps disk throughput for a Data Integration workload
with either partitioning enabled or concurrent executions. For detailed information on the various tuning
options for these endpoints, see the appropriate connector guides. Performance tuning articles are available
in the Informatica Knowledge Base for some connectors.
• Reduce the field precision of each column to the length that you need.
• Reduce the number of columns. Remove unconnected fields.
• Reduce the number of rows. Use a source filter in a Source or Filter transformation.
• Use a Filter transformation early in the mapping to remove unnecessary data.
Enable source partitioning whenever possible. The mapping task divides the source data into partitions
and processes the partitions concurrently.
• Maintain consistency from source to target. Keep the same data type and precision across the
pipeline whenever possible.
• For variable length data types, use precision as small as possible.
• Use the String data type instead of dates if no operations are done.
• Eliminate unnecessary data type conversions. For example, if a mapping moves data from an Integer
column to a Decimal column, then back to an Integer column, the unnecessary data type conversion
slows performance.
• Use integer values in place of other data types when performing comparisons using Lookup and Filter
transformations wherever possible.
When a mapping writes to or reads from a cloud data warehouse, you can optimize the mapping
performance by configuring the Secure Agent to stage data locally in a temporary folder before writing to
or reading from the cloud data warehouse end point.
Tune hardware.
Choose performant cloud instances such as Amazon Elastic Compute Cloud (EC2), Azure Virtual
Machine (Azure VM), or Google Cloud Platform (GCP) based on the resource requirements.
Bottlenecks
The first step in performance tuning is to identify performance bottlenecks. Performance bottlenecks can
occur in the source and target databases, the mapping, the mapping task, and the system.
Tuning a bottleneck may reveal another one. The strategy is to identify a performance bottleneck, eliminate it,
and then identify the next performance bottleneck until you're satisfied with the performance.
1. Target
2. Source
3. Mapping
4. Mapping task
5. System
You can configure a test mapping to read from a flat file source or to write to a flat file target to identify
source and target bottlenecks.
You can use system monitoring tools to view the percentage of CPU usage, I/O waits, and paging to
identify system bottlenecks.
Thread statistics
You can use thread statistics in the session log to identify source, target, or transformation bottlenecks.
By default, a mapping uses one reader thread, one transformation thread, and one writer thread. The thread
with the highest busy percentage identifies the bottleneck in the mapping run. When a specific
transformation is identified as a bottleneck, you can tune the transformation.
Bottlenecks 15
Run time
Idle time
Amount of time the thread is idle, including the time the thread waits for other thread processing within
the application. Idle time includes the time the thread is blocked by the Data Integration Server, but not
the time the thread is blocked by the operating system.
Busy time
Percentage of the run time the thread is busy according to the following formula:
(Run time - idle time) / run time X 100
You can ignore high busy percentages when the total run time is short, such as under 60 seconds. This
doesn't necessarily indicate a bottleneck.
To determine which transformation in the transformation thread is the bottleneck, view the busy percentage
of each transformation in the thread work time breakdown. If the source, target, or transformations don't
appear as the bottleneck, task properties could be causing the bottleneck.
Optimizing targets
You can optimize performance by eliminating target bottlenecks. The most common performance bottleneck
occurs when the task writes to a target.
Network latency, performance issues with the target instance type used for the database or data warehouse,
or problems during heavy loading operations can cause target bottlenecks.
• Configure a copy of the mapping to write to a flat file target. If the performance increases significantly,
you have a target bottleneck. If a mapping already writes to a flat file target, you probably don't have a
target bottleneck.
• Read the thread statistics in the session log. When the mapping task spends more time on the writer
thread than the transformation or reader threads, you have a target bottleneck.
• Verify that you're following best practices for cloud and mapping design.
• Verify that the target cloud database or data warehouse is performing properly. If it's performing poorly, it
can impact mapping performance.
17
Chapter 3
Optimizing sources
You can optimize performance by eliminating source bottlenecks. Performance bottlenecks can occur when
the mapping task reads from a source.
Inefficient queries, network latency, or performance issues with the instance type used for the database or
data warehouse source can cause source bottlenecks.
If the mapping reads from a cloud database or data warehouse source, use the following methods to identify
source bottlenecks:
If the mapping reads from a flat file source, you probably don't have a source bottleneck.
Add a Filter transformation after each source. Set the filter condition to false so that no data is processed by
the Filter transformation. If the time it takes to run the new mapping remains about the same, you have a
source bottleneck.
18
4. Connect the sources to a flat file target.
Run the read test mapping. If the mapping performance is similar to the original run, you have a source
bottleneck.
Using a query
To identify bottlenecks, run the read query directly against the source database or data warehouse.
Copy the read query directly from the session log. Run the query against the source with a query tool. On
Windows, you can load the result of the query in a file. On Linux, you can load the result of the query in /dev/
null.
Measure the query run time and the time it takes for the query to return the first row.
• Verify that you're following best practices for cloud and mapping design.
• Verify that the source cloud database or data warehouse is performing properly. If it's performing poorly,
it can impact mapping performance. The administrator can optimize the query to optimize performance.
Optimizing mappings
You can optimize mapping performance by eliminating bottlenecks and following best practices when you
design mappings.
• Read the thread statistics in the session log. When the mapping spends more time on the transformation
thread than the writer or reader threads, you have a transformation bottleneck.
• Add a Filter transformation before each Target transformation. Set the filter condition to false so that no
data is loaded into the target. If the time it takes to run the new mapping task is the same as the original
mapping task, you have a mapping bottleneck.
Mapping-level optimization may take time to implement, but it can significantly boost performance. Focus on
mapping-level optimization after you optimize the targets and sources.
Generally, reduce the number of transformations in the mapping and delete unnecessary links between
transformations to optimize the mapping. Configure the mapping with the least number of transformations
and expressions to do the most amount of work possible. Delete unnecessary links between transformations
to minimize the amount of data moved. Optimize the transformations that are in the mapping. Be sure to
follow best practices for mapping design.
20
Optimizing delimited flat file sources
If a source is a delimited flat file, you specify the delimiter character to separate columns of data in the
source file. You also specify the escape character.
Data Integration reads the delimiter character as a regular character if you include the escape character
before the delimiter character. You can improve performance if the source flat file doesn't contain quotes or
escape characters.
For sources that are larger than 1 GB, deselect both Read Entire Source and Enable Upstream Preview.
Optimizing filters
Use filters early in the data flow to improve mapping performance.
• Source transformation. The Source transformation filters rows from database or data warehouse sources.
• Filter transformation. The Filter transformation filters data within a mapping. The Filter transformation
filters rows from any type of source.
If you filter rows from the mapping, you can improve efficiency by filtering early in the data flow. Use a filter
in the Source transformation to remove the rows at the source. The Source transformation limits the row set
extracted from a database or data warehouse source.
If you can't use a filter in the Source transformation, use a Filter transformation and move it as close to the
Source transformation as possible to remove unnecessary data early in the data flow. The Filter
transformation limits the row set sent to a target.
Avoid using complex expressions in filter conditions. To optimize Filter transformations, use simple integer
or true or false expressions in the filter condition.
For example, if a mapping moves data from an Integer column to a Decimal column, then back to an Integer
column, the unnecessary data type conversion slows performance. Where possible, eliminate unnecessary
data type conversions from mappings.
• Use integer values in place of other data types when performing comparisons using Lookup and Filter
transformations. For example, many databases store U.S. ZIP code information as a Char or Varchar data
type. If you convert the zip code data to an Integer data type, the lookup database stores the zip code
94303-1234 as 943031234. This helps increase the speed of the lookup comparisons based on zip code.
• Convert the source dates to strings through field-to-field conversions to increase performance. You can
either leave the fields in targets as strings or change the fields to Date/Time fields.
Optimizing expressions
You can optimize the expressions used in transformations. When possible, isolate slow expressions and
simplify them.
For example, you have a mapping with five target tables. Each target requires a Social Security Number
lookup. Instead of performing the lookup five times, place the Lookup transformation in the mapping before
the data flow splits. Next, pass the lookup results to all five targets.
Each time you use an aggregate function call, the mapping searches and groups the data. For example, in the
following expression, Data Integration reads COLUMN_A, finds the sum, then reads COLUMN_B, finds the
sum, and finally finds the sum of the two sums:
SUM(COLUMN_A) + SUM(COLUMN_B)
If you factor out the aggregate function call as shown below, Data Integration adds COLUMN_A to
COLUMN_B, then finds the sum of both:
SUM(COLUMN_A + COLUMN_B)
You can use a local variable only within the transformation. However, by calculating the variable only once,
you speed up performance.
For example, if you look up large amounts of data on two fields, EMPLOYEE_NAME and EMPLOYEE_ID,
configuring the lookup around EMPLOYEE_ID improves performance.
For example, you have the following expression that contains nested CONCAT functions:
CONCAT( CONCAT( CUSTOMERS.FIRST_NAME, ‘ ’) CUSTOMERS.LAST_NAME)
You can rewrite that expression with the || operator as follows:
CUSTOMERS.FIRST_NAME || ‘ ’ || CUSTOMERS.LAST_NAME
For example, you have a source with three Y/N flags: FLG_A, FLG_B, FLG_C. You want to return values based
on the values of each flag. You use the following expression:
IIF( FLG_A = 'Y' and FLG_B = 'Y' AND FLG_C = 'Y', VAL_A + VAL_B + VAL_C,
IIF( FLG_A = 'Y' and FLG_B = 'Y' AND FLG_C = 'N', VAL_A + VAL_B ,
IIF( FLG_A = 'Y' and FLG_B = 'N' AND FLG_C = 'Y', VAL_A + VAL_C,
IIF( FLG_A = 'Y' and FLG_B = 'N' AND FLG_C = 'N', VAL_A ,
IIF( FLG_A = 'N' and FLG_B = 'Y' AND FLG_C = 'Y', VAL_B + VAL_C,
IIF( FLG_A = 'N' and FLG_B = 'Y' AND FLG_C = 'N', VAL_B ,
IIF( FLG_A = 'N' and FLG_B = 'N' AND FLG_C = 'Y', VAL_C,
IIF( FLG_A = 'N' and FLG_B = 'N' AND FLG_C = 'N', 0.0,
)))))))
This expression requires 8 IIFs, 16 ANDs, and at least 24 comparisons.
If you take advantage of the IIF function, you can rewrite that expression as follows:
IIF(FLG_A='Y', VAL_A, 0.0)+ IIF(FLG_B='Y', VAL_B, 0.0)+ IIF(FLG_C='Y', VAL_C, 0.0)
This results in three IIFs, two comparisons, two additions, and a faster task run.
Optimizing expressions 23
Evaluating expressions
If you aren't sure which expressions slow performance, evaluate the expression performance to isolate the
problem.
For optimal performance, place Aggregator transformations as close to the Source transformation as
possible.
The Sorted Input option decreases the use of aggregate caches. When you use the Sorted Input option, Data
Integration assumes all data is sorted by group. As Data Integration reads rows for a group, it performs
aggregate calculations. When necessary, it stores group information in memory.
The Sorted Input option reduces the amount of data cached during the task run and improves performance.
To pass sorted data to the Aggregator transformation, use sorted input with either the Source transformation
source filter or a Sorter transformation.
You can increase performance when you sort input in mappings with multiple partitions.
Use the following guidelines to optimize the performance of a Hierarchy Processor transformation:
• When you read the hierarchical data in a Source transformation before passing it to the Hierarchy
Processor transformation, use JSON format instead of an intelligent structure model whenever possible.
However, use an intelligent structure model for files that are larger than 1 MB.
• Avoid non-splittable files that are larger than 100 MB. Instead, process several small JSON files.
• Reduce the number of nested hierarchies. Mappings process a three-level hierarchy faster than a five-level
hierarchy.
Designate the master group as the source with fewer duplicate key values.
When Data Integration processes a sorted Joiner transformation, it caches rows for one hundred unique
keys at a time. If the master group contains many rows with the same key value, Data Integration must
cache more rows, and performance can be slowed.
The Joiner transformation compares each row of the detail group against the master group. The fewer
rows in the master, the fewer iterations of the join comparison occur, which speeds the join process.
Performing a join in a database is faster than performing a join in the mapping. The type of database join
you use can affect performance. Normal joins are faster than outer joins and result in fewer rows. In
some cases, you cannot perform the join in the database, such as joining tables from two different
databases or flat file systems.
To improve mapping performance, configure the Joiner transformation to use sorted input. When you
configure the Joiner transformation to use sorted data, Data Integration improves performance by
minimizing disk input and output. You see the greatest performance improvement when you work with
large data sets. For an unsorted Joiner transformation, designate the source with fewer rows as the
master group.
In a mapping that has multiple Joiner transformations, join the largest data set in the most downstream
transformation.
Mappings in advanced mode perform a broadcast join for data sets that are smaller than the value set in
the Spark session property spark.sql.autoBroadcastJoinThreshold. The mapping broadcasts the data
set to all Spark executors across all advanced cluster nodes and reduces shuffle overhead for better
performance.
Run CLAIRE Tuning to get a recommendation for the broadcast join threshold.
When you use a Lookup transformation, perform the following tasks to increase performance:
When you enable caching, Data Integration caches the lookup table and queries the lookup cache during the
task run. When this option isn't enabled, Data Integration queries the lookup table on a row-by-row basis.
The result of the lookup query and processing is the same, whether or not you cache the lookup table.
However, using a lookup cache can increase mapping performance for smaller lookup tables. In general, you
want to cache lookup tables that need less than 300 MB.
If you enable lookup caching, perform the following tasks to increase performance:
Cache types
Consider the type of cache you use to improve performance.
Persistent cache
To save and reuse the cache files, you can configure the transformation to use a persistent cache. Use a
persistent cache when you know the lookup table doesn't change between task runs. Using a persistent
cache can improve performance because Data Integration builds the memory cache from the cache files
instead of from the database.
Dynamic cache
Use a dynamic lookup cache to keep the lookup cache synchronized with the target. If the cache is
static, the data in the lookup cache doesn't change as the mapping task runs. If the task uses the cache
multiple times, the task uses the same data. If the cache is dynamic, the task updates the cache based
on the actions in the task, so if the task uses the lookup multiple times, downstream transformations
can use updated data.
You can enable concurrent caches to improve performance. When the number of additional concurrent
pipelines is set to one or more, Data Integration builds caches concurrently rather than sequentially.
Performance improves greatly when the tasks contain a number of active transformations that might take
time to complete, such as Aggregator, Joiner, or Sorter transformations. When you enable multiple
concurrent pipelines, Data Integration doesn't wait for active task runs to complete before it builds the cache.
Other Lookup transformations in the pipeline also build caches concurrently.
You can configure the transformation to return any value that matches the lookup condition. When you
configure the Lookup transformation to return any matching value, the transformation returns the first value
that matches the lookup condition. It doesn't index all fields as it does when you configure the
transformation to return the first matching value or the last matching value. When you use any matching
value, performance can improve because the transformation doesn't index on all fields.
To increase performance, suppress the default ORDER BY statement and enter an override ORDER BY with
fewer columns.
Data Integration always generates an ORDER BY statement, even if you enter one in the override. Place two
dashes (--) after the ORDER BY override to suppress the generated ORDER BY statement.
If the Secure Agent machine has enough memory, increase the cache so it can hold all data in memory
without paging to disk.
1. Equal to (=)
2. Less than (<), greater than (>), less than or equal to (<=), greater than or equal to (>=)
3. Not equal to (!=)
• Cached lookups. Index the columns in the lookup ORDER BY statement. The session log contains the
ORDER BY statement.
When data persists, the Router transformation doesn't repeat read operations for each output group.
Ensure that the number of values to cache isn't too small. Consider configuring the number of values to a
value greater than 1,000.
If you don't need to cache values, set the number of values to cache to 0. Sequence Generator
transformations that don't use a cache are faster than those that require caching.
When you connect the CURRVAL field in a Sequence Generator transformation, Data Integration processes
one row in each block. You can optimize performance by connecting only the NEXTVAL field in a mapping.
Allocating memory
For optimal performance, configure the Sorter cache size with a value less than or equal to the amount of
available physical RAM on the Secure Agent machine.
Allocate at least 16 MB of physical memory to sort data using the Sorter transformation. The Sorter cache
size is set to 16,777,216 bytes by default. If Data Integration can't allocate enough memory to sort data, the
mapping task fails.
If the amount of incoming data is greater than the amount of Sorter cache size, Data Integration temporarily
stores data in the Sorter transformation work directory. Data Integration requires disk space of at least twice
the amount of incoming data when storing data in the work directory. If the amount of incoming data is
significantly greater than the Sorter cache size, Data Integration may require much more than twice the
amount of disk space available to the work directory.
Note: The session log contains the input row count and the size of incoming data for the Sorter
transformation. For example, the following message appears when Data Integration processes the Sorter
transformation:
SORT_40422 End of output from Sorter Transformation [srt_1_Billion_FF]. Processed
999999999 rows (866325637228 input bytes; 868929593344 temp I/O bytes)
In the message, the number of input rows is 999999999 and the size of the input rows is 866325637228.
By default, Data Integration uses the value specified for the $PMTempDir service process variable. When you
partition a mapping with a Sorter transformation, you can specify a different work directory for each partition
in the pipeline. To increase mapping performance, specify work directories on physically separate disks on
the Secure Agent machine.
To specify the work directory for a Sorter transformation, use the Work Directory advanced property in the
Sorter transformation.
Small cache size, low buffer memory, and small commit intervals can cause mapping task bottlenecks.
Buffer memory
When Data Integration initializes a task run, it allocates blocks of memory to hold source and target data.
Data Integration allocates at least two blocks for each source and target partition. Mapping tasks that use a
large number of sources and targets might require additional memory blocks. If Data Integration can't
allocate enough memory blocks to hold the data, the task fails.
You can configure the amount of buffer memory, or you can configure Data Integration to calculate buffer
settings at run time.
To increase the number of available memory blocks, adjust the following mapping task properties:
• DTM Buffer Size. Increase the DTM buffer size advanced session property in the mapping task.
• Buffer Block Size. Decrease the buffer block size advanced session property in the mapping task.
Note: If data partitioning is enabled, the DTM buffer size is the total size of all memory buffer pools allocated
to all partitions. For a task that contains n partitions, set the DTM Buffer Size to at least n times the value for
the task with one partition.
31
Increasing DTM buffer size
The DTM buffer size setting specifies the amount of memory that Data Integration uses as DTM buffer
memory. When you increase the DTM buffer memory, Data Integration creates more buffer blocks, which
improves performance during momentary slowdowns.
Increasing DTM buffer memory allocation generally causes performance to improve initially and then level
off. If you don't see a significant increase in performance, DTM buffer memory allocation isn't a factor in
mapping performance.
To increase the DTM buffer size, open the task and edit the DTM Buffer Size advanced session property.
Increase the DTM buffer size by multiples of the buffer block size.
If you're manipulating unusually large rows of data, increase the buffer block size to improve performance. If
you don't know the approximate size of the rows, determine the row size by completing the following steps:
The total precision represents the total bytes needed to move the largest row of data. For example, if the
total precision equals 33,000, then Data Integration requires 33,000 bytes in the buffer block to move that
row. If the buffer block size is only 64,000 bytes, then Data Integration can't move more than one row at a
time.
To set the buffer block size, open the task and edit the Default Buffer Block Size advanced session property.
As with DTM buffer memory allocation, increasing buffer block size should improve performance. If you don't
see an increase, then buffer block size isn't a factor in task performance.
Caches
Data Integration uses the index and data caches for XML targets and Aggregator, Rank, Lookup, and Joiner
transformations.
Data Integration stores transformed data in the data cache before returning it to the pipeline. Data Integration
stores group information in the index cache. Also, Data Integration uses a cache to store data for Sorter
transformations.
To configure the amount of cache memory, specify the cache size. If the allocated cache isn't large enough
to store the data, Data Integration stores the data in a temporary disk file, a cache file, as it processes the
task data. Performance slows each time Data Integration pages to a temporary file.
If the cache size isn't big enough, Data Integration processes some of the transformation in memory and
pages information to cache files to process the rest of the transformation. Each time Data Integration pages
to a cache file, performance slows.
If the mapping contains a transformation that uses a cache, and you run the task on a machine with
sufficient memory, increase the cache sizes to process the transformation in memory.
Verbose logs
You can run a mapping task in standard or verbose execution mode. When you run the task in verbose
execution mode, the mapping generates additional data in the logs that you can use for troubleshooting.
Use verbose execution mode only for troubleshooting purposes. Verbose execution mode impacts
performance because of the amount of data it generates.
Local cluster
The following image shows how Data Integration interacts with the Secure Agent and advanced cluster
components in a local cluster for both cloud and on-premises ecosystems:
34
Fully-managed cluster
The following image shows how Data Integration interacts with the Secure Agent and advanced cluster
components in a fully-managed cluster:
Self-service cluster
The following image shows how Data Integration interacts with the Secure Agent and advanced cluster
components in a self-service cluster:
Best practices
When you create an advanced configuration, follow best practices to optimize advanced cluster performance.
Use storage auto-scaling to dynamically change the amount of disk space that is available to process
jobs. Jobs require disk space based on the data logic and the data volume in the job.
Use worker node auto-scaling to dynamically change the number of nodes that are available to process
jobs.
For more information about auto-scaling, see the following Informatica blog:
Cloud Data Integration Elastic - Understanding Auto Scaling.
Spot Instances provide the same performance as On-Demand Instances but at a lower price. However,
they might not always be available. Use Spot Instances with a frequency of interruption that is less than
5%. For a list of Spot Instances and their frequency of interruption, see AWS's Spot Instance advisor.
Development and QA environments can use Spot Instances to save costs during internal tests and
debugging. Avoid Spot Instances for jobs that have a strict SLA.
The following table lists the master node configuration based on the number of worker nodes:
The following table lists the worker node configuration based on the advanced cluster type:
The number of worker nodes that you provision depends on your SLA.
To find out which operations run on GPU, use the Spark event log and search for GPU-CPU data exchange
operations such as GPUColumnarToRow and GPURowToColumnar.
Data Integration uses system resources to process transformations, run tasks, and read and write data. Data
Integration also uses system memory to create cache files for transformations such as the Aggregator,
Joiner, Lookup, Sorter, and Rank transformations.
Use the Performance Monitor to view more detailed information. The following table describes the system
information that you can use in the Windows Performance Monitor to create a chart:
Property Description
Percent processor time If you have more than one CPU, monitor each CPU for percent processor time.
Pages/second If pages/second is greater than five, you may have excessive memory pressure known
as thrashing.
Physical disks percent time The percent of time that the physical disk is busy performing read or write requests.
Physical disks queue length The number of users waiting for access to the same disk device.
Server total bytes per second The server has sent to and received from the network.
39
Identifying system bottlenecks on Linux
Linux provides several tools that you can use to identify system bottlenecks.
• top. View overall system performance. This tool displays CPU usage, memory usage, and swap usage for
the system and for individual processes running on the system.
• iostat. Monitor the loading operation for every disk attached to the database server. Iostat displays the
percentage of time that the disk is physically active. If you use disk arrays, use utilities provided with the
disk arrays instead of iostat.
• vmstat. Monitor disk swapping actions.
• sar. View detailed system activity reports of CPU, memory, and disk usage. You can use this tool to
monitor CPU loading. It provides percent usage on user, system, idle time, and waiting time. You can also
use this tool to monitor disk swapping actions.
• If the CPU usage is more than 80%, check the number of concurrent running tasks. Consider changing the
load or using a Secure Agent group to distribute tasks to different agent machines. If you can't reduce the
load, consider adding more processors.
• If swapping occurs, increase the physical memory, or reduce the number of memory-intensive
applications on the disk.
• If you have excessive memory pressure (thrashing), consider adding more physical memory.
• If the percent of time is high, tune the cache for transformations to use in-memory cache instead of
writing to disk. If you tune the cache, requests are still in queue, and the disk busy percentage is at least
50%, upgrade to a faster disk. If physical disk queue length is greater than two, consider upgrading the
disk.
• If the percent time spent waiting on I/O is high, consider upgrading to a faster disk or using other under-
utilized disks. For example, if the source data, target data, lookup, rank, and aggregate cache files are all
on the same disk, consider putting them on different disks.
C maxDTMProcesses property 11
D
Data Integration community
URL 6
S
status
Informatica Intelligent Cloud Services 7
I system status 7
INFA_MEMORY property 12
Informatica Global Customer Support
contact information 7
T
Informatica Intelligent Cloud Services trust site
web site 6 description 7
J U
JVMOption property 12 upgrade notifications 7
L V
logging levels 33 verbose execution mode 33
M W
maintenance outages 7 web site 6
41