EPiServer DDS Performance issues

While working on a project, we found an issue with the 404handler community plugin. The problem appeared when we tried to import 60k redirects through the plugin dashboard interface. First, it took at least 5 hours to upload and process the file and even worse, every time we enabled the show redirects checkbox in the UI, the plugin was making the site unresponsive for at least 10 minutes or sometimes crashed the site completely.

2d3

We though about one possible solution which consisted in reducing the amount of redirects with regular expressions and the IIS rewrite module, but it was taking a huge amount of time to manually check for regular expressions matches. Thus, we decided to check the plugin’s code for some insight and we found that it was using EPiServer DDS (Dynamic Data Storage) to store the redirects. In fact, this is not a bad idea, and it is quite common in EPiServer plugin development, DDS is easy to use, implement and it helps to reduce cumbersome code to access the EPiServer database. However, even EPiServer mentions that DDS should not be used in an scenario with several thousand rows. The reason is that DDS saves the data rows in the table tblBigTable which in my personal opinion is a mess. The DDS store the information in scattered fields inside the table and a view join them together to build and show the DDS store created by code. This create a huge problem when the number of rows is big enough, for that reason the query takes several seconds, if not minutes (in our case) to complete.

1de

In the end, we decided to change the plugin’s code to create the redirects in a new table in the database. This change also implied a modification in the DDS store manager replacing it with direct queries to the database (I will explain how we did this in another post). This improved the performance to 5 minutes to upload the 60k entries xml file and 3 to 5 seconds to display the redirects in the dashboard plugin interface.

2d4

As conclusion, we would recommend to implement DDS for special cases where you know in advance that the amount of rows are not going to grow up to several thousands. This will benefit to the performance of your site and you at the same time keep taking advantage of the simplicity that DDS provides. I hope it will help someone and as always keep learning !!!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s