Socket based application - Performance Issues - Suggestions Needed

Hi All,
We have an application which basically has been developed using core java. Here is a high level information about the application:
a) It opens a serversocket which allows clients to connect to it.
b) For every new client connection, a separate thread is created and this thread deals with requests from clients, processing the data and replying back to clients.
c) Each socket is polled continuously and sockettimeout is 2 seconds. If there is a timeout, we handle the situation and socket is again read. So basically sockets is read every 2 seconds. If number of timeouts reaches a configurable value, we close the connection and thread is dropped as well.
d) In production, three instances of this application are running with the help of a cisco load balancer. It is there for last 5 years.
However there has always been some minor performance isssues and we have sorted them out using different types of garbage collectors, by introducing hardware load balancers, upgrading the code for new Java versions. It is currently running on 1.4.2.
However there has always been some performance issues and today while googling over internet I came across following on the bea website which says that core java sockets are not as efficients as native API. BEA has implemented its own APIs for weblogic. My queries are:
a) Are there any better Java Socket/network API (for solairs, I know Java is plateform independenet but there could be lib which also using native libs) which are much more efficient than Core Java.
b) We are getting the InputStream/OutputStream and creating objects of DataInputStream/DataOutputStream to read the data 'Byte-By-Byte'. Each byte can have different information thats why it is required. Are there any better way of getting info than what we are currently doing.
c) As I mentioned, we are continously polling the socket for read operation with a timeout value of 2 seconds. What is the better among the following from performance point of view: (1) Frequent read operation with a lesser timeout value or (2) Less Frequent read operations with larger timeout value. (3) Any better idea??
Please suggest few things or pointers which I could do to improve the performance of the applcations. Many thanks.
Thanks,Akhil
From BEA website:-
"Although the pure-Java implementation of socket reader threads is a reliable and portable method of peer-to-peer communication, it does not provide the best performance for heavy-duty socket usage in a WebLogic Server cluster. With pure-Java socket readers, threads must actively poll all opened sockets to determine if they contain data to read. In other words, socket reader threads are always "busy" polling sockets, even if the sockets have no data to read. This unnecessary overhead can reduce performance."

My recommendations:
- Always use a BufferedInputStream and BufferedOutputStream around the socket streams
- Increase the socket send and receive buffers to at least 32k if you are on a Windows platform where the default is a ridiculous 8k, which hasn't been enough for about 15 years.
- Your 2-second timeout is far too short. Increase it to at least 10 seconds.
- Your strategy of counting up to N short timeouts of S seconds each is completely pointless. Change it to one single timeout of N*S seconds. There is nothing to be gained by the complication you have introduced to this.

Similar Messages

  • Client/server socket based application

    hi does anyone have example of client/server socket based application using Spring and Maven
    where application do the following
    Client sends a request with a path to any file on the server
    „h Server reads the file and responds back with the content
    „h Client outputs the content to the console
    am trying to follow this
    http://www2.sys-con.com/itsg/virtualcd/java/archives/0205/dibella/index.html
    http://syntx.io/a-client-server-application-using-socket-programming-in-java/
    am using java 6

    i have attempt code but i wht to do the following
    client/server socket based application that will read the content of a file and stream the content of the file to the client. The client must simply output the content of the file to the console using System.out. The client must be able to run in a standalone mode (non-network mode) or in a remote mode.
    Additionally the client must be designed in a way that i can print the output to a console but must be interchangeable where if requirements change i can persist the response to file or persist the response to a database.
    /* Server.java*/
    ///ifgetBoolen= true then...
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import java.sql.*;
    public class Server
        static String array[][];
        // STEP 1 a1  
        // Server socket
        ServerSocket listener;
        // STEP 1 a2 Client connection
        Socket client;
        ObjectInputStream in;
        ObjectOutputStream out;
        public void createConnection() throws IOException
                System.out.println("\nSERVER >>> Waiting for connection.....");
                client = listener.accept();
                String IPAddress = "" + client.getInetAddress();
                DisplayMessage("SERVER >>> Connected to " + IPAddress.substring(1,IPAddress.length()));
          public void runServer()
            // Start listening for client connections
            // STEP 2
            try
                listener = new ServerSocket(12345, 10);
                createConnection();
                  // STEP 3
    //              processConnection();
            catch(IOException ioe)
                DisplayMessage("SERVER >>> Error trying to listen: " + ioe.getMessage());
        private void closeConnection()
            DisplayMessage("SERVER >>> Terminating connections");
            try
                if(out != null && in != null)
                      out.close();
                    in.close();
                    client.close();                
            catch(IOException ioe)
                DisplayMessage("SERVER >>> Closing connections");
        public static void define2DArray(ResultSet RS, int Size)
            try
                ResultSetMetaData RMSD = RS.getMetaData();
                DisplayMessage("SERVER >>> Requested arraySize: " + Size);
                if (RS.next())
                    array = new String[Size][RMSD.getColumnCount()];
                    for (int Row = 0; Row < Size; Row++)
                        for (int Col = 0; Col < RMSD.getColumnCount(); Col++)
                            array[Row][Col] = new String();
                            array[Row][Col] = RS.getString(Col+1);
                            DisplayMessage(array[Row][Col] + " ");
                        RS.next();
                else
                    array = new String[1][1];
                    array[0][0] = "#No Records";
            catch (Exception e)
                DisplayMessage("SERVER >>> Error in defining a 2DArray: " + e.getMessage());  
        public static void DisplayMessage(final String IncomingSMS)
            System.out.println(IncomingSMS);
    //client
    * @author
    import java.io.*;
    import java.net.*;
    import javax.swing.*;
    public class ClientSystem
        static Socket server;
        static ObjectOutputStream out;
        static ObjectInputStream in;
        static String Response[][];
        static boolean IsConnected = false;
        static int Num = 0;
        public static void connectToServer() throws IOException
            server = new Socket("127.0.0.1", 12345);
    //        server = new Socket("000.00.98.00", 12345);
            String IPAddress = "" + server.getInetAddress();
            DisplayMessage("\nCLIENT >>> Connected to " + IPAddress.substring(1,IPAddress.length()));
        public static void getStreams() throws IOException
            out = new ObjectOutputStream(server.getOutputStream());
            out.flush();
              in = new ObjectInputStream(server.getInputStream());
              IsConnected = true;
              DisplayMessage("CLIENT >>> Got I/O streams");  
        public static void runClient()
            try
                connectToServer();
                getStreams();
                  DisplayMessage("CLIENT >>> Connection successfull....\n");
                  DisplayMessage("CLIENT >>> Want to talk to server");
            catch (IOException ioe)
                System.out.print("."+Num);
                Num++;
        public static void closeConnection()
            try
                out.close();
                in.close();
                server.close();  
            catch(IOException error)
                DisplayMessage("CLIENT >>> Could not close connections");
        public static void Start()
            System.out.print("\nCLIENT >>> Attempting connection.....");
            try
                IsConnected = false;
                while (IsConnected == false)
                    runClient();
                    if (IsConnected == false)
                        Thread.sleep(100);
            catch (Exception e)
                DisplayMessage("CLIENT >>> Attempting connection.....");
        public static String sendSMS(String sms)
            Response = new String[0][0];
            try
                DisplayMessage("CLIENT >>> " + sms);
                out.writeObject(sms);
                out.flush();
                Response = (String[][])in.readObject();
                DisplayMessage("CLIENT >>> Waiting for server to respond...");
                for (int Row = 0; Row < Response.length; Row++)
                    System.out.printf( "_SERVER >>> \t");
                    for (int Col = 0; Col < Response[Row].length; Col++)
                        //DisplayMessage( "_SERVER >>> " + Response[Row][Col] + " ");
                        System.out.printf( "%s\t", Response[Row][Col]);
                    System.out.println();
                DisplayMessage("CLIENT >>> Query processed successfully....\n");
            catch(ClassNotFoundException cnfe)
                DisplayMessage("CLIENT >>> Class not found for casting received object");
            catch(IOException ioe)
                reConnect();          
            catch (Exception sqle)
                DisplayMessage("CLIENT >>> Error sending query ??? " + sqle.getMessage());
            return "transmission successfull";
        public static void reConnect()
            try
                DisplayMessage("CLIENT >>> Connection was lost. Trying to reconnect...");
                closeConnection();
                Thread.sleep(100);
                IsConnected = false;
                while (IsConnected == false)
                    runClient();
                    Thread.sleep(200);
            catch (Exception e)
                DisplayMessage("CLIENT >>> Error trying to Re-Connect...");
        public static void DisplayMessage(final String IncomingSms)
            System.out.println(IncomingSms);
        System.out.printf("Isms: %s", IncomingSms);  ///naah.
        public static String[][] getResponse()
            return Response;
        public static String getResponse(int row, int col)
            return Response[row][col];
    how can i do below using above code
    The program must be able to work in a non-networked mode. In this mode, the server and client must run in the same VM and must perform no networking, must not use loopback networking i.e: no “localhost” or “127.0.0.1”, and must not involve the serialization of any objects when communicating between the client and server components.
    The operating mode is selected using the single command line argument that is permitted.
    imust use a socket connection and define a protocol. networking must be entirely bypassed in the non-network mode.

  • ADF-JSF: Application Performance Issue

    Hello!
    My question or set of questions will be a bit vague...I am simply not sure where to look for problem(s). So here is what I have. Application implemented with ADF-JSF (JDEV ver:10.1.3.2.0). It basically has 5 pages. Each page containes user input form, commandButton and result table. Functionally, each page is a 'search page' that returns results based on what user specified in the form. Components on each page are bound to VO that is based on EO (DB table). Tables have at least 2.5M records up to 16M. Certain indexes exist (for most common searches) to improve the performance. However, there have been performance issues found and largely they would be grouped into the following:
    1. User is on page A, performs the search, goes to page B (via link) and performs other search, then goes back to A and similar search takes much longer to return results. Seems to me that this moght be related to memory. Maybe results of the previous search are cashed and it takes new search to retreive results longer as the VO cashe needs to be cleared first. Does that make sense?
    2. User is on page A and then goes to B. Leaves browser for 10-20 minutes and tries to go back to A. It takes up to a minute before page reloads with the previously displayed results. I am thinking this has to be related to page lifecycle where AM tries to re-execute bindings ( I do not think it is passivation issue though). What is the best practice to control the lifecycle?
    Any pointer on where to look for the solution is very welcome.
    Rade

    Carl,
    To use Tom Kyte's analogy, you are firing a gun into a room full of people hoping to hit the bad guy. You haven't seemed to have gotten any information about where the performance issues lie. It could be in the DB, network, ADF Business Components, JSF layer, other stuff monopolizing resources, etc, etc. I have ADF BC apps developed in 10.1.3.3 that run quite well.
    So, I would recommend you spend some time investigating where the performance problems lie. Try turning on logging output, check machine utilization - use your investigative techniques to find the bad guy so you can then work on fixing him.
    John

  • Excluding Members from EPMA application - performance issues?

    We are building a new application using dimensions from our Shared Library and I had a question about excluding some members.
    For one dimension, I was able to use the "Add to App View" functionality, which was able to bring in only the one tree of members I wanted, without having to exclude anything, which seems to be the best way of doing this.
    For another dimension, I need to pick and choose members from within the hierarchy, so I will need to add almost all parents, and then go through and exclude some members. Will this cause any performance issues having excluded members? Will the excluded members get deployed to planning or do they just sit in EPMA?
    Any help would be appreciated.

    Hi,
    Excluded members are not deployed to Planning, therefore would not impact performance negatively.
    Cheers,
    Alp

  • Webdynpro Java based application performance testin

    Hi Experts,
    could any one of you please provide me step by step guide to use some tool which can be used for profiling webdynpro java based application?
    this is very urgent...... kindly help
    Best regards
    Falgun

    My recommendations:
    - Always use a BufferedInputStream and BufferedOutputStream around the socket streams
    - Increase the socket send and receive buffers to at least 32k if you are on a Windows platform where the default is a ridiculous 8k, which hasn't been enough for about 15 years.
    - Your 2-second timeout is far too short. Increase it to at least 10 seconds.
    - Your strategy of counting up to N short timeouts of S seconds each is completely pointless. Change it to one single timeout of N*S seconds. There is nothing to be gained by the complication you have introduced to this.

  • Flex iPhone Application Performance issue

    Hi,
    I have developed mobile application for iPhone, iPad, and Android using flash builder 4.5.1. iPhone application performance is very slow compared to iPad version and Android even though the code set is same for all the versions.
    Can anybody help how to improve the performance on iPhone?

    Moving thread to mobile development and notifying our iOS team to take a look.  If you find a specific issue you consider broken, please post again in the bugs forum and we'll investigate further.
    Chris

  • User based application deployment issue

    Hi
    Since one week ago I have some problems with the user based application deployment. It has worked until last week without any problem but now I can't deploy any application. If I check the deployment status the say me ever "unknown".
    I see the username but no device before. But, if the user logon on another (new) device the deployment works again. But on all actual from the useres used devices I can't deploy applications.
    Has anyone an idea what could be the reason for that and how could be fixed?
    Thanks in advance.
    Sacha

    yes I've the ConfigMgr toolkit installed but the deployments are also on the Deployment Monitoring Tool not listed. the client logs are normal, no errors. I'm pretty sure the deployment doesn't reach the client. there are no requirements configured.
    just to clarify, all actual clients are affected, not just a few. what could be also interesting, I've changed last week the client settings. before I had automatically primary device assignment by useage configured. Now I've disabled that again. Maybe that
    could be a reason?

  • Application Performance Issue

    Hi !
    We have developed a web application which was moved to staging around an year ago. Now the application is facing connection failures and session time outs. We inferred that it is 'coz of the increase in the size of database resluting in larger outputs causing the timeouts..There are hundreds of users accessing the application at a given time....and lakhs of recs in each table...around 60 tables in total
    We are using weblogic server 5.1 and java,jsp,ODBC for the application development. We suggested that the connection pools size be increased and the time out value be increased as well....
    But , we r also trying to check the frontend to see if it can be optimized in a better way....
    My question is ..do u think that the usage of preparedstatement in place of statement object in jsp's and java files is going to make any difference....
    Also, can u also suggest any other methods to follow to optimize the performance....
    any suggestions are welcome..Thanks in advance

    Prepared statements make a difference if you execute the same query over and over again. It means it doesn't have to parse the sql string each time, but can just plug in different parameters.
    In your case though, I don't think it would make much of a difference. The time is being spent in running the query, not parsing it.
    I would look at your database queries - maybe add an index to the table to speed things up?
    What database are you using specifically? How are you connecting via ODBC? Using the JDBC-ODBC bridge? Maybe look at a pure JDBC driver?
    The general rule is that 90% of the time is spent in 10% of the code. Its finding the 10% you need to optimize that is the problem. Run a profiler to see what is taking the time.
    Good luck,
    evnafets

  • 1 core VS multi core in a web application: performance issue

    Hi,
    I'm having trouble with a web application in a multi cpu server (w2ksp4, iis+wl9.2)
    I have prepared a set of JMeter stress tests, and the application is only capable to finish 5 transactions in a multi cpu (2 cpus with 2 cores each) but if I bind the JVM of the weblogic process to only 1 core, then the application can handle more than 60 transactions without errors.
    I'm in production side; developers tell me "hardware problem" but it seems more likely a poorly designed application (as per my previous experience with them)
    The syntoms are lot of null pointers exceptions and threads stuck when in multi core scenario.
    Althought I have not put lot of details, any of you have ever seen something similar?
    If anybody needs further information please feel free to ask
    Thanks,
    Antonio

    What operating system are you using?
    make sure you are trying a certificated configuration JDK and OS.
    Oracle Fusion Middleware Supported System Configurations
    If using unix/Linux OS based you migh be hitting low entropy issue, you can add
    -Djava.security.egd=file:/dev/./urandom to JAVA_OPTIONS and retest the issue
    Best Regards
    Luz

  • Create Application performance issue

    Hi Experts
    Please help me
    I have two same enviroment.
    In one in which users are of native mode if I create a Essbase application it takes around 7 sec to create but in other where users are from MSAD and security is externalize, its taking around 3 minutes.
    Database repository are same i.e on local machines
    I see this message when I check SharedServices_Security_Client.log in my second enviorment:
    com.hyperion.css.spi.impl.ldap.LDAPCacheUpdater.resolveCircularDependency(Unknown Source) - INFO: Time to resolve circular dependency on the Cache for provider: LDAP in millis is : 0
    EAS 2008-09-12 01:00:40,716 [Thread-299] WARN com.hyperion.css.spi.impl.ldap.LDAPCacheUpdater.refreshProviderGroupCache(Unknown Source) - INFO: Time to build Cache for provider: LDAP in millis is : 3800
    Enviroment Details:-
    Product Version:- Hyperion Essabse 9.3.1
    Plateform:- IBM AIX Based Systems (64-bit) version 5.3
    Please suggest the possible cause and solution.
    Thanks

    Hi Experts
    Please help me
    I have two same enviroment.
    In one in which users are of native mode if I create a Essbase application it takes around 7 sec to create but in other where users are from MSAD and security is externalize, its taking around 3 minutes.
    Database repository are same i.e on local machines
    I see this message when I check SharedServices_Security_Client.log in my second enviorment:
    com.hyperion.css.spi.impl.ldap.LDAPCacheUpdater.resolveCircularDependency(Unknown Source) - INFO: Time to resolve circular dependency on the Cache for provider: LDAP in millis is : 0
    EAS 2008-09-12 01:00:40,716 [Thread-299] WARN com.hyperion.css.spi.impl.ldap.LDAPCacheUpdater.refreshProviderGroupCache(Unknown Source) - INFO: Time to build Cache for provider: LDAP in millis is : 3800
    Enviroment Details:-
    Product Version:- Hyperion Essabse 9.3.1
    Plateform:- IBM AIX Based Systems (64-bit) version 5.3
    Please suggest the possible cause and solution.
    Thanks

  • Web Application Performance Issue (WLS 12)

    Hello guys,
    I am new to weblogic and i recently downloaded weblogic server 12.1.3.0 and i created a domain and successfully deployed my web application.
    My web app is Java Based (Mainly Servlets , DWR Requests ..), the problem is that it takes for ever to start and it is very slow .
    I deployed it on Tomcat 7 previously and had no problem it was very quick.
    I tried changing the JVM Arguments (xms , xmx and XX:MaxPermSize) but no luck with that .
    Kindly can anyone help me with this issue .
    Thanks in Advance.

    What operating system are you using?
    make sure you are trying a certificated configuration JDK and OS.
    Oracle Fusion Middleware Supported System Configurations
    If using unix/Linux OS based you migh be hitting low entropy issue, you can add
    -Djava.security.egd=file:/dev/./urandom to JAVA_OPTIONS and retest the issue
    Best Regards
    Luz

  • Very Confused, Application Performance Issue

    Essentially every program takes much longer to start-up than it used to, Chrome for example used to start in less than one bounce but now it takes at least 4, even if I close it and re-open it straight away, I've tried using Onyx to clear the application cache and Disk Utility reports nothing wrong with the HDD, I'm at wits end as to what could be wrong, please help me!
    iMAC 21.5"

    I have ran disk utility, onyx, changed the startup disk and even reset the PRAM just to ensure, the issue is still occuring. Not just in Chrome but in every application I can think of. I copied around 80gb of data from a USB HDD to another USB HDD then ejected them both, that's when it started to happen

  • My VC application performance issue --- Very bad.

    Hi,
    I have developed a Vc application that when i run it directelly from the application server or preview from VC it run smooth, but after importing into production it is extremally slow.
    The users access the application through the companies DNS and loadbalancer.
    I have NW7 and SP15, any ideas?
    Regards,
    Marcelo

    quote:
    Originally posted by:
    cyberKafka
    I also understand that creating windows via AS (not MXML)
    could help a bit (apparently a lot with memory allocation. have not
    tested myself thou.)
    Do you have a link for any more info on this? Sounds
    interesting.

  • Socket Based Server/Client Program Help Needed

    Alright,
    I am making a Client/Server program.
    The idea is that, when I run the 'Server' part, it sits and listens for a connection from the Client.
    The Client writes a string to the socket, then the server, interprets the command.
    This is what I have so far.
    The Server:
    public static void main(String[] args) {
             String clientLine = null;
              Socket channel = new Socket();
              try {
                   mainWin window = new mainWin();
                   window.open();
              } catch (Exception e) {
                   e.printStackTrace();
             try{
                   ServerSocket server = new ServerSocket(8313);
                  BufferedReader reader = new BufferedReader(new InputStreamReader(channel.getInputStream()));
                 channel = server.accept();
                 clientLine = reader.readLine();
                 doCommand(clientLine);
                 reader.close();
                 channel.close();
                 server.close();
             catch(IOException ioe){
                  System.out.println("I/O Exception occurred while using the server");
         }The Client:
    public void sendCommand(String command){
              PrintStream socketWriter  = null;
              try{
                    Socket client = new Socket("127.0.0.1", 8313);
                    socketWriter = new PrintStream(client.getOutputStream());
                    socketWriter.println(command);
                    socketWriter.close();
                    client.close();
              }catch(UnknownHostException uhe){
              }catch(IOException ioe){
         }When I press the command button, it lags for a second, then does nothing.
    Does anyone see the problem?

    public static void main(String[] args) {
             String clientLine = null;
              Socket channel = new Socket(); //<-- This is connecting to where? nowhere, so initiate it to null instead.
              try {
                   mainWin window = new mainWin();
                   window.open();
              } catch (Exception e) {
                   e.printStackTrace();
             try{
                   ServerSocket server = new ServerSocket(8313);
                  BufferedReader reader = new BufferedReader(new InputStreamReader(channel.getInputStream())); //<-- Getting an input stream from nowhere?
                 channel = server.accept(); //<-- Perhaps you want to do this before you try to get the input stream from it?
                 clientLine = reader.readLine();
                 doCommand(clientLine);
                 reader.close();
                 channel.close();
                 server.close();
             catch(IOException ioe){
                  System.out.println("I/O Exception occurred while using the server");
         }

  • QUERY PERFORMANCE AND DATA LOADING PERFORMANCE ISSUES

    WHAT ARE  QUERY PERFORMANCE ISSUES WE NEED TO TAKE CARE PLEASE EXPLAIN AND LET ME KNOW T CODES...PLZ URGENT
    WHAT ARE DATALOADING PERFORMANCE ISSUES  WE NEED TO TAKE CARE PLEASE EXPLAIN AND LET ME KNOW T CODES PLZ URGENT
    WILL REWARD FULL POINT S
    REGARDS
    GURU

    BW Back end
    Some Tips -
    1)Identify long-running extraction processes on the source system. Extraction processes are performed by several extraction jobs running on the source system. The run-time of these jobs affects the performance. Use transaction code SM37 — Background Processing Job Management — to analyze the run-times of these jobs. If the run-time of data collection jobs lasts for several hours, schedule these jobs to run more frequently. This way, less data is written into update tables for each run and extraction performance increases.
    2)Identify high run-times for ABAP code, especially for user exits. The quality of any custom ABAP programs used in data extraction affects the extraction performance. Use transaction code SE30 — ABAP/4 Run-time Analysis — and then run the analysis for the transaction code RSA3 — Extractor Checker. The system then records the activities of the extraction program so you can review them to identify time-consuming activities. Eliminate those long-running activities or substitute them with alternative program logic.
    3)Identify expensive SQL statements. If database run-time is high for extraction jobs, use transaction code ST05 — Performance Trace. On this screen, select ALEREMOTE user and then select SQL trace to record the SQL statements. Identify the time-consuming sections from the results. If the data-selection times are high on a particular SQL statement, index the DataSource tables to increase the performance of selection (see no. 6 below). While using ST05, make sure that no other extraction job is running with ALEREMOTE user.
    4)Balance loads by distributing processes onto different servers if possible. If your site uses more than one BW application server, distribute the extraction processes to different servers using transaction code SM59 — Maintain RFC Destination. Load balancing is possible only if the extraction program allows the option
    5)Set optimum parameters for data-packet size. Packet size affects the number of data requests to the database. Set the data-packet size to optimum values for an efficient data-extraction mechanism. To find the optimum value, start with a packet size in the range of 50,000 to 100,000 and gradually increase it. At some point, you will reach the threshold at which increasing packet size further does not provide any performance increase. To set the packet size, use transaction code SBIW — BW IMG Menu — on the source system. To set the data load parameters for flat-file uploads, use transaction code RSCUSTV6 in BW.
    6)Build indexes on DataSource tables based on selection criteria. Indexing DataSource tables improves the extraction performance, because it reduces the read times of those tables.
    7)Execute collection jobs in parallel. Like the Business Content extractors, generic extractors have a number of collection jobs to retrieve relevant data from DataSource tables. Scheduling these collection jobs to run in parallel reduces the total extraction time, and they can be scheduled via transaction code SM37 in the source system.
    8). Break up your data selections for InfoPackages and schedule the portions to run in parallel. This parallel upload mechanism sends different portions of the data to BW at the same time, and as a result the total upload time is reduced. You can schedule InfoPackages in the Administrator Workbench.
    You can upload data from a data target (InfoCube and ODS) to another data target within the BW system. While uploading, you can schedule more than one InfoPackage with different selection options in each one. For example, fiscal year or fiscal year period can be used as selection options. Avoid using parallel uploads for high volumes of data if hardware resources are constrained. Each InfoPacket uses one background process (if scheduled to run in the background) or dialog process (if scheduled to run online) of the application server, and too many processes could overwhelm a slow server.
    9). Building secondary indexes on the tables for the selection fields optimizes these tables for reading, reducing extraction time. If your selection fields are not key fields on the table, primary indexes are not much of a help when accessing data. In this case it is better to create secondary indexes with selection fields on the associated table using ABAP Dictionary to improve better selection performance.
    10)Analyze upload times to the PSA and identify long-running uploads. When you extract the data using PSA method, data is written into PSA tables in the BW system. If your data is on the order of tens of millions, consider partitioning these PSA tables for better performance, but pay attention to the partition sizes. Partitioning PSA tables improves data-load performance because it's faster to insert data into smaller database tables. Partitioning also provides increased performance for maintenance of PSA tables — for example, you can delete a portion of data faster. You can set the size of each partition in the PSA parameters screen, in transaction code SPRO or RSCUSTV6, so that BW creates a new partition automatically when a threshold value is reached.
    11)Debug any routines in the transfer and update rules and eliminate single selects from the routines. Using single selects in custom ABAP routines for selecting data from database tables reduces performance considerably. It is better to use buffers and array operations. When you use buffers or array operations, the system reads data from the database tables and stores it in the memory for manipulation, improving performance. If you do not use buffers or array operations, the whole reading process is performed on the database with many table accesses, and performance deteriorates. Also, extensive use of library transformations in the ABAP code reduces performance; since these transformations are not compiled in advance, they are carried out during run-time.
    12)Before uploading a high volume of transaction data into InfoCubes, activate the number-range buffer for dimension IDs. The number-range buffer is a parameter that identifies the number of sequential dimension IDs stored in the memory. If you increase the number range before high-volume data upload, you reduce the number of reads from the dimension tables and hence increase the upload performance. Do not forget to set the number-range values back to their original values after the upload. Use transaction code SNRO to maintain the number range buffer values for InfoCubes.
    13)Drop the indexes before uploading high-volume data into InfoCubes. Regenerate them after the upload. Indexes on InfoCubes are optimized for reading data from the InfoCubes. If the indexes exist during the upload, BW reads the indexes and tries to insert the records according to the indexes, resulting in poor upload performance. You can automate the dropping and regeneration of the indexes through InfoPackage scheduling. You can drop indexes in the Manage InfoCube screen in the Administrator Workbench.
    14)IDoc (intermediate document) archiving improves the extraction and loading performance and can be applied on both BW and R/3 systems. In addition to IDoc archiving, data archiving is available for InfoCubes and ODS objects.
    Hope it Helps
    Chetan
    @CP..

Maybe you are looking for

  • How do I use the vector web forms??

    I'm new to using vector graphics and need to know how to go about using these web forms using Illistrator to make it functional on a web site. I tried opening it with the Illustrator, Fireworks, but not sure how to get the white fields to actually wo

  • BI Publisher report failed with exception

    Hi            I created a rtf template and able to generate pdf output on desktop but after registering in R12 it is failing with following exception.     My Desktop patch version: Oracle BI Publisher Desktop 11.1.1.6 and build 5.12.110. Here is the

  • The operation could not be completed -12894

    After transfer data from iMac to iPhone, the operation couldn't be completed. Can I help you?

  • IOS5 & iPAD2 still loosing WiFi connection

    My 20" iMac (model late 2006) is running MacOS 10.7.2. My iPad2 is running iOS5.0.0. My modem/roughter is a Netgear DGN N300 Wireless Gigabit ADSL2+ Modem Router DGN3500. I live in the "woods" and my nearest neighbor is around 1/2 mile away (0.8K), s

  • Im looking for a cheep prepaid plan.

    I use to have a family Verizon plan but can't afford it now so Im looking at the prepaid ones. I only need one phone and I really only use texting ALOT so a unlimited plan would be nice. I don't need web access but I would defiantly use it. And I can