1/40
Contents
Title and Copyright Information
Preface
Audience
Documentation Accessibility
Conventions
Part I Introduction
1
Introduction and Roadmap
1.1
Document Scope and Audience
1.2
Guide to this Document
1.3
Related Documentation
2
Top Performance Areas
2.1
About Identifying Top Performance Areas
2.2
Securing Sufficient Hardware Resources
2.3
Tuning the Operating System
2.4
Tuning Java Virtual Machines (JVMs)
2.4.1
Configuring Garbage Collection
2.4.1.1
Specifying Heap Size Values
2.4.1.2
Selecting a Garbage Collection Scheme
2.4.1.3
Disabling Explicit Garbage Collection
2.4.2
Logging Low Memory Conditions
2.4.3
Monitoring and Profiling the JVM
2.5
Tuning the WebLogic Server
2.6
Tuning Database Parameters
2.6.1
Tuning init.ora Database Parameters
2.6.1.1
Initialization Parameters for Oracle 10g
2.6.1.2
Initialization Parameters for Oracle 11g
2.6.2
Tuning Redo Logs Location and Sizing
2.6.3
Tuning Automatic Segment-Space Management (ASSM)
2.7
Reusing Database Connections
2.8
Enabling Data Source Statement Caching
2.9
Controlling Concurrency
2.9.1
Setting HTTP Connection Limits
2.9.1.1
MaxClients/ThreadsPerChild
2.9.1.2
KeepAlive
2.9.1.3
Tuning MOD_WL_OHS
2.9.2
Configuring Connection Pools
2.9.3
Tuning the WebLogic Sever Thread Pool
2.9.4
Tuning Oracle WebCenter Concurrency
2.9.5
Tuning BPEL Concurrency
2.10
Setting Logging Levels
3
Performance Planning
3.1
About Oracle Fusion Middleware Performance Planning
3.2
Performance Planning Methodology
3.2.1
Define Your Performance Objectives
3.2.1.1
Define Operational Requirements
3.2.1.2
Identify Performance Goals
3.2.1.3
Understand User Expectations
3.2.1.4
Conduct Performance Evaluations
3.2.2
Design Applications for Performance and Scalability
3.2.3
Monitor and Measure Your Performance Metrics
4
Monitoring Oracle Fusion Middleware
4.1
About Oracle Fusion Middleware Management Tools
4.1.1
Measuring Your Performance Metrics
4.2
Oracle Enterprise Manager 11g Fusion Middleware Control
4.2.1
Viewing Performance Metrics Using Fusion Middleware Control
4.3
Oracle WebLogic Server Administration Console
4.4
WebLogic Diagnostics Framework (WLDF)
4.5
WebLogic Scripting Tool (WLST)
4.5.1
Using Custom WLST Commands
4.5.1.1
Using WLST Commands for System Components
4.6
DMS Spy Servlet
4.6.1
Viewing Performance Metrics Using the Spy Servlet
4.6.2
Using the DMS Spy Servlet
4.7
Oracle Process Manager and Notification Server
4.8
Oracle Enterprise Manager 11g Grid Control
4.9
Native Operating System Performance Commands
4.10
Network Performance Monitoring Tools
Part II Core Components
5
Oracle HTTP Server Performance Tuning
5.1
About Oracle HTTP Server
5.2
Tuning Considerations for Oracle HTTP Server Directives
5.2.1
Reducing Httpd Process Availability with Persistent Connections
5.3
Logging Options for Oracle HTTP Server
5.3.1
Access Logging
5.3.2
Configuring the HostNameLookups Directive
5.3.3
Error logging
5.4
Performance Considerations for Oracle HTTP Server Security
5.4.1
Oracle HTTP Server Secure Sockets Layer (SSL) Performance Issues
5.4.1.1
Caching SSL on Oracle HTTP Server
5.4.1.2
Using SSL Application Level Data Encryption
5.4.1.3
Tuning Considerations for SSL Performance
5.4.2
Oracle HTTP Server Port Tunneling Performance Issues
5.5
Oracle HTTP Server Performance Considerations
5.5.1
Analyzing Static Versus Dynamic Requests
5.5.2
Managing PL/SQL Requests
5.5.3
Limiting the Number of Enabled Modules
5.5.4
Tuning the File Descriptor Limit
5.5.5
Monitoring Oracle HTTP Server
6
Oracle Dynamic Monitoring Service Performance Tuning
6.1
About Dynamic Monitoring Service (DMS)
6.1.1
Common DMS Terms and Concepts
6.1.1.1
DMS Tracing and Events
6.1.1.2
DMS Nouns
6.1.1.2.1
General DMS Naming
6.1.1.2.2
General DMS Naming Conventions and Character Sets
6.1.1.2.3
Noun and Noun Type Naming Conventions
6.1.1.3
DMS Sensors
6.1.1.3.1
DMS PhaseEvent Sensors
6.1.1.3.2
DMS Event Sensors
6.1.1.3.3
DMS State Sensors
6.1.1.3.4
Sensor Naming Conventions
6.2
DMS Availability
6.3
DMS Architecture Overview
6.4
Viewing DMS Metrics
6.4.1
Viewing Metrics Using the Spy Servlet
6.4.2
Viewing Metrics with WLDF (WebLogic Diagnostic Framework)
6.4.3
Viewing metrics with WLST (Oracle WebLogic Server)
6.4.4
Viewing metrics with JConsole
6.4.5
Viewing metrics with Oracle Enterprise Manager
6.4.6
Viewing metrics using WSADMIN (IBM WebSphere)
6.5
Accessing DMS Metrics with WLDF
6.6
DMS Execution Context
6.6.1
DMS Execution Requests and Sub-Tasks
6.6.2
DMS Execution Context Usage
6.6.3
DMS Execution Context Communication
6.7
DMS Tracing and Events
6.7.1
Configuring the DMS Event System
6.7.1.1
Adding and Editing Filters
6.7.1.2
Adding and Editing Destinations
6.7.1.3
Adding and Editing Event Routes
6.7.1.4
Compound Operations
6.7.2
Configuring Destinations
6.7.2.1
LoggerDestination
6.7.2.1.1
Static Loggers and Handlers
6.7.2.1.2
Dynamic Loggers and Handlers
6.7.2.1.3
Default Locations of the logging.xml File
6.7.2.1.4
Using a CLI Command to Query the Trace Log File
6.7.2.2
MBean Creator Destination
6.7.2.2.1
Metric MBean Object Name
6.7.2.3
HTTP Request Tracker Destination
6.7.2.3.1
Executing the HTTP Request Tracker Dump
6.7.2.4
JRockit Flight Recorder Destination
6.7.2.4.1
Dynamically Derived JFR Event Types – Names, Values and Descriptions
6.7.2.4.2
Examples of Dynamically Derived Producers and Events
6.7.3
Understanding DMS Event Output
6.7.4
Understanding DMS Event Actions
6.8
DMS Best Practices
7
Oracle Metadata Service (MDS) Performance Tuning
7.1
About Oracle Metadata Services (MDS)
7.2
Tuning Database Repository
7.2.1
Collecting Schema Statistics
7.2.2
Increasing Redo Log Size
7.2.3
Reclaiming Disk Space
7.2.4
Monitoring the Database Performance
7.3
Purging Document Version History
7.3.1
Auto Purge
7.3.2
Manual Purge
7.4
Using Database Polling Interval for Change Detection
7.5
Tuning Cache Configuration
7.5.1
Enabling Document Cache
7.6
Analyzing Performance Impact from Customization
7.7
Understanding DMS metrics and Characteristics
Part III Oracle Fusion Middleware Server Components
8
Oracle Application Development Framework Performance Tuning
8.1
About Oracle ADF
8.2
Oracle ADF View Performance
8.2.1
Oracle ADF Faces Configuration and Profiling
8.2.2
Performance Considerations for ADF Faces
8.2.3
Tuning ADF Faces Component Attributes
8.2.4
Performance Considerations for Table and Tree Components
8.2.5
Performance Considerations for autoSuggest
8.2.6
Data Delivery - Lazy versus Immediate
8.2.7
Performance Considerations for DVT Components
8.3
ADF Server Performance
8.3.1
HTTP Session Timeout Tuning
8.3.2
View Objects Tuning
8.3.2.1
Creating View Objects
8.3.2.2
Configuring View Object Data Fetching
8.3.2.3
Additional View Object Configurations
8.3.3
Batch Processing
8.3.4
RangeSize Tuning
8.3.5
Application Module Design Considerations
8.3.6
Application Module Pooling
8.3.6.1
General AM Pool Configurations
8.3.6.2
AM Pool Sizing Configurations
8.3.6.3
AM Pool Resource Cleanup Configurations
8.3.7
ADFc: Region Usage
8.3.8
Defer Task Flow Execution
8.3.9
Task Flow in a Popup
8.3.10
Configuring the Task Flow Inside Switcher
8.3.11
Reusing Static Data
8.3.12
Conditional Validations
9
Oracle TopLink (EclipseLink) JPA Performance Tuning
9.1
About Oracle TopLink and EclipseLink
9.2
Efficient SQL Statements and Queries
9.2.1
Entity Relationships Query Parameter Tuning
9.3
Cache Configuration Tuning
9.3.1
Cache Refreshing Scenarios
9.3.2
Locking Modes
9.4
Coherence Integration
9.5
Mapping and Descriptor Configurations
9.6
Data Partitioning
9.7
Analyzing EclipseLink JPA Entity Performance
10
Oracle Web Cache Performance Tuning
10.1
About Oracle Web Cache
10.2
Optimizing Hardware Resources
10.2.1
Hardware Resources
10.2.2
Memory Configuration
10.2.2.1
Configuring WebCache Memory
10.3
Optimizing Network Connections
10.3.1
Network Bandwidth
10.3.2
Network Connections
10.3.3
Network-Related Parameters
10.4
Optimizing Platform Connections
10.4.1
UNIX Connections
10.4.2
Windows Connections
10.5
Increasing Cache Hit Rates
10.6
Optimizing Response Time
10.7
Optimizing Performance with Oracle ADF
Part IV SOA Suite Components
11
General Tuning for SOA Suite Components
11.1
About SOA Suite Configuration Properties
11.2
SOA Infrastructure Configurations
11.2.1
Audit Level
11.2.2
Composite Instance State
11.2.3
instanceTrackingAuditTrailThreshold
11.2.4
Logging Level
11.3
Modifying SOA Configuration Parameters
11.4
JVM Tuning Parameters
11.5
Database Settings
11.5.1
Configuring Data Sources for SOA
11.5.2
Managing Tables and Indexes
11.5.3
Weblogic Server Performance Tuning
12
Oracle Business Rules Performance Tuning
12.1
About Oracle Business Rules
12.2
Basic Tuning Considerations
12.2.1
Use Java Beans
12.2.2
Assert Child Facts instead of Multiple Dereferences
12.2.3
Avoid Side Affects in Rule Conditions
12.2.4
Avoid Expensive Operations in Rule Conditions
12.2.5
Consider Pattern Ordering
12.2.6
Consider the Ordering of Tests in Rule Conditions
12.2.7
Use Functions Instead of AssertXPath and Supports XPath
13
Oracle BPEL Process Manager Performance Tuning
13.1
About BPEL Process Manager
13.2
Basic Tuning Considerations
13.2.1
BPEL Threading Model
13.2.1.1
Dispatcher System Threads
13.2.1.2
Dispatcher Invoke Threads
13.2.1.3
Dispatcher Engine Threads
13.2.1.4
Dispatcher Maximum Request Depth
13.2.2
Audit
13.2.2.1
AuditLevel
13.2.2.2
AuditDetailThreshold
13.2.2.3
AuditStorePolicy
13.2.2.4
AuditFlushByteThreshold
13.2.2.5
AuditFlushEventThreshold
13.2.3
OneWayDeliveryPolicy
13.2.4
MaximumNumberOfInvokeMessagesInCache
13.2.5
StatsLastN
13.2.6
LargeDocumentThreshold
13.2.7
Validate XML
13.2.8
SyncMaxWaitTime
13.2.9
InstanceKeyBlockSize
13.2.10
MaxRecoverAttempt
13.3
BPEL Properties Set Inside a Composite
13.3.1
Component Properties
13.3.1.1
inMemoryOptimization
13.3.1.2
completionPersistPolicy
13.3.1.3
auditLevel
13.3.2
Partner Link Property
13.3.2.1
idempotent
13.3.2.2
nonBlockingInvoke
13.3.2.3
validateXML
13.4
Tables Impacted By Instance Data Growth
14
Oracle Mediator Performance Tuning
14.1
About Oracle Mediator
14.2
Basic Tuning Considerations
14.2.1
metricsLevel
14.2.2
Domain-Value Maps
14.2.3
Deferred Routing Rules
14.2.4
Error and Retry Parameters
14.2.5
Audit Level
14.2.6
Resequencer
14.3
Event Delivery Network (EDN) Tuning
15
Oracle Business Process Management Performance Tuning
15.1
About Oracle Business Process Management
15.2
Basic Tuning Considerations
15.2.1
Audit Level
15.2.2
LargeDocumentThreshold
15.2.3
Dispatcher System Threads
15.2.4
Dispatcher Engine Threads
15.2.5
Dispatcher Invoke Threads
15.3
Tuning Oracle Workspace and Worklist Applications
15.4
Tuning Process Analytics
15.4.1
Process Measurement
15.4.2
Tuning Process Cubes
16
Oracle Human Workflow Performance Tuning
16.1
About Oracle Human Workflow
16.2
Basic Tuning Considerations
16.2.1
Minimize Client Response Time
16.2.2
Choose the Right Workflow Service Client
16.2.3
Narrow Qualifying Tasks Using Precise Filters
16.2.4
Retrieve Subset of Qualifying Tasks (Paging)
16.2.5
Fetch Only the Information That Is Needed for a Qualifying Task
16.2.6
Reduce the Number of Return Query Columns
16.2.7
Use the Aggregate API for Charting Task Statistics
16.2.8
Use the Count API Methods for Counting the Number of Tasks
16.2.9
Create Indexes On Demand for Flexfields
16.2.10
Use the doesTaskExist Method
16.3
Improving Server Performance
16.3.1
Archive Completed Instances Periodically
16.3.2
Select the Appropriate Workflow Callback Functionality
16.3.3
Minimize Performance Impacts from Notification
16.3.4
Deploy Clustered Nodes
16.4
Completing Workflows Faster
16.4.1
Use Workflow Reports to Monitor Progress
16.4.2
Specify Escalation Rules
16.4.3
Specify User and Group Rules for Automated Assignment
16.4.4
Use Task Views to Prioritize Work
16.5
Tuning Identity Provider
16.6
Tuning the Database
17
Oracle Adapters Performance Tuning
17.1
About Oracle Adapters
17.2
Oracle JCA Adapters for Files/FTP
17.2.1
Inbound Throttling Best Practices
17.2.2
Outbound Throttling Best Practices
17.2.3
Outbound Performance Best Practices
17.3
Oracle JCA Adapter for Database Tuning
17.3.1
JCA Adapter Basic Tuning Considerations
17.3.2
Existence Checking
17.3.3
Throttling
17.3.3.1
Formula
17.3.3.2
RowsPerPollingInterval and MaxTransactionSize
17.3.3.3
Configuration
17.4
Oracle Socket Adapter Tuning
17.5
Oracle SOA JMS Adapter Tuning
17.5.1
adapter.jms.receive.threads Property
17.6
Oracle AQ Adapter Tuning
17.6.1
adapter.aq.dequeue.threads Property
17.7
Oracle MQ Adapter Tuning
18
Oracle Business Activity Monitoring Performance Tuning
18.1
About Oracle Business Activity Monitoring
18.2
Basic Tuning Considerations
18.2.1
BAM Server Tuning
18.2.1.1
Set the ViewSetSharing and ElementCountLimit Parameters
18.2.1.2
Enable the Async Servlet
18.2.2
BAM Dashboard Tuning
18.2.2.1
Tune the Active Data Retrieval Interval
18.2.3
BAM Database Tuning
18.2.4
Internet Browser Tuning
18.2.4.1
Set iActiveDataScriptsCleanupFactor
18.2.4.2
Set Browser Cache Settings
18.2.5
Enterprise Message Source Tuning
18.2.5.1
Message Batching
19
User Messaging Service Performance Tuning
19.1
About Oracle User Messaging Services
19.2
Basic Tuning Considerations
19.2.1
SMPP Driver Performance Tuning
19.2.2
Email Driver Polling Frequency
19.3
Database Tuning for Optimal Throughput
20
Oracle B2B Performance Tuning
20.1
About Oracle B2B
20.2
MDS Cache Size
20.3
Number of Threads
20.4
JMS Multiple Out Queues Setting
21
Oracle Service Bus Performance Tuning
21.1
About Oracle Service Bus
21.2
Basic Tuning Considerations
21.2.1
JVM Memory Tuning
21.2.2
WebLogic Server Tuning
21.2.2.1
Domain Mode
21.2.2.2
WebLogic Server Logging Levels
21.2.2.3
HTTP Access Logging
21.2.2.4
JMS Tuning
21.2.2.5
Connection Backlog Buffering
21.3
Tuning OSB Operational Settings
21.3.1
OSB Monitoring
21.3.2
OSB Tracing
21.3.3
Cache Tuning for Proxy Service Run-Time Data
21.4
Transport Tuning (Oracle WebLogic Server and Oracle Service Bus)
21.4.1
Polling Interval
21.4.2
Read Limit
21.5
Design Time Considerations for Proxy Applications
21.6
Design Considerations for XQuery Tuning
22
Oracle Business Intelligence Performance Tuning
22.1
About Oracle Business Intelligence
22.2
Oracle BI Server Query Performance Tuning
22.3
Oracle BI Server Query Cache Performance Tuning
22.4
Oracle BI Web Client Performance Tuning
Part V Identity Management Suite Components
23
Oracle Internet Directory Performance Tuning
23.1
About Oracle Internet Directory
23.2
Introduction to Tuning Oracle Internet Directory
23.3
Basic Tuning Considerations
23.3.1
Database Parameters
23.3.2
LDAP Server Attributes
23.3.3
Database Statistics
23.4
Advanced Configurations
23.4.1
Replication or Oracle Directory Integration Platform
23.4.2
Replication Server Configuration
23.4.3
Garbage Collection Configuration
23.4.4
Oracle Internet Directory with Oracle RAC Database
23.4.5
Password Policies and Verifier Profiles
23.4.6
Server Entry Cache
23.4.6.1
When to Use the Entry Cache
23.4.6.2
Benefits of Using the Entry Cache
23.4.6.3
Values for Configuring the Entry Cache
23.4.7
Result Set Cache
23.4.7.1
When to Use Result Set Cache
23.4.7.2
Benefits of Using Result Set Cache
23.4.7.3
Values for Configuring Result Set Cache
23.4.8
Tuning Security Event Tracking
23.5
Low-Priority Tuning Considerations
23.5.1
Number of Entries to be Returned by a Search
23.5.2
Enabling the Group Cache
23.5.3
Timeout for Write Operations
23.6
Specific Use Cases
23.6.1
Bulk Load Operation
23.6.2
Bulk Delete Operation
23.6.3
High LDAP Write Operations Load
23.7
Optimizing Searches
23.7.1
Optimizing Searches for Large Group Entries
23.7.1.1
Entry Cache Enabled Configuration
23.7.1.2
Entry Cache Disabled Configuration.
23.7.2
Optimizing Searches for Skewed Attributes
23.7.3
Optimizing Performance of Complex Search Filters
23.8
Evaluating Performance on UNIX and Windows Systems
23.9
Obtaining Recommendations by Using the Tuning and Sizing Wizard
23.10
Updating Database Statistics by Using oidstats.sql
23.11
Setting Performance-Related Replication Configuration Attributes
23.12
Managing System Configuration Attributes
23.13
Setting Garbage Collection Configuration Attributes
23.13.1
Modifying Changelog Purging Attributes by Using ldapmodify
23.13.2
Modifying Changelog Purging in Oracle Directory Services Manager
24
Oracle Virtual Directory Performance Tuning
24.1
About Oracle Virtual Directory
24.2
Basic Tuning Considerations
24.3
Advanced Tuning Configurations
24.3.1
Database Adapters
24.3.2
Join Adapters
24.3.3
General Filter Tuning
24.3.4
Load Balancer Local Store Adapter Tuning
24.3.5
Cache Plug-In Tuning
24.3.5.1
Cache Hit Logic
24.3.5.2
Cache Plug-in Memory Management
24.3.6
LDAP Listener Tuning
24.3.7
Server Tuning
25
Oracle Identity Federation Performance Tuning
25.1
About Oracle Identity Federation
25.2
LDAP Tuning
25.2.1
Connection Pool Settings
25.2.2
Connection Settings
25.2.3
Federation Data Store Settings
25.3
Database Tuning
25.3.1
Data Sources
25.3.2
RDBMS Session Cache
25.3.3
RDBMS Compression
25.4
Oracle HTTP Server Tuning
25.5
SAML Protocol Tuning
25.5.1
SOAP Connections
25.5.2
XML Digital Signatures
25.5.3
POST and Artifact Single Sign-On Profiles
26
Oracle Fusion Middleware Security Performance Tuning
26.1
About Security Services
26.2
Detecting General Performance Issues
26.3
Oracle Platform Security Services Tuning
26.3.1
JVM Tuning Parameters
26.3.2
LDAP Tuning Parameters
26.3.3
Authentication Tuning Parameters
26.3.4
Authorization Tuning Properties
26.3.5
OPSS PDP Service Tuning Parameters
26.4
Oracle Web Services Security Tuning
26.4.1
Choosing the Right Policy
26.4.2
Policy Manager
26.4.3
Configuring the Log Assertion to Record SOAP Messages
26.4.4
Configuring Connection Pooling
26.4.5
Monitoring the Performance of Web Services
Part VI Oracle WebCenter Components
27
Oracle WebCenter Portal Performance Tuning
27.1
About Oracle WebCenter Portal
27.2
Basic Tuning Considerations
27.2.1
Setting System Limit
27.2.2
Setting JDBC Data Source
27.2.3
Setting JRockit Virtual Machine (JVM) Arguments
27.2.4
Using Content Compression to Reduce Downloads
27.3
Tuning WebCenter Portal Application Configuration
27.3.1
Setting Session Timeout for a Spaces Application
27.3.2
Setting HTTP Session Timeout
27.3.3
Setting JSP Page Timeout
27.3.4
Setting ADF Client State Token
27.3.5
Setting ADF View State Compression
27.3.6
Setting MDS Cache Size and Purge Rate
27.3.7
Configuring Concurrency Management
27.4
Tuning Back-End Component Configuration
27.4.1
Tuning Performance of the Announcements Service
27.4.2
Tuning Performance of the Discussions Service
27.4.3
Tuning Performance of the Instant Messaging and Presence (IMP) Service
27.4.4
Tuning Performance of the Mail Service
27.4.5
Tuning Performance of the Personal Events Service
27.4.6
Tuning Performance of the RSS News Feed Service
27.4.7
Tuning Performance of the Search Service
27.4.8
Tuning Policy Store Parameters
27.5
Tuning Portlet Configuration
27.5.1
Tuning Performance of the Portlet Service
27.5.2
Configuring Portlet Cache Size
27.5.3
Enabling Java Object Cache for WSRP Producers
27.5.4
Suppressing Optimistic Rendering for WSRP Portlets
27.5.5
Tuning Performance of Oracle PDK-Java Producers
27.5.6
Setting Portlet Container Runtime Options
27.5.7
Setting DefaultServedResourceRequiresWsrpRewrite for WSRP Portlets
27.5.8
Setting DefaultProxiedResourceRequiresWsrpRewrite for WSRP Portlets
27.5.9
Importing Consumer CSS Files in IFrame Portlets
27.5.10
Configuring Portlet Timeout
27.5.11
Tuning Performance of OmniPortlet
Part VII Capacity Planning, Scalability, and Availability
28
Capacity Planning
28.1
About Capacity Planning for Oracle Fusion Middleware
28.1.1
Capacity Planning Factors to Consider
28.2
Determining Performance Goals and Objectives
28.3
Measuring Your Performance Metrics
28.4
Identifying Bottlenecks in Your System
28.4.1
Using Clustered Configurations
28.4.2
Using Connection Pooling
28.4.3
Setting the Max HeapSize on JVM
28.4.4
Increasing Memory or CPU
28.4.5
Segregation of Network Traffic
28.4.6
Segregation of Processes and Hardware Interrupt Handlers
28.5
Implementing a Capacity Management Plan
28.5.1
Hardware Configuration Requirements
28.5.1.1
CPU Requirements
28.5.1.2
Memory Requirements
28.5.2
JVM Requirements
28.5.3
Managed Servers
28.5.4
Database Configuration
29
Using Clusters and High Availability Features
29.1
About Clusters and High Availability Features
29.2
Using Clusters with Oracle Fusion Middleware
29.3
Using High Availability Features with Oracle Fusion Middleware
Index
Scripting on this page enhances content navigation, but does not change the content in any way.