Thursday, 21 November 2013

Microsoft Dynamics AX 2012 Finance Training-Microsoft Dynamics AX 2012 Reporting - tips how to improve performance

There are some tips we can use to improve performance of reports for Dynamics AX 2012.
  1. Use static reports. The deployment of static reports is described here:  In this way we will safe several calls to Metadata service to get labels values and correct formatting of dates and numbers.
  2. Install application hotfix KB 2879661 which fix the situation when first generation of a report after Dynamics AX client restart takes long. This happens for each user.
  3. Newest kernel. Hotfixes for performance improvement are included in new kernels that are released; sometimes there is a dramatic impact on performance.
  4. In the morning a first report generation takes a lot of time
SSRS uses session pooling. The first request that comes in from a user – a session will be created for them within the AOS services. Each user gets a session cached on the AOS services, so subsequent calls just reuse the session which matches the user who is making the request. This means that the first time this is created for the user the report will perform slower.
SSRS also uses a metadata cache the first request coming in which needs a certain piece of metadata, the metadata is read from the application code, and then cached in SSRS so it doesn’t have to read it subsequent times. There is one metadata cache for all users – once an object is cached in metadata, the services don’t go back to the code and retrieve it again, and they just read from cache, until the cache is cleared. This is also why a report may become slower the first time it is run.
The RecycleTime is used to restart the application domain which causes a refresh of the metadata.You could edit the RecycleTime (value is in Minutes) to therefore stop the cache from clearing and which then stop the extra hop to the AOS to gather the metadata.
Edit the <RecycleTime> element within:
RSReportServer.config 
Open the RsReportServer.config file.
•              If you are using SQL Server 2008, the default location of this file is: \Program Files\Microsoft SQL Server\MSRS10.[SSRSInstanceName]\Reporting Services\ReportServer.
•              If you are using SQL Server 2008 R2, the default location of this file is: \Program Files\Microsoft SQL Server\MSRS10_50.[SSRSInstanceName]\Reporting Services\ReportServer.
•              If you are using SQL Server 2012, the default location of this file is: \Program Files\Microsoft SQL Server\MSRS11.[SSRSInstanceName]\Reporting Services\ReportServer
The default value is 720 (the value is in min so it is 12 hours.
NOTE:
Problems you may see when deploying reports because of metadata caching.
A new field is added to a table in AX, the field is used on a report in VS. The report deploys to SSRS.
However when the report is called, it fails on the new field.
This is because SSRS caches metadata. The new object is not recognized as the old metadata is still cached
The other solution is when every morning the first user has to wait for report very long is to pre-warm up the specific report. We would have to choose those reports which are critical for customer and have to run fast regards the time. To pre-warm up the report we can:
  1. Run report in batch job ie. SalesInvoice report:
public void run()
    {
       SrsReportRunController controller = new SrsReportRunController();
    SrsReportDataContract contract;
    SalesInvoiceContract rdpContractClass;
    LogisticsAddressCountryRegionISOCode code = "US";
    // establish the report name
    controller.parmReportName(ssrsReportStr(SalesInvoice, Report));
    // suppress the parameter dialog
    controller.parmShowDialog(false);
    controller.parmReportContract().parmPrintSettings().printMediumType(SRSPrintMediumType::File);
    controller.parmReportContract().parmPrintSettings().fileFormat(SRSReportFileFormat::PDF);
    controller.parmReportContract().parmPrintSettings().overwriteFile(true);
    controller.parmReportContract().parmPrintSettings().fileName("c:\\TEMP\\DummyReport.pdf");
    // set the required parameter.
    contract = controller.parmReportContract();  
    rdpContractClass = contract.parmRdpContract() as SalesInvoiceContract;
    rdpContractClass.parmCountryRegionISOCode(code);
    // start the operation
    controller.runReport();
    }
* Resume preparation and Interview assistance will be provided.
For any further details please 
contact 
India +91-9052666559
         USA : +1-678-693-3475.
please mail us all queries to info@magnifictraining.com 

0 comments:

Post a Comment