JSP Performance Troubleshooting

I am running into some performance problems with my JSP application. We are using JRun as the server. My page is executing a stored procedure in SQL Server, storing the data from the resultset in an arraylist of objects that I created to store the data and displaying the data in increments of 50 in an html page. I store the arraylist as a session attribute.
In one particular example the resultset is 278 records. The stored procedure takes about a second to run using the Query Analyzer. The page takes several minutes to display.
Does anyone know where I should begin to look to improve the performance of this page? I could post the code from the page, but I didn't want to just throw that out there without a specific question about it.
Thanks for your time.
Matt

If you are facing this problem for large amount of records that you are trying to retrive and trying to do tha pagination in jsp then you may also think in this following way to to improve performance.
I'm not sure how far it will be useful for you but its just my idea.
1.First dont keep the ArrayList object in session.
2.dont retrive all records and retrive only current page rows from database that you want to display on the jsp
3.when you click next for pagination again retrive only current page rows.
let me know if you need more info

Similar Messages

  • JDBC from jsp (performance)

    Hello everybody.
    I am developing a web application with jsp and beans, i have a connector bean that opens a connection with a database, then this connection is setted in the session, so the other classes can use it to create preparedStatements.
    First Question:
    Is this the best way to do it? i would appreciate any other suggestion that improves performance and reliability.
    Second Question:
    What is the best way to manage concurrent connections to the database, as i have modeled it, there will be one connection per user, but what if there is 100 users at the same time, if i need this application to be fast and reliable, what would you suggest... thank you very much. Bye
    Otto

    There is no golden rul to build the system. Every situation may need different best answer. However, field experts established some common wisdom which has been proved to be good in many situations.
    1. Model 2 : Like other dynamic content technology, JSP is suffering the problem of sharing sources between tech and non-tech people. Avoiding as much as java codes in jsp will remove much headaches. Model in JSP spec is recommended in that sense. (Still you can't avoid accusing other side for messing up the code, if your desing is not complete up front)
    2. Connection Pool. is the most common way to reduce the overhead of creating the connection to the database. Keep the connections in some in-memory store and reuse them.
    3. Focus on building the whole system instead of building view components. Solidly designed back-end server properly equipped with data caching will improve your system as a whole.
    Cheers,

  • Large number of JSP performance

    Hi,
    a colleague of me made tests with a large number of JSP and identified a
    performance problem.
    I believe I found a solution to his problem. I tested it with WLS 5.1 SP2
    and SP3 and MS jview SDK 4.
    The issue was related to the duration of the initial call of the nth JSP,
    our situation as we are doing site hosting.
    The solution is able to perform around 14 initial invocations/s no matter if
    the invocation is the first one or the
    3000th one and the throughput can go up to 108 JSPs/s when the JSP are
    already loaded, the JSPs being the
    snoopservlet example copied 3000 times.
    The ratio have more interest than the values as the test machine (client and
    WLS 5.1) was a 266Mhz laptop.
    I repeat the post of Marc on 2/11/2000 as it is an old one:
    Hi all,
    I'm wondering if any of you has experienced performance issue whendeploying
    a lot of JSPs.
    I'm running Weblogic 4.51SP4 with performance pack on NT4 and Jdk1.2.2.
    I deployed over 3000 JSPs (identical but with a distinct name) on myserver.
    I took care to precompile them off-line.
    To run my tests I used a servlet selecting randomly one of them and
    redirecting the request.
    getServletContext().getRequestDispatcher(randomUrl).forward(request,response);
    The response-time slow-down dramaticaly as the number of distinct JSPs
    invoked is growing.
    (up to 100 times the initial response time).
    I made some additional tests.
    When you set the properties:
    weblogic.httpd.servlet.reloadCheckSecs=-1
    weblogic.httpd.initArgs.*.jsp=..., pageCheckSeconds=-1, ...
    Then the response-time for a new JSP seems linked to a "capacity increase
    process" and depends on the number of previously activated JSPs. If you
    invoke a previously loaded page the server answers really fast with no
    delay.
    If you set previous properties to any other value (0 for example) the
    response-time remains bad even when you invoke a previously loaded page.SOLUTION DESCRIPTION
    Intent
    The package described below is design to allow
    * Fast invocation even with a large number of pages (which can be the case
    with Web Hosting)
    * Dynamic update of compiled JSP
    Implementation
    The current implementation has been tested with JDK 1.1 only and works with
    MS SDK 4.0.
    It has been tested with WLS 5.1 with service packs 2 and 3.
    It should work with most application servers, as its requirements are
    limited. It requires
    a JSP to be able to invoke a class loader.
    Principle
    For a fast invocation, it does not support dynamic compilation as described
    in the JSP
    model.
    There is no automatic recognition of modifications. Instead a JSP is made
    available to
    invalidate pages which must be updated.
    We assume pages managed through this package to be declared in
    weblogic.properties as
    weblogic.httpd.register.*.ocg=ocgLoaderPkg.ocgServlet
    This definition means that, when a servlet or JSP with a .ocg extension is
    requested, it is
    forwarded to the package.
    It implies 2 things:
    * Regular JSP handling and package based handling can coexist in the same
    Application Server
    instance.
    * It is possible to extend the implementation to support many extensions
    with as many
    package instances.
    The package (ocgLoaderPkg) contains 2 classes:
    * ocgServlet, a servlet instantiating JSP objects using a class loader.
    * ocgLoader, the class loader itself.
    A single class loader object is created.
    Both the JSP instances and classes are cached in hashtables.
    The invalidation JSP is named jspUpdate.jsp.
    To invalidate an JSP, it has simply to remove object and cache entries from
    the caches.
    ocgServlet
    * Lazily creates the class loader.
    * Retrieves the target JSP instance from the cache, if possible.
    * Otherwise it uses the class loader to retrieve the target JSP class,
    create a target JSP
    instance and stores it in the cache.
    * Forwards the request to the target JSP instance.
    ocgLoader
    * If the requested class has not the extension ocgServlet is configured to
    process, it
    behaves as a regular class loader and forwards the request to the parent
    or system class
    loader.
    * Otherwise, it retrieves the class from the cache, if possible.
    * Otherwise, it loads the class.
    Do you thing it is a good solution?
    I believe that solution is faster than standard WLS one, because it is a
    very small piece of code but too because:
    - my class loader is deterministic, if the file has the right extension I
    don't call the classloader hierarchy first
    - I don't try supporting jars. It has been one of the hardest design
    decision. We definitely need a way to
    update a specific page but at the same time someone post us NT could have
    problems handling
    3000 files in the same directory (it seems he was wrong).
    - I don't try to check if a class has been updated. I have to ask for
    refresh using a JSP now but it could be an EJB.
    - I don't try to check if a source has been updated.
    - As I know the number of JSP I can set pretty accurately the initial
    capacity of the hashtables I use as caches. I
    avoid rehash.

    Use a profiler to find the bottlenecks in the system. You need to determine where the performance problems (if you even have any) are happening. We can't do that for you.

  • Large number of JSP performance [repost for grandemange]

    Hi,
    a colleague of me made tests with a large number of JSP and identified a
    performance problem.
    I believe I found a solution to his problem. I tested it with WLS 5.1 SP2
    and SP3 and MS jview SDK 4.
    The issue was related to the duration of the initial call of the nth JSP,
    our situation as we are doing site hosting.
    The solution is able to perform around 14 initial invocations/s no matter if
    the invocation is the first one or the
    3000th one and the throughput can go up to 108 JSPs/s when the JSP are
    already loaded, the JSPs being the
    snoopservlet example copied 3000 times.
    The ratio have more interest than the values as the test machine (client and
    WLS 5.1) was a 266Mhz laptop.
    I repeat the post of Marc on 2/11/2000 as it is an old one:
    Hi all,
    I'm wondering if any of you has experienced performance issue whendeploying
    a lot of JSPs.
    I'm running Weblogic 4.51SP4 with performance pack on NT4 and Jdk1.2.2.
    I deployed over 3000 JSPs (identical but with a distinct name) on myserver.
    I took care to precompile them off-line.
    To run my tests I used a servlet selecting randomly one of them and
    redirecting the request.
    getServletContext().getRequestDispatcher(randomUrl).forward(request,response);
    The response-time slow-down dramaticaly as the number of distinct JSPs
    invoked is growing.
    (up to 100 times the initial response time).
    I made some additional tests.
    When you set the properties:
    weblogic.httpd.servlet.reloadCheckSecs=-1
    weblogic.httpd.initArgs.*.jsp=..., pageCheckSeconds=-1, ...
    Then the response-time for a new JSP seems linked to a "capacity increase
    process" and depends on the number of previously activated JSPs. If you
    invoke a previously loaded page the server answers really fast with no
    delay.
    If you set previous properties to any other value (0 for example) the
    response-time remains bad even when you invoke a previously loaded page.SOLUTION DESCRIPTION
    Intent
    The package described below is design to allow
    * Fast invocation even with a large number of pages (which can be the case
    with Web Hosting)
    * Dynamic update of compiled JSP
    Implementation
    The current implementation has been tested with JDK 1.1 only and works with
    MS SDK 4.0.
    It has been tested with WLS 5.1 with service packs 2 and 3.
    It should work with most application servers, as its requirements are
    limited. It requires
    a JSP to be able to invoke a class loader.
    Principle
    For a fast invocation, it does not support dynamic compilation as described
    in the JSP
    model.
    There is no automatic recognition of modifications. Instead a JSP is made
    available to
    invalidate pages which must be updated.
    We assume pages managed through this package to be declared in
    weblogic.properties as
    weblogic.httpd.register.*.ocg=ocgLoaderPkg.ocgServlet
    This definition means that, when a servlet or JSP with a .ocg extension is
    requested, it is
    forwarded to the package.
    It implies 2 things:
    * Regular JSP handling and package based handling can coexist in the same
    Application Server
    instance.
    * It is possible to extend the implementation to support many extensions
    with as many
    package instances.
    The package (ocgLoaderPkg) contains 2 classes:
    * ocgServlet, a servlet instantiating JSP objects using a class loader.
    * ocgLoader, the class loader itself.
    A single class loader object is created.
    Both the JSP instances and classes are cached in hashtables.
    The invalidation JSP is named jspUpdate.jsp.
    To invalidate an JSP, it has simply to remove object and cache entries from
    the caches.
    ocgServlet
    * Lazily creates the class loader.
    * Retrieves the target JSP instance from the cache, if possible.
    * Otherwise it uses the class loader to retrieve the target JSP class,
    create a target JSP
    instance and stores it in the cache.
    * Forwards the request to the target JSP instance.
    ocgLoader
    * If the requested class has not the extension ocgServlet is configured to
    process, it
    behaves as a regular class loader and forwards the request to the parent
    or system class
    loader.
    * Otherwise, it retrieves the class from the cache, if possible.
    * Otherwise, it loads the class.
    Do you thing it is a good solution?
    I believe that solution is faster than standard WLS one, because it is a
    very small piece of code but too because:
    - my class loader is deterministic, if the file has the right extension I
    don't call the classloader hierarchy first
    - I don't try supporting jars. It has been one of the hardest design
    decision. We definitely need a way to
    update a specific page but at the same time someone post us NT could have
    problems handling
    3000 files in the same directory (it seems he was wrong).
    - I don't try to check if a class has been updated. I have to ask for
    refresh using a JSP now but it could be an EJB.
    - I don't try to check if a source has been updated.
    - As I know the number of JSP I can set pretty accurately the initial
    capacity of the hashtables I use as caches. I
    avoid rehash.
    Cheers - Wei

    I dont know the upper limit, but I think 80 is too much. I have never used more than 15-20. For Nav attributes, a seperate tables are created which causes the Performance issue as result in new join at query run time. Just ask your business guy, if these can be reduced.One way could be to model these attributes as seperate characteristics. It will certainly help.
    Thanks...
    Shambhu

  • Network Performance Troubleshooting?

    Greetings all,
    I have a new Sun X4240 server installed as an enterprise backup media server and it's suffering terrible network performance to our new Exagrid disk storage backup appliance. The shares on the Exagrid are mounted as NFS3 shares on the server. If I cable the server directly to the Exagrid appliance, I get a reasonable 450-500 Mb/s on a simple copy from local disk to the NFS share. When I connect them back into our Cisco switch, the performance on the same copy drops to well under 20 Mb/s. A Windows server on the same switch sending traffic to CIFS shares on the Exagrid is performing quite well.
    Does anyone have any ideas how to start troubleshooting this problem? Any other recommendations? Anything will be very welcome!
    Sun X4240, Solaris 10 05/09 X64
    Cisco Catalyst 4506, Supervisor II+ version 12.2(46), (cat4500-ipbasek9-mz.122-46.SG.bin)
    WS-X4548-GB-RJ45 (48 port 10/100/1000BaseT module)
    Many thanks,
    Tim

    I tried forcing the port settings but that still didn't work. In the end it turned out to be a problem with the code on the Cisco router. We tried a different, much cheaper Cisco router and it worked great.

  • JSP performance inssue

    Hi, I am querying to the database and fetching the result set which has some say 50-100 records.I need to show 10records only at a time in the page.so I have a button which when clicked shows the next 10records/rows of the result set. So when the button is hit actually right now I call the same JSP page and display the next records in the resultset.But becoz of this the Query is again performed( the database is hit again and the same resultset is fetched again)due to which my Application is very slow. I am looking for some global array which can hold the resultset. How d ou do it in JSP, Can anyone tell me an efficient way to do this. any input is greatly appreciated.

    Hi
    I urge you not to take this option when searching thru records.
    By storing record sets in global variables or session variables you are setting yourself up for a very memory intensive application. Their is also the possibility that your records will appear 'wrong' or not updated.
    You have to take many factors into account when programming your application like this. Yes it may seem like your record search is getting faster but if many people are using your application at once and a record is changed then it may not appear the same for everyone as copies of the record sets will be stored server side for each user, syncroisation issues. I also question the speed of your search, I mean, its not usual for an application to be so slow when only 50-100 records are being fetched at one time, unless your sql is very complicated, or your database is very slow, or your web server is overloaded of some sort (speed of machine, too many users....)
    It is considered better programming practice when you run the search each time because of sycronisation issues, memory issues, and the complixity of the code need just to avoid these issues.
    I hope this helps
    Josh

  • Jsp performance issue on Safari

    Hi,
    We are facing performance issues while loading a jsp page in Safari browser on Macintosh.It takes around 2 minutes to load.
    The same page used to take around 5 seconds on Netscape on Macintosh.
    Have anyone faced a similar issue?
    I'm new to jsp, so could you please provide some tips on how we can debug what is causing the issue and tune this?
    Thanks,
    Mini

    On many projects I've worked on, including non-JDev, a general user interface rule was that you don't use an LOV if there's much more than 20-30 items. Think of this from a USER standpoint.
    Note also that in Swing/DACF the combobox does NOT allow you to type the letters "starting" and automatically jump to the right place.. ( i.e. Enter WI in a state list doesn't take you to WISCONSIN ). This is a Sun JDK issue. ( Or has it changed in 1.3 in some manner... or is there a property set to allow this? )
    As such, you've more a application design issue than a performance issue.
    Good Luck
    null

  • BW Performance & troubleshooting role

    Dear SDN!
    I would like to know is it advisable for an rather inexperienced certified BW person to be deployed solo to a major customer who needs someone experienced to look into the cause of the BW performance and other problems experienced by users and within the system itself?
    I reckon this calls for skills in BW360, not part of BW solution scope. As you know my technical background, I may be able to provide some value but as this is BW, and performance characteristic is different than R/3, would it be advisable to be gungho and accept such an assignment solo? Client has its BW support but not able to solve the problems.
    Also, what are usually the causes for BW performance issues and cause customers to be unhappy? Appreciate also if you experts could advice on what are the functional aspects to look into or that I should know when handling such issues.
    My gut feeling is I don't feel comfortable about this assignment as I would be deployed overseas on contract.
    I have mentioned in interview that I am looking for a junior bw role and prefers functional activities. But this is what I get. Being alone in a faraway land without own company people to leverage on seems daunting to me.
    Seeking your advice / comments.
    bworbust

    Hi ,
    Before you prepare to travel my suggestion is to go thruogh the implementations that had already gone live because it gives you enough experience to handle the things .You are a certified professional use that experience in the implementations and dont forget that we(SDNer's) are always there to help you.
    Regarding the performance issues some of our Experts wrote..
    INDEXEs  : The indexes that are created in the fact table for each dimension allow you to easily find and select the data
    see http://help.sap.com/saphelp_nw04/helpdata/en/80/1a6473e07211d2acb80000e829fbfe/content.htm
    COMPRESSION :  when you load data into the InfoCube, each request has its own request ID, which is included in the fact table in the packet dimension.
    This (besides giving the possibility to manage/delete single request) increases the volume of data, and reduces performance in reporting, as the system has to aggregate with the request ID every time you execute a query. Using compressing, you can eliminate these disadvantages, and bring data from different requests together into one single request (request ID 0).
    This function is critical, as the compressed data can no longer be deleted from the InfoCube using its request IDs and, logically, you must be absolutely certain that the data loaded into the InfoCube is correct.
    see http://help.sap.com/saphelp_nw04/helpdata/en/ca/aa6437e7a4080ee10000009b38f842/content.htm
    PARTITIONS :  by using partitioning you can split up the whole dataset for an InfoCube into several, smaller, physically independent and redundancy-free units. Thanks to this separation, performance is increased when reporting, or also when deleting data from the InfoCube.
    see http://help.sap.com/saphelp_nw04/helpdata/en/33/dc2038aa3bcd23e10000009b38f8cf/content.htm
    Additionally you can see a lot in service.sap.com/bw -> Performance.
    You can also find the detailed hardware and tests in a white paper on www.sap.com/bi -> Brochures and Whitepapers -> Scalability with SAP Business Information Warehouse
    Hope it helps you......
    Regards
    Lisa

  • Oracle 10g tools for performance/troubleshooting

    Hi
    I want to find some tools for moniting the performance and troublesooting. Any suggest? OEM tuning pack, statspack...etc
    Thanks

    Different tools for different troubles. What trouble are you trying to shoot?
    For general information, try the Performance Tuning guide.

  • XSLT transformations vs JSP (performance)

    Hi,
    Does anyone know of any benchmarking study that would compare performance of those 2 technologies?
    Thanks for help!!!!

    If there was one, I would not pay too much attention to its results. The question is so broad that it is impossible to draw any useful conclusions.

  • JSP Performance Problem

    Hi,
    In my web application one of the JSP is taking a lot of time to execute/transmit/render. The JSP in question has 17 HTML list boxes. some of them of size around 2000 items. JSP is written using struts tags to generate HTML select.
    I tried putting logger statement inside JSP around "<select> < optionsCollection>" to get time it takes for different list boxes to generate.
    Below are the observations.
    1) One particular element (HTML SELECT/ optionsCollection) in JSP takes around 20 seconds.
    2) If I move same HTML select Box 1 or 2 rows up then it takes milliseconds to generate but now another list box takes around 20 seconds.
    3) Problem is only on the Solaris server we are using for testing. JSP runs perfectly fine when I run on my windows desktop or any other desktop in our LAN.
    Note : Application when deployed on server is accessed using HTTPS while in local environment it is accessed using HTTP
    Can anyone help explain this behavior?

    Hi,
    In my web application one of the JSP is taking a lot of time to execute/transmit/render. The JSP in question has 17 HTML list boxes. some of them of size around 2000 items. JSP is written using struts tags to generate HTML select.
    I tried putting logger statement inside JSP around "<select> < optionsCollection>" to get time it takes for different list boxes to generate.
    Below are the observations.
    1) One particular element (HTML SELECT/ optionsCollection) in JSP takes around 20 seconds.
    2) If I move same HTML select Box 1 or 2 rows up then it takes milliseconds to generate but now another list box takes around 20 seconds.
    3) Problem is only on the Solaris server we are using for testing. JSP runs perfectly fine when I run on my windows desktop or any other desktop in our LAN.
    Note : Application when deployed on server is accessed using HTTPS while in local environment it is accessed using HTTP
    Can anyone help explain this behavior?

  • Jsp performance

    This is Harsha , Hyderabad. this is regarding the issues/ doubts that we have with Oracle Portal Server and portlets.
    The scenario is we have a JSP page in which we are calling four portlets. Based on the User role the JSP view will be changed. Hence the JSP contains if else blocks and based on the user role respective portlet will be invoked.
    We are facing an issue where when a user logs in, the display is taking approx. 9 secs and on subsequent visits within the same login, it is taking less time. This is true even when the user logs out and logs back in. We are not clear if the portal server is trying to recompile the page on each login. To verify this, we want to know where the compiled JSP’s (Class files) will reside. The Portlets are simple templates. The portlets that we have are menu bar, banner, left navigation and footer.
    Also we want to know that if it is possible to use <jsp: include> tag in a JSP in oracle portal server? If yes then how to give the file path. We have observed that in Oracle portal server whenever we want to call a JSP it is taking the display name and when we try to give the display name in the <jsp:include> it is giving an error.
    We are using Oracle 10g and we don’t have JDeveloper Plugged to it.

    This is Harsha , Hyderabad. this is regarding the issues/ doubts that we have with Oracle Portal Server and portlets.
    The scenario is we have a JSP page in which we are calling four portlets. Based on the User role the JSP view will be changed. Hence the JSP contains if else blocks and based on the user role respective portlet will be invoked.
    We are facing an issue where when a user logs in, the display is taking approx. 9 secs and on subsequent visits within the same login, it is taking less time. This is true even when the user logs out and logs back in. We are not clear if the portal server is trying to recompile the page on each login. To verify this, we want to know where the compiled JSP’s (Class files) will reside. The Portlets are simple templates. The portlets that we have are menu bar, banner, left navigation and footer.
    Also we want to know that if it is possible to use <jsp: include> tag in a JSP in oracle portal server? If yes then how to give the file path. We have observed that in Oracle portal server whenever we want to call a JSP it is taking the display name and when we try to give the display name in the <jsp:include> it is giving an error.
    We are using Oracle 10g and we don’t have JDeveloper Plugged to it.

  • How to find cause of db performance problem??

    Hi,
    I am facing continuous performance issues with our database and for that I want to know how I can get information about the following points:
    1- How to find most accessed table(s) or tables with highest hits or top queries is accessing which table(s)?
    2- What indication can tell that a particular table need to be rebuilt?
    3- When to rebuild indexes? and how to know that an indexed need to be rebuilt?
    Your prompt reply is highly appreciated
    Thanks,
    Younis

    Hi,
    a good starting point for investigating poor database performance is AWR (if you have a license for that) or statspack (if you don't). If you need help interpreting it, you can refer to J. Lewis's series on statspack reports (also applies to AWR):
    http://jonathanlewis.wordpress.com/2011/03/09/statspack-reports/
    I have also made a few blog posts on this topic, see http://savvinov.com/tag/awr/
    Regarding your other questions -- countrary to popular belief, rebuilding indexes or tables is seldom helpful. More often, performance problems are caused by bad execution plans (side effects of bind peaking, inaccurate statistics, correlated predicates etc.), data design issues, bad coding practices, not using bind variables etc.
    Database performance topic is a huge topic and obviously cannot fit into a discussion thread. Christian Antognini's book "Oracle Performance Troubleshooting" can provide you a gentle introduction into performance tuning, provided you already have good familiarity with Oracle architecture.
    Or, if you want help with your particular problem, post your AWR report here and briefly describe what your users are unhappy about -- there is a good chance that you get valuable feedback from several renowned experts.
    Good luck!
    Best regards,
    Nikolay

  • Troubleshooting and Introduction for Exchange 2007/2010 AutoDiscover - Details about "Test E-mail AutoConfiguration"

    AutoDiscover is a new feature in Exchange 2007, to provide access to Microsoft Exchange features (OAB, Availability service, UM) for Outlook 2007
    clients or later.
    We can determine whether problems related to AutoDiscover via OWA.
    For example:
    OOF is not working in Outlook Client but it is working in OWA.
    When we realized this issue is not related to Outlook Client side and network side after performing some troubleshooting steps, it should be something
    abnormal on AutoDiscover.
    There is a common tool to check AutoDiscover in Outlook, Test E-mail AutoConfiguration.
    Today, we will introduce AutoDisocver and “Test E-mail AutoConfiguration” in details. Hope it is helpful for AutoDiscover troubleshooting and self-learning.
    1. Differences between “Test E-mail AutoConfiguration” and other tools
    The “Test-OutlookWebServices” cmdlet allows us to test the functionality of the following services:
    Autodisocver
    Exchange Web Services
    Availability Service
    Offline Address Book
    When we run “Test-OutlookWebServices”, it returns all the web services’ states.
    However, some information are useless for some scenarios.
    For example:
    We just want our Exchange 2010 Server working internally. So it is unnecessary to enable Outlook Anywhere.
    However, when we run “Test-OutlookWebServices”, it returns Outlook Anywhere errors because the Outlook Anywhere does not need to been enabled.
    In contrast, using “Test E-mail Autodiscover” is more intuitive.
    If there is any problems, it will return error code from the test result, like 0x8004010F etc. We can do some research from TechNet articles or MS
    KBs.
    Although it is difficult to say where the specific problem is just via the error codes, we can combine with IIS logs to perform troubleshooting and
    find the root of problem.
    2. How to use “Test E-mail AutoConfiguration” Tool
    a. Open Outlook, we can find there is an Outlook Icon at the right bottom of System tray. Holding down “Ctrl” button and right click the Outlook Icon, we will see “Test E-mail
    AutoConfiguration” option. Please see Figure 01.
    Figure 01
    b. Click “Test E-mail AutoCofiguration” and input user name, uncheck the “Use Guessmart” and “Secure Guessmart Authentication” checkboxes, then click “Test”. Please see
    Figure 02.
    Figure 02
    c. “Test E-mail AutoConfiguration” result panel and log panel. Please see Figure 03 and Figure 04.
    Figure 03
    Figure 04
    3. How to understand “Test E-mail AutoConfiguration” result
    According to the Figure 03, we found there are many URLs in the “Test E-mail AutoConfiguration” result panel. Let us understand the details of these
    URLs.
    If we these URLs are not the correct ones, we can re-setting or re-creating them via commands.
    - Internal OWA URL:
    https://vamwan310.vamwan.com/owa/
    OWA internal access.
    - External OWA URL:
    https://mail.vamwan.com/owa/
    OWA external access.
    - Availability service URL:
    https://vamwan310.vamwan.com/EWS/Exchange.asmx
    Free/Busy, OOF and meeting suggestions.
    - OOF URL:
    https://vamwan310.vamwan.com/EWS/Exchange.asmx
    Out of Office access.
    - OAB URL:
    https://vamwan310.vamwan.com/OAB/023ef307-b18a-4911-a52c-de26700f6173/
    OAB access.
    - Exchange Control Panel URL:
    https://vamwan310.vamwan.com/ecp/
    ECP access.
    4. AutoDiscover Tips
    - AutoDiscover Service itself is a web application running on the AutoDiscover virtual directory (not a server service) designed to provide connection information to various
    clients.
    - The AutoDiscover service is automatically installed and configured when CAS role is added to any Exchange Server.
    - AutoDisocver virtual directory is created in IIS within the Default Web Site.
    - A Sercive-Connection-Point (SCP) object is created in AD.
    - The SCP contains a URL to the AutoDiscover service. This is for intranet clients so they do not have to use DNS to locate the AutoDiscover service.
    - In AD this object is located at the following location:
    DC=<domain>, CN=Configuration, CN=Services, CN=Microsoft Exchange, CN=First Organization, CN=Administrative Groups, CN=Exchange Administrative
    Group, CN=Servers, CN=<CAS Name>, CN=Protocols, CN=AutoDiscover, CN=<CAS Name>
    - Setup creates the AutoDiscover URL based on the following structure:
    <CASNetbiosName>.domain.com/AutoDiscover/AutoDiscover.xml
    If a PKI certificate is not already present, a self-signed certificate is installed on the Default Web Site. 
    To help allow this certificate pass the Issues to test it is set up with a Subject Alternative Name containing urls.
    If a PKI certificate is present, that certificate is utilized and configured for use in IIS.
    The Outlook Provider is used to configure separate settings for the Exchange PRC protocol (internal to network), Outlook Anywhere (Exchange HTTP protocol), and WEB:
    EXCH, EXPR, WEB
    The
    EXCH and EXPR setting are vital for the proper configuration of Outlook.
    5. AutoDiscover Workflow
    General Process flow:
    There are various components surrounding the AutoDiscover Service and all are necessary to complete a request. Including IIS, AutoDiscover service
    itself, the provider, and AD.
    a.
    Client constructs service URL and submits Autodiscover Request. First attempt to locate the SCP object in AD. So, DNS is not needed.
    b.
    IIS Authenticates User.
    c.
    Is the Autodiscover service in the appropriate forest?
    + If YES.
        1)
    Parse/Validate Request
        2)
    Is there a provider that can service the Request?
    ++ If YES
          a)
    Config provider processes request and returns config settings.
          b)
    Return config setting to client
    ++ If NO
    Inform client we cannot process request
    + If NO.
    Redirect client to Autodiscover service in the appropriate forest.
    Methods to find Autodiscover services: SCP and DNS
    Domain-joined
    a. Find SCP first.
    The SCP contains the URL to the AutoDiscover service.
    URL: https://CAS01.contoso.com(CAS’ FQDN)/AutoDiscover/AutoDiscover.xml
    If more than one SCP object is found in AD (it means there are multiple CAS servers in the Exchange organization), Outlook client will choose one of the SCP entries that
    are in the same site to obtain the AutoDisocover URL.
    b. If we cannot find SCP object, then Outlook client will use DNS to locate AutoDiscover.
    Outlook parses out the domain (SMTP suffix) via your EmaiAddress, then attempts to connect to the predetermined order of URLs via the suffix.
    For example: If my email address is
    [email protected]
    Outlook tries POST commands to the following order of URLs:
    https://contoso.com/autodiscover/autodiscover.xml
    https://autodiscover.contoso.com/autodiscover/autodiscover.xml
    NOTE: The URLs above is by design, hardcode
    and cannot be changed.
    c.
    If those fail, Outlook tries a simple redirect to another URLs in IIS:
    http://contoso.com/autodiscover/autodiscover.xml
    http://autodiscover.contoso.com/autodiscover/autodiscover.xml
    If none of these URLs work then DNS is most likely not set up correctly.
    We can test that by pinging one of the above URLs.
    If that is successful, we must ensure the URLs contoso.com or autodiscover.contoso.com are actually pointing to the CAS server.
    If the ping fails then there is a chance that DNS is not set up correctly so be sure to check that the URLs are even registered.
    NOTE: If contoso.com is a non-CAS server,
    we should add a Host record with just AutoDiscover. And point that entry to your CAS server that is running AutoDiscover.
    d.
    If still failed, we can use DNS SRV lookup for _autodiscover._tcp.contoso.com, then “CAS01.contoso.com” returned. Outlook will ask permission from the user to continue
    with AutoDiscover to post to https://CAS01.contoso.com/autodiscover/autodiscover.xml
    Non-Domain-joined
    It first tries to locate the Autodiscover service by looking up the SCP object in AD. However the client is unable to contact AD, it tries to locate
    the Autodiscover service by using DNS.
    Then, same as step b, c, d in
    Domain-joined scenario.
    6. How to change the AutoDiscover
    service location order forcibly?
    By default, Outlook client locates AutoDiscover service in that order above.
    We can also change the order forcibly.
    a.
    If we want to locate AutoDiscover service via one of the autodiscover URLs, please running following command in EMS:
    Set-ClientAccessServer -identity <servername> -AutodiscoverServiceInternalUri https://autodiscover.contoso.com/autodiscover/autodiscover.xml(URL
    that you want)
    b. If we want to locate AutoDiscover service via
    SRV record, please follows this KB to set up SRV:
    http://support.microsoft.com/kb/940881
    7. How to check AutoDiscover Healthy
    a. We should make sure the AutoDiscover
    is healthy before using AutoDiscover to perform troubleshooting.
    b.
    We can browse following URL in IE explorer:
    https://autodiscover.vamwan.com/autodiscover/autodiscover.xml
    If it returns “code 600”, that means AutoDiscover is healthy.
    Screenshot as below:
    c. AutoDiscover itself returns errors to the requesting client if the incoming request does not contain the appropriate information to complete a
    request.
    The following table explains the possible errors that could be returned.
    Error   Value
    Description  
    600
    Mailbox not found and a   referral could not be generated.
    601
    Address supplied is not   a mailbox. The provided email address is not something a client can connect to.   It could
    be a group or public folder.
    602
    Active Directory error.
    603
    Others.
    The 600 “Invalid Request” error is returned because a user name was not passed to the service. That is OK for this test because this does confirm
    the service is running and accepting requests.
    d.
    If AutoDiscover service is not working well, I suggest re-building the AutoDiscover Virtual Directory for testing.
    Steps as below:
    1) Running following command in EMS to remove the AutoDiscover VD (we cannot delete it via EMC):
    Remove-AutodiscoverVirtualDirectory -Identity "CAS01\autodiscover(autodiscover.contoso.com)"
    Please refer:
    http://technet.microsoft.com/en-us/library/bb124113(v=exchg.141).aspx 
    2)
    Running following command in EMS to verify whether we have removed the AutoDisocver VD successfully:
    Get-AutodiscoverVirtualDirectory | FL
    Please refer:
    http://technet.microsoft.com/en-us/library/aa996819(v=exchg.141).aspx
    3)
    Running following command in EMS to re-creating a new AutoDiscover VD:
    New-AutodiscoverVirtualDirectory -Websitename <websitename> -BasicAuthentication:$true -WindowsAuthentication:$true
    Please refer:
    http://technet.microsoft.com/en-us/library/aa996418(v=exchg.141).aspx
    8. Common issues
    a. Outlook Disconnection
    Issue and Troubleshooting
    Issue:
    Sometimes the Outlook clients cannot connect to the Exchange server after migrating to a new Exchange server or changing to new CAS. The Outlook clients
    always connect to the old CAS server.
    Troubleshooting:
    To solve this issue, we should change the SCP via following command:
    Set-ClientAccessServer -Identity
    <var>CAS_Server_Name</var> -AutodiscoverServiceInternalUri
    https://mail.contoso.com(newCAS’FQDN)/autodiscover/autodiscover.xml
    b. Autodiscover
    Certificate issue
    Tips on Certificate:
    Exchange requires a certificate to run an SSL protocol such as HTTPS. We can use the certificate that supports subject alternate names (SAN) in Exchange.
    This is to allow the certificate to support resources that have different names, such as Outlook Anywhere and the Autodisocver Web application.
    Issue and Troubleshooting
    Issue:
    We receiver the Certificate Principal Mismatch error when we use a SAN certificate.
    Troubleshooting:
    1) Please determine the FQDN that the client
    uses to access the resource. Steps as below:
    OutlookàToolsàAccount
    SettingsàE-mailàclick
    the Exchange accountàChangeàMore
    SettingsàConnectionàExchange
    Proxy Settingsànote the FQND that list in the
    Only connect to proxy servers that have this principal name in their certificate box.
    2)
    Please using EMS to determine the value for the CerPrincipalName attribute: Get-OutlookProvider
    This command returns the result for the EXPR name.
    3)
    Please re-setting the CertPrincipalName attribute to match the FQDN via following command:
    Set-OutlookProvider EXPR –CertPrincipalName: “msstd:<FQDN the certificate is issued to>”
    9. Resource for reference:
    Autodiscover and Exchange 2007
    http://technet.microsoft.com/en-us/library/bb232838(v=exchg.80).aspx
    White Paper: Understanding the Exchange 2010 Autodiscover Service
    http://technet.microsoft.com/en-us/library/jj591328(v=exchg.141).aspx
    Certificate Principal Mismatch
    http://technet.microsoft.com/en-us/library/aa998424(v=exchg.80).aspx
    Please click to vote if the post helps you. This can be beneficial to other community members reading the thread.

    HI,
     I get following?  when run the test?  user is login to Domain A but accessing exchange in Domain B?

  • Performance counters for SQL database

    I have this need to carry out a performance test on our SQL database. What are the counters that I need to check and are there any tools that would assist me on this?
    mayooran99

    Hello,
    Please refer to the following series of articles.
    n  Beginners
    http://blogs.msdn.com/b/john_daskalakis/archive/2013/10/07/how-to-troubleshoot-sql-server-performance-issues-with-simple-tools-part-1-how-to-collect-a-detailed-perfmon-trace.aspx
    http://blogs.msdn.com/b/john_daskalakis/archive/2013/10/14/how-to-troubleshoot-sql-server-performance-issues-with-simple-tools-part-2-how-to-analyze-the-perfmon-trace-and-detect-io-bottlenecks.aspx
    http://blogs.msdn.com/b/john_daskalakis/archive/2013/10/21/how-to-troubleshoot-sql-server-performance-issues-with-simple-tools-part-2-how-to-analyze-the-perfmon-trace-and-detect-sql-server-performance-issues.aspx
    http://blogs.msdn.com/b/john_daskalakis/archive/2013/10/30/how-to-troubleshoot-sql-server-performance-issues-with-simple-tools-part-3-the-profiler.aspx

    n  Advanced
    http://blogs.msdn.com/b/john_daskalakis/archive/2013/11/04/specialized-performance-troubleshooting-part-1-how-to-troubleshoot-forwarded-records.aspx
    http://blogs.msdn.com/b/john_daskalakis/archive/2013/11/11/specialized-performance-troubleshooting-part-2-how-to-troubleshoot-memory-problems-in-sql-server.aspx
    http://blogs.msdn.com/b/john_daskalakis/archive/2013/11/18/specialized-performance-troubleshooting-part-3-how-to-identify-storage-issues-at-a-sql-server-box.aspx
    Hope this helps.
    Regards,
    Alberto Morillo
    SQLCoffee.com

Maybe you are looking for