Monday, 9 April 2012

Oracle STATS collection. 



Optimizer statistics are a collection of data that describe more details about the database and the objects in the database. These statistics are used by the query optimizer to choose the best execution plan for each SQL statement. Optimizer statistics include table statistics (number of rows,number of blocks,average row length etc..),column statistics (number of  NULLs, cardinality, histograms etc..),Index statistics and System statistics. Since the data in the DB  constantly  changes its very important the STATs are updated properly. Otherwise this will cause serious performance issues.

Automatic Optimizer STATS Collection.

By default 11g have Auto STATs collection enabled during DB  maintenance windows. This is the suggested method for STAT collection. 
Automatic optimizer statistics collection gathers optimizer statistics by calling the DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC procedure. The GATHER_DATABASE_STATS_JOB_PROC procedure collects statistics on database objects when the object has no previously gathered statistics or the existing statistics are stale because the underlying object has been modified significantly (more than 10% of the rows).The DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC is an internal procedure, but it operates in a very similar fashion to the DBMS_STATS.GATHER_DATABASE_STATSprocedure using the GATHER AUTO option. The primary difference is that the DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC procedure prioritizes the database objects that require statistics, so that those objects which most need updated statistics are processed first. This ensures that the most-needed statistics are gathered before the maintenance window closes

Disabling auto stat collection (use ENABLE if at all you need to enable)
BEGIN
  DBMS_AUTO_TASK_ADMIN.DISABLE(
    client_name => 'auto optimizer stats collection', 
    operation => NULL, 
    window_name => NULL);
END;
/

Use following query to verify scheduled jobs are running. Here you can find AUTO STAT ran fine


select * from dba_autotask_client ;
You can check the history of this job using the following query . This way we can figure out Auto STATs on a given date ran fine.
SELECT *FROM dba_autotask_client_history
select * from dba_autotask_job_history

make sure background process CJQ0 is running for AUTO STAT to be successful. You can enable the parameter JOB_QUEUE_PROCESSES (maybe to 1000 ) and this will start the CJQ0 process. 

Manual STATS Collection

Even though we have an automated job for collecting STATS regularly, lot of scenarios will come where we need to collect STATS manually for a table,schema or for an index etc..Examples are say you have a table which got truncated and loaded with huge amount of data, the subsequent select on this table will become slow. You have a table where data changes continually than 10%, these are good candidates for collecting STATS.

The DBMS_STATS package can gather statistics on table and indexes and individual columns and partitions of tables
GATHER_INDEX_STATSIndex statistics
GATHER_TABLE_STATSTable, column, and index statistics
GATHER_SCHEMA_STATSStatistics for all objects in a schema
GATHER_DICTIONARY_STATSStatistics for all dictionary objects
GATHER_DATABASE_STATSStatistics for all objects in a database

Collecting Schema Stats

EXEC DBMS_STATS.gather_schema_stats (ownname => 'SYSADM', cascade =>true,estim
ate_percent => dbms_stats.auto_sample_size);
Collecting table stats

EXEC DBMS_STATS.gather_table_stats ('SCHEMA_NAME','TABLE_NAME',cascade=>true,estimate_percent => 5)
Few parameters of interest

cascade- will include all related indexes also.
Using this option is equivalent to runninggather_table_stats plus running gather_index_stats for each index on the table
estimated_percent- decides the sample size. Auto is default in 11g and oracle decides what percentage (sample_size) to take. In Oracle 11g, the AUTO_SAMPLE_SIZE constant is the preferred sample size as the mechanism for determining the actual sample size has been improved. In addition, the statistics estimate based on the auto sampling are near to 100% accurate and much faster to gather than in previous versions. Sample size is notyhing but how much rows you are taking for calculating the STATS. If you are not giving this parameter it will take all rows and SAMPLE_SIZE will be equel to number of rows. SAMPLE_SIZE and NUM_ROWS can be found from dba_tables. 
Degree- to parallelize the collection of statistics. degree=>x (where is the degree of parallelism, depends processors available and other parallel settings on DB)




Tuesday, 21 February 2012

SSL Implementation-Peoplesoft


SSL Implementation-Peoplesoft

SSL Handshake- Simple explanation




1.The client sends a client "hello" message that lists the cryptographic capabilities of the client (sorted in client preference order), such as the version of SSL, the cipher suites supported by the client, and the data compression methods supported by the client. The message also contains a 28-byte random number.
2.The server responds with a server "hello" message that contains the cryptographic method (cipher suite) and the data compression method selected by the server, the session ID, and another random number. The server also sends digital certificate which contains server’s public key.
Note: The client and the server must support at least one common cipher suite, or else the handshake fails. The server generally chooses the strongest common cipher suite.
3.The server sends its digital certificate and this contains servers public key If the server uses SSL V3, and if the server application (for example, the Web server) requires a digital certificate for client authentication, the server sends a "digital certificate request" message. In the "digital certificate request" message, the server sends a list of the types of digital certificates supported and the distinguished names of acceptable certificate authorities.
4.The server sends a server "hello done" message and waits for a client response.
5.Upon receipt of the server "hello done" message, the client (the Web browser) verifies the validity of the server's digital certificate and checks that the server's "hello" parameters are acceptable.
If the server requested a client digital certificate, the client sends a digital certificate, or if no suitable digital certificate is available, the client sends a "no digital certificate" alert. This alert is only a warning, but the server application can fail the session if client authentication is mandatory.
6.The client sends a "client key exchange" message. This message contains the pre-master secret, a 46-byte random number used in the generation of the symmetric encryption keys and the message authentication code (MAC) keys, encrypted with the public key of the server.
If the client sent a digital certificate to the server, the client sends a "digital certificate verify" message signed with the client's private key. By verifying the signature of this message, the server can explicitly verify the ownership of the client digital certificate.
Note :An additional process to verify the server digital certificate is not necessary. If the server does not have the private key that belongs to the digital certificate, it cannot decrypt the pre-master secret and create the correct keys for the symmetric encryption algorithm, and the handshake fails.
7.The client uses a series of cryptographic operations to convert the pre-master secret into a master secret, from which all key material required for encryption and message authentication is derived. Then the client sends a "change cipher spec" message to make the server switch to the newly negotiated cipher suite. The next message sent by the client (the "finished" message) is the first message encrypted with this cipher method and keys.
8.The server responds with a "change cipher spec" and a "finished" message of its own.
9.The SSL handshake ends, and encrypted application data can be sent.


How SSL can be configured in Peoplesoft


What all we need for SSL in Peoplesoft?

1.      Webserver’s private key
2.      The web server's public key, digitally signed by a trusted certificate authority (CA), like verisign.
3.      The digitally signed public key of the same CA that signed the web server's key
A public key is transferred and stored as a data element in a digital certificate or a certificate signing request (CSR). You can obtain public keys from a variety of sources in several different formats.
When setting up SSL, you need to:
  • ensure that the encryption keys are correctly formatted.
  • install them in the keystore.
  • configure them using the Administration Console
Generate new key and CSR:
In PT8.49/PT8.50 as in prior versions of PeopleTools, we use pskeymanager to facilitate the SSL setup. This script is located under the following directory:
For PT8.49/8.50: <PS_HOME>/webserv/<DOMAIN>/bin.
For PT8.51: <PS_HOME>/webserv/<DOMAIN>/piabin
  1. Generate key using pskeymanager –createm (For usage information, enter pskeymanager -help.)
  2. Follow the prompts and enter the requested information to create a new private key and a CSR for your web server.
    1. Pskeymanager uses the keystore in PIA_HOME\webserv\domain_name\keystore\pskey, with a default password of password.
    2. Pskeymanager prompts you for an alias for the new keys, for example, ServerABC. This is the name you'll use to refer to the keys in the future.
    3. Pskeymanager prompts you for distinguished name fields. Enter the appropriate values for your organization.
    4. Pskeymanager prompts you for information about the CSR expiration date, key size, key algorithms, and the private key password. All of these fields have default values.
Pskeymanager creates the private key inside the keystore, and creates the CSR as a file called ServerABC_certreq.txt in the current directory. You use the CSR (certificate signing request) to obtain your signed public key certificate and a root certificate from a CA.


  1. Submit the new CSR to your Certification Authority, a.k.a. CA (they will issue a new certificate for your     server). The process may slightly change depending on which CA you selected. I continue the process taking Verisign as an example. In your organizations you will have different CAs.
  2. Open your CSR file in a text editor and copy its entire contents, including the first and last lines:
-----BEGIN NEW CERTIFICATE REQUEST-----
...
...
-----END NEW CERTIFICATE REQUEST-----
5.      Access Verisign's test certificate enrollment site at https://www.verisign.com/ssl/buy-ssl-certificates/free-ssl-certificate-trial/index.html.
Verisign guides you through the CSR submission process, including:
    1. Accepting the Verisign license agreement.
    2. Entering your technical contact information, which includes the email address where Verisign can send your signed public key.
    3. Pasting your CSR contents in the provided text field.
    4. Verifying your CSR.
    5. Confirming and submitting your order.
Verisign also provides its own digitally signed public key in a certificate, which is known as a trusted CA certificate, a root certificate, or a chain certificate.
6.      Download the VeriSign test CA root certificate from http://digitalid.verisign.com/cgi-bin/getcacert.
When prompted, save getcacert.cer to PIA_HOME\webserv\domain_name.
7.      Check your email.
Verisign digitally signs your web server's public key, then returns it to you in a certificate, called the server certificate. Following is an example of the contents of a server certificate:
8.      Copy the entire certificate contents, and save it as a text file called ServerABC-cert.pem in PIA_HOME\webserv\domain_name.
Be sure to include the first and last lines.If you need to FTP the file to a unix box make sure to use ASCII mode.
9.      Once you have the 2 files (root CA and certificate) edit root CA and do a <Select All>, and then <Copy>. Then edit your certificate file and paste the rootCA contents at the bottom of the server certificate. Certificate file will look like this.
-------BEGIN CERTIFICATE---------
dfsfsdfdf
sfsdfwehdfhdf <---------certificate
dgdfgfgfdg
--------END CERTIFICATE-----------
-------BEGIN CERTIFICATE---------
hghjgfjgj
sfsdfwejjhdfhdf <---------intermediate
dgdfgiuiyuiuiyufgfdg
--------END CERTIFICATE-----------
(Your server certificate must contain, in addition to the web server's public key, any keys necessary to establish a chain of trust that culminates in the self-signed root certificate of a trusted root CA. That CA's root certificate must be in the keystore of any browser that's used to access your web server. Most browsers have an extensive set of trusted root certificates in their keystores.)
10.  Import the Root CA first:
pskeymanager -import
When prompted for an Alias, enter anything, such as RootCA
When prompted for the name of the certificate file, enter RootCA.cer
If asked if you want to trust this file, say yes.
11.   Import the server certificate (concatenated file):
pskeymanager -import
When prompted for an Alias, enter the same alias you specified when you created the CSR (step 3 of the above section).
When prompted for the name of the certificate file
When prompted for the key password, enter the password you specified when you created the key/CSR (this password is unrecoverable)
If asked if you want to trust this file, say yes.
12.   Setup SSL in the Admin Console: -weblogic console

Log into the Admin Console: http://hostname:admin_port/console
On the Change Center:
Lock and Edit
Go to:
Domain Structure <Environments> Servers
Click on PIA or the server you want to configure for SSL.
Go to the "Keystores" tab.
Select 'Custom Identity And Custom Trust' from the Keystores dropdown field
Verify that the Custom Identity and Trust keystore and password are correct. The default pskey keystore is "password"
Click on the "Save" button.
Go to the "SSL" tab
Select "Keystores" from the "Identity and Trust Locations" dropdown field
Enter the Private Key Alias: same alias as in the step 3 of the "Generate new key" section..
Enter the Private Key Password: same password as in the step 3 of the "Generate new key" section..
Click on the "Save" button.
Activate Changes.
Restart the Web Server.

Wednesday, 25 January 2012

Appserver loadbalancing and failover


Appserver loadbalancing and failover

appserver loadbalancing or failover are specified in configuration.properties file located in webserver directory. psserver parameter is edited according to our needs. some examples are given below.

1. psserver=host1:port1#wt1,Host2:port2#wt
eg: psserver=host1:9000#3,host2:9050#1
In this case, appserver running on host1 would receive 3x more requests than appserver2 running on host2


2. psserver=<host>:<port>#wt{failover servers}-failover string is added in curly brackets.
eg: psserver=host1:9000{host2:9020}
if host1 fails host2 will take up. 


3. psserver=Host1:9000#3{Host3:9080#3,Host4:9070#1},Host2:9020#1
In this case host3 and 4 are the failover servers for host 1. means if host1 is down host3 and host4 will replace it. host3 and host 4 will do a weighted load balancing also as specified. 




4.sequential backup with r failover string
psserver=Host1:9000#4{Host3:9010;Host4:9020},Host2:9030#1
In this case, the system assigns Host 4 the requests when both Hosts 1 and 3 are down.

MEMORY_TARGET parameter in Oracle11g

MEMORY_TARGET,MEMORY_MAX_TARGET parameters are introduced in oracle 11g. Using these parameters, you can manage SGA and PGA together rather than managing them separately (using SGA_TARGET, SGA_MAX_SIZE , PGA_AGGREGATE_TARGET and WORKAREA_SIZE_POLICY in 10g).

Before 11g we used SGA_TARGET and SGA_MAX_SIZE parameters to dynamically size SGA components such as SHARED_POOL_SIZE,LARGE_POOL_SIZE,JAVA_POOL_SIZE. PGA was controlled separately using GA_AGGREGATE_TARGET and WORKAREA_SIZE_POLICY in 10g.

From 11g, if we are using MEMORY_TARGET parameter, SGA and PGA sizes are controlled dynamically using this parameter. If you set SGA_TARGET, SGA_MAX_SIZE and PGA_AGGREGATE_SIZE to 0 and set MEMORY_TARGET (and optionally MEMORY_MAX_TARGET) to non zero value, Oracle will manage both SGA components and PGA together within the limit specified by you.


The Memory_Max_Target Parameter
this is similar to sga_max_size. Memory_max_target provides for a maximum size that you can dynamically increase memory_target to. Therefore, within the constraints of memory_max_target, you can easily adjust the overall memory allocated to the database at any given time, dynamically.
Oracle will always configure the memory_max_target parameter if it is not set manually with a derived value. This derived value is set to a value equal to the value of the memory_target parameter. Oracle will set memory_max_target to a value of 0 if memory_target is not set. If memory_target is not set and memory_max_target is set to a value greater than zero, then you can modify memory settings dynamically by changing memory_target, or by dynamically altering the other specific memory parameter settings. The figure below illustrates the auto memory parameter dependency.



For instance :
If MEMORY_TARGET is set to 1024MB, Oracle will manage SGA and PGA components within itself.

If MEMORY_TARGET is set to non zero value:

  • SGA_TARGET, SGA_MAX_SIZE and PGA_AGGREGATE_TARGET are set to 0, 60% of memory mentioned in MEMORY_TARGET is allocated to SGA and rest 40% is kept for PGA.
  • SGA_TARGET and PGA_AGGREGATE_TARGET are set to non-zero values, these values will be considered minimum values.
  • SGA_TARGET is set to non zero value and PGA_AGGREGATE_TARGET is not set. Still these values will be autotuned and PGA_AGGREGATE_TARGET will be initialized with value of (MEMORY_TARGET-SGA_TARGET).
  • PGA_AGGREGATE_TARGET is set and SGA_TARGET is not set. Still both parameters will be autotunes. SGA_TARGET will be initialized to a value of (MEMORY_TARGET-PGA_AGGREGATE_TARGET).
With this version, oracle has become smart as in exchanging memory between SGA and PGAs. This is a huge achievement.
When starting up, Oracle takes up memory equal to MEMORY_TARGET (or MEMORY_MAX_TARGET if mentioned) from Operating System RAM and manage its reqources within itself.
This feature helps DBA to allocate chunk of memory to a particular instance without worrying about the subcateogary allocations of different components.





Relationship of Memory Parameters

Wednesday, 11 January 2012

Symlink requirement for UNIX servers (For oracle10g and 11g from PT848 and above)


Symlink requirement for UNIX servers (For oracle10g and 11g from PT848 and above)

A specific PeopleTools release is compatible with the Oracle database version it was released on, as well as any subsequent Oracle database version supported by PeopleTools. Out of the box, PeopleTools will work with Oracle 9i. However, for Oracle 10g and 11g a symlink is required (Note: This is not required for IBM AIX).
In Oracle 10g the Oracle shared library name is libclntsh.xx.10.1 and In Oracle 11g, the Oracle shared library name is libclntsh.xx.11.1 while PeopleTools looks for libclntsh.xx.9.0.
In order for Application Server to boot up and PSRUN.MAK to run successfully, a Unix symlink must be defined from libclntsh.xx.10.1 or libclntsh.xx.11.1 to libclntsh.xx.9.0 (Note: The '.xx' suffix is platform specific. Solaris, Linux, and HP-Itaniumuse '.so'; HP-PARISC uses '.sl'). To accomplish this:

1) Log in as the Oracle owner.
2) cd $ORACLE_HOME/lib
3) Depending on your platform, create the symlink:
a) For Oracle10g on Solaris, RH 4.0, SuSE 9.0, or HP-Itanium, execute the following command to establish the symlink:
ln -s $ORACLE_HOME/lib/libclntsh.so.10.1 libclntsh.so.9.0
b) For Oracle10g on HP-PARISC, execute the following command to establish the symlink:
ln -s $ORACLE_HOME/lib/libclntsh.sl.10.1 libclntsh.sl.9.0

a) For Oracle 11g on Solaris, RH 4.0 or HP-Itanium, execute the following command to establish the symlink:
ln -s $ORACLE_HOME/lib/libclntsh.so.11.1 libclntsh.so.9.0
b) For Oracle 11g on HP-PARISC, execute the following command to establish the symlink:
ln -s $ORACLE_HOME/lib/libclntsh.sl.11.1 libclntsh.sl.9.0
After the symlink is established, you may rerun PSRUN.MAK or boot up the Servers. manually.


To Remove the symlink simply use the command rm. 
1. Do ls -l to list the files that is created through symlink.  They  will have l in front of them:
lrwxrwxrwx   1 oracle   dba           48 Jul  7 13:48 libclntsh.so -> /ds2/oracle/11.1.0.7-64bit/lib/libclntsh.so.11.1
lrwxrwxrwx   1 oracle   dba           43 Nov  5 11:28 libclntsh.so.10.1 -> /ds2/oracle/11.1.0.7-64bit/lib/libclntsh.so
-rwxr-xr-x   1 oracle   dba            0 Nov  5 11:30 libclntsh.so.11.1
2. Issue rm command
 rm libclntsh.so
When u remove this symlink file, the original file stays.

IB Issues

Same PUBSUB Domain Seen Mulitple Times on the Domain Status Page
We’ve configured to integration broker domains for our DB. One is running on host01, the other on host02. When I navigate to PeopleTools à Integration Broker -> Service Operations Monitor -> Administration->Domain Status page,
I should see only two Integration Broker Domains in the Domains section. Instead I am seeing 6. I’ve tried the following:
· Verified only the two IB application server domains have Pub/Sub services configured/running.
· Recycled all application server domains with cache cleared.
· Verified that no other application server domains are running up against the database.

Solution
The fact that duplicate rows were being entered into the tables update when Purge Domain Status push button is clicked, indicated that there was a problem with the keys/indexes on the tables. The key fields on the three tables involved are:PSAPMSGDOMSTAT - Machinename and appserver_path PSAPMSGDSPSTAT - DispatcherName , Machinename, appserver_pathPSAPMSGQUEUESET - DispatcherName , Machinename, appserver_path, dataseqno Since there are key fields, then there should be a key index for each of the tables. Using the SQL tool it was noted that none of the tables had the key index built.Without the indexes built duplicate rows were being inserted into the tables. Using Appdesigner create all indexes for these records


"Purge Domain Status" Fails to Remove all Domains
"Purge Domain Status" does not purge all domains from the domain status list. After hitting the refresh button, the secondary (new) domain comes back, but the domain is inactive. The expected behavior is that when "Purge Domain Status" is clicked, the primary (inactive) domain would disappear, and the secondary (new) domain would remain.

The following SQL can help to identify the invalid / incorrect data:
select * from PSAPMSGQUEUESET
select * from PSAPMSGDSPSTAT
select * from PSAPMSGDOMSTAT

delete the invalid rows which will resolve the issue
1) Clear the table manually using the following type of sql:
DELETE FROM PSAPMSGDSPSTAT WHERE MACHINENAME <>:1 OR (APPSERVER_PATH <>:2 AND MACHINENAME=:3)
DELETE FROM PSAPMSGDOMSTAT WHERE MACHINENAME <>:1 OR (APPSERVER_PATH <>:2 AND MACHINENAME=:3)
DELETE FROM PSAPMSGQUEUESET WHERE MACHINENAME <>:1 OR (APPSERVER_PATH <>:2 AND MACHINENAME=:3)
where MACHINENAME is the name of the machine of the appserver domain where the PIA request is handled.APPSERVER_PATH is the PS_SERVDIR of the appserver domain where the PIA request is handled.

Tuesday, 3 January 2012

What is JVM Heap Size

This is a parameter which normally creates issues in our webserver configurations.

The Java virtual machine heap space is the memory region where the Java objects (both live and dead) resided. When the Java heap runs out of space, the Java Garbage Collector is invoked to deallocate unreferenced objects and free up more space for the program to continue its operation. The JVM cannot service user requests during garbage collections. Many customers have their JVM heap size set to a minimum heap size of 64MB and maximum size of 256MB. Setting the JVM heap size to a greater minimum value (preferably equal to the maximum value) avoids the performance hit incurred by dynamically growing the JVM and improves predictability; it also lessens the frequency of JVM garbage collection.

The Java options, including the JVM heap size, that are used by WebLogic Server are stored in your WebLogic domain's setEnv.cmd(.sh). If you need to adjust any of the java options, including changing the JVM heap size you must manually edit WebLogic's setEnv script. The following two parameters, -Xms and -Xmx, respectively control the JVM min and max heap size, -Xms defines the minimum heap and -Xmx defines the maximum heap size. For performance reasons, it is recommended that both, min and max are set to the same value.Adjust the heap size as follows:
1) Edit the setEnv.cmd/sh script:
-For WebLogic 8.1, it is located in /webserv/
-For WebLogic 9.2 and 10.3, it is located in /webserv//bin
2) You will see a JAVA_OPTIONS parameter in this format: JAVA_OPTIONS_Where is the OS Platform that the web server is on.
3) This "JAVA_OPTIONS_" parameter is where the min/max heap settings are defined. Edit this parameter and adjust the heap settings.For example, to change the min/max heap settings from 256mg to 1gb on a Linux platform, you would change the JAVA_OPTIONS_LINUX parameter from:
JAVA_OPTIONS_LINUX="-jrockit -XnoOpt -XXnoJITInline -Xms256m -Xmx256m -Dtoplink.xml.platform....
to
JAVA_OPTIONS_LINUX="-jrockit -XnoOpt -XXnoJITInline -Xms1024m -Xmx1024m -Dtoplink.xml.platform....

The heap setting that you need to use, depends on environmental factors such as: -Number of users accessing the PeopleSoft application -Session Timeout setting (additional heap memory is needed for higher timeout settings, since the session information is stored in the java heap) -Types of transactions that users are runningIn a production environment, Oracle recommend a minimum heap setting of 512mg. But you may need to set heap higher depending on above factors. If the WebLogic java process runs out of java heap, it will log an 'OutOfMemory' error to file PIA_weblogic.log (and users may receive 'Error 500--Internal Server Errors').If you wish to analyze heap usage in your PeopleSoft environment, you may want to enable Verbose Garbage Collection as per the following document in metalink
Doc #759137.1: What is Verbose Garbage Collection (verbosegc) and How do I Enable it on WebLogic?

From metalink
PeopleTools 8.44-8.50, Weblogic uses a 32-bit Java version, which means that the java process is allowed only 4gb for java heap/native heap/executables . Therefore, if you set the java heap setting too high, the java process may not have enough memory remaining for native heap. So we recommend that you set heap no higher than 1.5GB, as this will allow extra memory for the native heap. If using JRockit, which uses more native memory than other Java brands, then the java heap setting may need to be even lower than 1.5GB.Also, note that when running WebLogic as a Window service, more memory overhead is needed for the service. Therefore you may need to make some adjustments to the heap size, when running as a Windows service.

Starting with PeopleTools 8.51, Weblogic uses a 64-bit Java version. So you can set your heap considerably higher as long as you have enough memory available on the web server. Note that if you use a larger heap setting (eg 4GB), then garbage collection may take longer. When garbage collection occurs, the "world stops", so there will be a momentary pause in processing transactions. So if you find that your environment requires a large java heap, then you may want to consider adding additional PIA's to your environment. For example, instead of having one WebLogic PIA with 8gb of heap, you could have two WebLogic PIA's, each with 4gb heap.