Deadlock on table tblChangeNotificationConnection

Fixed in

EPiServer.CMS.Core 10.3.2

Created

Oct 27, 2016

Updated

Jan 13, 2017

Area

CMS Core

State

Closed, Fixed and tested


Description

Steps to reproduce:

1. Download the Quicksilver project https://github.com/episerver/Quicksilver.
2. Load the project in Visual Studio.
3. Locate the file connectionString.config in the EPiServer.Reference.Commerce.Site project.
4. Comment out EPiServerAzureBlops and EPiServerAzureEvents lines (line 5 & 6).
5. Build the project (restoring packages requires Episerver NuGet feed).
6. Run the file SetupDatabases.cmd in the Setup folder.
7. Start the project in debug-mode.
8. Do the final migration step (should be automatic) (login is admin/store).

Then, set up the project in IIS (Internet Information Services):
1. Open your localhost file located in C:\Windows\System32\drivers\etc\hosts
2. Add the line:
*127.0.0.1 dev.quicksilver.dk *
at the end of the file.
3. Open IIS and create a new website.
4. Fill out the following:

  • Site name: dev.quicksilver.dk
    Physical path: path to EPiServer.Reference.Commerce-Site folder
    Host name: dev.quicksilver.dk *
    5. Go to application pools in IIS.
    6. Right click the dev.quicksilver.dk pool and go to advanced settings.
    7. Change the value of the “Maximum Worker Processes” to, for example, 10 (2 should be fine but the error happens more frequently if you change it to a high value).

Now, start multiple instances of the site:
1. Start your browser and go to dev.quicksilver.dk
2. The site starts up (styles might be missing but we don’t care about that).
3. Start an incognito browser and browse to dev.quicksilver.dk – If the site takes 5-10 seconds to start, it means you successfully started a new instance in the IIS.
4. Close the incognito browser and repeat step 2 until you see at least 4-5 long loads (meaning you have around 5 instances of the IIS running).
5. This can also be checked in the task manager – Check the processes “IIS Worker Process” if they use “a lot of memory,” it means they are running instances of the site.

Finally, capture deadlocks in the SQL Profiler:
1. Start SQL Profiler.
2. Start a new trace using the template TSQL_Locks.
3. Go to “Events selection” and tick off Lock:Cancel, SP:StmtCompleted, SP:StmtStarting, SQL:StmtCompleted & SQL:StmtStarting.