in a modest size deployment of EPiServer, I am getting "request timed out" error messages when attempting to delete a club. I've drilled into the EPiServer.Community 3.2 code using Reflector and found out that a single deletion triggers multiple, possibly hundreds, calls between the .Net code and DB. Is this time out a know problem? Possibly fixed in version 4? Or do I have to write my own stored procedure for deleting clubs?
It's not an issue that I'm aware of, do you have any additional information and I could try to look it up...?
I've looked into what's needed to upgrade to Community 4.0 - seems that this is too complicated to really be a solution to my problem. Not to mention that the client would have to buy a new EPi 6 license, as the site runs on EPi 5 currently. That's a pity, as the Community 4 replaces the [--] code with a single DELETE. A brand new database schema, I guess.
OK, current situation using 3.2, EPiServer 5, Relate+ 1: the Community 3.2 code for deleting a club is not pretty, but it works - up to the point where an event is triggered in the .Net code (FrameworkFactoryBase.OnEntityRemoved), which in turn invokes stored procedure spEPiServerCommunityNewsFeedRemoveStoriesByEntity (from NewsFeedModule.FrameworkFactoryBase_EntityRemoved). This throws time out and causes the whole transaction to be reverted. Increasing the execution timeout (<httpRuntime executionTimeout="1800"/>) allows the call to succeed. However, it puts the DB server under 90% CPU load on a single core for 3 minutes - that's not a workaround that I'm willing to use on the live site.
Further information: the guilty part is this SQL:
SELECT intID FROM tblEPiServerCommunityNewsFeedStory as s WHERE NOT EXISTS (SELECT * FROM tblEPiServerCommunityNewsFeedStoryTarget AS t WHERE t.intStoryID = s.intID) OR NOT EXISTS (SELECT * FROM tblEPiServerCommunityNewsFeedStoryActor AS a WHERE a.intStoryID = s.intID) DELETE FROM tblEPiServerCommunityNewsFeedStory where intID IN ( SELECT intID FROM tblEPiServerCommunityNewsFeedStory as s WHERE NOT EXISTS (SELECT * FROM tblEPiServerCommunityNewsFeedStoryTarget AS t WHERE t.intStoryID = s.intID) OR NOT EXISTS (SELECT * FROM tblEPiServerCommunityNewsFeedStoryActor AS a WHERE a.intStoryID = s.intID) );
As the tblEPiServerCommunityNewsFeedStoryTarget has over 0.5M entries, tblEPiServerCommunityNewsFeedStoryActor has over 0.5M entries and tblEPiServerCommunityNewsFeedStory has over 0.5M entries, this is quite costly.
Ah. This more detailed description (which isn't directly related to the clubs) I do recognize, I believe you can contact EPiSupport for a fix.