Skip Headers
Oracle® Secure Enterprise Search Administrator's Guide
11g Release 2 (11.2.1)

Part Number E17332-04
Go to Documentation Home
Go to Book List
Book List
Go to Table of Contents
Go to Index
Go to Feedback page
Contact Us

Go to previous page
Go to next page
PDF · Mobi · ePub

Tuning Search Performance and Scalability

Oracle SES contains features that you can tune to optimize search performance. This section contains suggestions on how to improve performance (such as response time and throughput) and scalability of Oracle SES. It identifies the most common ways to improve search quality.

Suggested Links

Suggested links enable you to direct users to a designated Web site for particular query keywords. For example, when users search for "Oracle Secure Enterprise Search documentation" or "Enterprise Search documentation" or "Search documentation", you could suggest

Suggested link keywords are rules that determine which suggested links are returned (as suggestions) for a query. A rule can include query terms and logical operators. For example, "secure AND search". With this rule, the corresponding suggested link is returned for the query "secure enterprise search", but it is not returned for the query "secure database".

The rule language used for the indexed queries supports the following operators:

Table 10-1 Suggested Link Keyword Operators

Operator Example




dog and cat


dog ; cat


dog or cat


dog sled






Do not use special characters, such as #, $, =, and &, in keywords.

Suggested links appear at the top of the search result list. Oracle SES can display up to two suggested links for each query.

This feature is especially useful for providing links to important Web pages that are not crawled by Oracle Secure Enterprise Search. Add or edit suggested links on the Search - Suggested Links page in the Oracle SES Administration GUI.

Authentication and Authorization

By tuning the security filter settings, you can prevent time outs.

To change the configuration of the security filter: 

  1. Log in to the Oracle SES Administration GUI.

  2. Click the Global Settings tab, then Query Configuration.

  3. Scroll down to Security Filter Configuration and change these settings using the guidelines provided in the Help.

    • Security Filter Lifespan

    • Authentication Timeout

    • Authorization Timeout

    • Minimum Number of Threads

    • Maximum Number of Threads

You can further tune the security filter by using the Administration API to set the <search:preserveStaleSecurityFilterOnError> and <search:securityFilterRefreshWaitTimeout> parameters in the queryConfig object. For example, these settings allow an expired security filter to be used immediately when a fresh security filter is unavailable:


The settings listed previously are also parameters of the queryConfig object and can be modified using the API. See the Oracle Secure Enterprise Search Administration API Guide.

Parallel Query and Index Partitioning

Parallel querying significantly improves search performance and facilitates searches of very large data sources. The query architecture is based on Oracle Database partitioning and enhancements in Oracle Text.

To make the best use of this feature, Oracle recommends that you run Oracle SES on a server with a 4-core CPU, with at least 8GB of RAM and multiple fast disk drives.

Parallel querying is automatically implemented on Oracle SES when the partitioning option is enabled. You can specify partitioning only during installation.

To enable partitioning: 

  1. Acquire a license for the Oracle Partitioning option.

  2. During installation, answer Yes when the Repository Creation Utility (RCU) asks if you have a partitioning license. Then Oracle Database is installed with partitioning, and Oracle SES automatically supports parallel query.

Storage Areas

Database tablespaces are registered as storage areas in Oracle SES. To make optimum use of the parallel querying feature, you should distribute partitioned tablespaces across all physical disks and register them with Oracle SES.

Use the Administration API to manage storageArea objects.

Configuring a Partition

Configuring a partition includes listing the storage areas, identifying the partitioning attribute, and updating the partitioning rules. Use the Administration API to manage the partitionConfig object.

See Also:

Oracle Secure Enterprise Search Administration API Guide for information about managing storage areas and partitions

Index Fragmentation

Index fragmentation management allows the search engine index to be updated while Oracle SES is executing searches. This is achieved by temporarily saving index changes to an in-memory index and periodically merging them with the larger disk-based search engine index. This reduces fragmentation and leads to faster response times. Index fragmentation management is implemented automatically on Oracle SES, but it can be tuned by configuring Oracle Text, where you can turn index fragmentation management on and off, and specify the frequency of index merges.

Optimizing the index also reduces fragmentation, and it can significantly increase the speed of searches. Schedule index optimization on a regular basis. Also, optimize the index after the crawler has made substantial updates or if fragmentation is more than 50%. Verify that index optimization is scheduled during off-peak hours. Optimization of a very large index could take several hours.

You can see the fragmentation level and run index optimization on the Global Settings - Index Optimization page in the Oracle SES Administration GUI. Index optimization has these options:

Do Not Run Optimization Longer Than

Specify a maximum duration for the index optimization process. The actual time taken for optimization does not exceed this limit, but it can be shorter. A longer optimization time results in a more optimized index. In this mode, the optimization process does not require a large amount of free disk space.

Until the Optimization is Finished

Specifies that the optimization continues until it is finished. Allowing the optimization to complete creates a more compact index and supports better performance than a partial optimization.

In this mode, Oracle SES creates a temporary copy of the index. The required disk space almost equals the current index size. If sufficient free disk space is not available, then the optimization fails. Use the appropriate SQL query shown here to estimate the minimum disk requirement:

  • Oracle SES Without Partitioning

    SELECT SUM(bytes)/1048576 AS "MBytes" 
       FROM dba_segments 
       WHERE segment_name IN ('DR$EQ$DOC_PATH_IDX$I','DR$EQ$DOC_PATH_IDX$X'); 
  • Oracle SES With Partitioning

    SELECT SUM(sz) AS "MBytes" 
          SELECT MAX(bytes)/1048576 sz FROM dba_segments 
             WHERE segment_name LIKE 'DR#EQ$DOC_PATH_IDX$%I' 
          SELECT MAX(bytes)/1048576 sz FROM dba_segments 
             WHERE segment_name LIKE 'DR#EQ$DOC_PATH_IDX$%X' 
       ) ; 

These queries return an estimate of the minimum disk space needed for optimization. Oracle SES may require more disk space than this estimate.

After the optimization is complete, Oracle SES releases the disk space consumed during the optimization. The space can be used by future crawls or any activity that consumes disk space.

Indexing Parameters

To improve indexing performance, adjust the following parameters on the Global Settings - Set Indexing Parameters page of the Oracle SES Administration GUI:

Indexing Batch Size

When the crawled data in the cache directory reaches Indexing Batch Size, Oracle SES starts indexing. The bigger the batch size, the longer it takes to start indexing each batch. Only indexed data can be searched: Data in the cache cannot be searched. The default size is 250M.

Document fetching and indexing run concurrently. While indexing is running, the Oracle SES crawler continues to fetch documents and store them in the cache directory.

Indexing Memory Size

This is the upper limit of memory used for indexing before flushing the index to disk.

A large amount of memory improves indexing performance because it reduces I/O. It also improves query performance because the created index is less fragmented from the beginning, while a fragmented index can be optimized later. Set this parameter as high as possible without causing memory paging.

A smaller amount of memory might be useful when indexing progress should be tracked or when run-time memory is scarce. The default size is 275M. In general, increasing the Indexing Memory Size parameter can reduce fragmentation.

Parallel Indexing Degree

The number of concurrent threads used for indexing. This parameter is disabled in the current version of Oracle SES; it is always set to 1.

Search Statistics

See the Home - Statistics page in the Oracle SES Administration GUI for lists of the most popular queries, failed queries, and ineffective queries. This information can lead to the following actions:

  • Refer users to a particular Web site for failed queries on the Search - Suggested Links page.

  • Fix common errors that users make in searching on the Search - Alternate Words page.

  • Make important documents easier to find on the Search - Relevancy Boosting page.

Once daily, SES automatically summarizes logged queries. The summarizing task might use the server resource if there are a large number of logged queries, which may impact query performance. This issue is visible for stress tests where several queries are executed every second. The ideal solution in such instances is to disable the query statistics option.

To disable the query statistics option: 

  1. From the Administration GUI Home page, select the Global Settings tab, then click Query Configuration.

  2. Under Query Statistics, select No for the Enable Query Statistics option.

Relevancy Boosting

Relevancy boosting lets administrators influence the order of documents in the result list for a particular search. You might want to override the default results for the following reasons:

  • For a highly popular search, direct users to the best results

  • For a search that returns no results, direct users to some results

  • For a search that has no click-throughs, direct users to better results

In a search, each result is assigned a score that indicates how relevant the result is to the search; that is, how good a result it is. Sometimes you know the documents that are highly relevant to some search. For example, your company Web site could have a home page for XML (, which you want to appear high in the results of any search for XML. You would boost the score of the XML home page to 100 for an XML search.

The document also has a score computed for searches that are not among the boosted queries.

Two methods can help you locate URLs for relevancy boosting: locate by search and manual URL entry.

Relevancy boosting, like end user searching, is case-insensitve. For example, a document with a boosted score for Oracle is boosted for oracle.

See "Customizing the Relevancy of Search Attributes".

Load Balancing on Oracle RAC

When Oracle SES is deployed in an Oracle Real Applications Cluster (Oracle RAC) environment, the usage profile is typically one of the following:

  • Small index with a large query load

  • Large index with a small-to-large query load

A third option, a small index and a small query load, typically operates on a single computer.

Configuring a Small Index

The load balancing solutions provided by Oracle RAC and the WebLogic Server are sufficient for this type of Oracle SES deployment. Most or all of the index can reside in memory or the buffer cache. You only need to set up the listeners appropriately for Oracle SES.

To set up the listeners: 

  • Provide a local listener on each Oracle RAC instance.

  • Do not configure remote listeners.

  • Oracle recommends dedicated processes over shared processes.

WebLogic Search Server Configuration

Oracle SES is installed in a WebLogic domain as described in "Secure Search in Oracle Fusion Applications". The default settings for stuck threads can result in slow query performance even under a moderate load.

To change the search server configuration 

  1. Log in to the WebLogic console, as described in "Accessing the Oracle WebLogic Server Administration Console".

  2. In the left panel under Change Center, click Lock & Edit.

  3. In the left panel under Domain Structure, expand Environment and click Servers. The Summary of Services page is displayed in the main panel.

  4. In the Name column, click search_server1. The Settings for search_server1 page is displayed.

  5. Select the Configuration tab.

  6. Configure these settings:

    • Stuck Thread Max Time: 3600

    • Stuck Thread Timer Interval: 1800

  7. Click Save.

  8. Repeat these steps for any other search server instances, such as search_server2.

  9. In the left panel under Change Center, click Activate Changes.

Database Initialization Parameters

To support a large number of simultaneous users, you may need to increase the values of these database initialization parameters:




In Fusion Applications, the Oracle SES middle tier uses connection pooling to communicate with the backend database. The database connection uses dedicated server mode, so that when 10 users run concurrent searches, the database requires 10 user processes.

The crawler also uses several threads, and each thread uses several database connections. You can alter the number of crawler threads on the Home - Sources - Crawling Parameters page of the Oracle SES Administration GUI.

Use the combined estimate of concurrent user processes and crawler threads for the value of PROCESSES. Then modify SESSIONS to a compatible value, typically calculated as 1.1 * PROCESSES.

You can monitor the number of open cursors using the statistics stored in the V$SESSTAT dynamic performance view. If the number of open cursors for user sessions frequently approaches the maximum, then you can increase that number.

See Also:

To change the database initialization parameters: 

  1. Open SQL*Plus and log in to Oracle Database as a privileged user, such as SYSTEM.

  2. For a list of all initialization parameters and their current settings, issue this SQL*Plus command:

    show parameters
  3. Issue ALTER SYSTEM commands, using values appropriate for your system, to change the value of the parameters. For example, this command sets PROCESSES to 800:

    ALTER SYSTEM SET processes=800 SCOPE=spfile;
  4. Restart Oracle Database for the new settings to take effect.

Oracle UNDO Tablespace

Heavy query load should not coincide with heavy crawl activity, especially when there are large-scale changes on the target site. If it does, such as when a crawl is scheduled around the clock, then increase the size of the Oracle UNDO tablespace with the UNDO_RETENTION parameter.

See Also:

Oracle Database SQL Language Reference and Oracle Database Administrator's Guide for more information about increasing the Oracle undo space

Buffer Cache

An Oracle SES search operation looks up the Oracle Text index and some internal tables to generate a hit list. To maintain the best search performance, reduce disk I/O as much as possible by keeping these objects in the buffer cache. If you have plenty of physical memory, you can enlarge the buffer cache so it can retain these objects.

The search operation accesses these database objects the most frequently:

Object Name Partitioned Object Name Object Type

$X and $R are the most important and are typically smaller than $I. If the database has large KEEP pool or can support one, consider putting the $X and $R tables in it to maintain good performance when accessing them. While the $I table is also important for search, it can become too large to cache in its entirety.

Check the cache hit ratio for these objects regularly in Enterprise Manager or an Automatic Workload Repository (AWR) report. Crawling and optimization can change the size of these objects.

To put a table in the KEEP pool:  

  1. Open SQL*Plus or another SQL interface and connect as a privileged user.

  2. Issue an ALTER INDEX command using this syntax, where table_name is the $R or $X table.

  3. Verify the new location of the table:

    SELECT buffer_pool FROM dba_indexes WHERE index_name = table_name;

Example 10-1 shows the SQL commands that put the $X file in the KEEP pool.

Example 10-1 Putting DR$EQ$DOC_PATH_IDX$X in the KEEP Pool

SQL> SELECT buffer_pool FROM dba_indexes WHERE index_name='DR$EQ$DOC_PATH_IDX$X';
Index altered.
SQL> SELECT buffer_pool FROM dba_indexes WHERE index_name='DR$EQ$DOC_PATH_IDX$X';