Link to this page: https://git.io/fhA7L
Links to software used in this course:
- SQL Server Downloads (LocalDB, used in the course, is in the SQL Server Express installation):
- Azure Data Studio (formerly SQL Server Operations Studio):
- SQL Server Management Studio (SSMS):
Docker Containers for SQL Server:
-
Windows
docker pull microsoft/mssql-server-windows-developer
-
Linux
docker pull microsoft/mssql-server-linux
Links to Microsoft documentation on concurrency and transactions:
- Transaction Locking and Row Versioning Guide
- SET TRANSACTION ISOLATION LEVEL
- Transaction Related Dynamic Management Views and Functions
- Extended Events
- Transactions
- TRY...CATCH
- SET XACT_ABORT
- SET LOCK_TIMEOUT
Snapshot Isolation
- Snapshot Isolation in SQL Server
- ALTER DATABASE SET Options
Related Pluralsight Courses:
- SQL Server: Introduction to Extended Events
- Handling Errors in SQL Server
- XML support in SQL Server
Miscellaneous SQL Server documentation links:
- Configuration Functions
Ebooks and other resources:
- Defensive Database Programming
- SQL Server Concurrency: Locking, Blocking and Row Versioning
- Troubleshooting SQL Server: A Guide for the Accidental DBA
- sp_whoisactive from Adam Machanic
Thanks Gerald. I am enjoying your course. It is helping me understand isolation in ways that I hadn't before. I wanted to share one difficulty I spent hours working on understanding last night with the demo in Module 4, Read Committed.
I hadn't learned about READ_COMMITTED_SNAPSHOT ON yet. The default on a database is for that to be OFF. But, in the create database script, it turns it on.
I couldn't understand why when you ran the example, the script would block on the shared row lock, but when I ran what I thought was the same thing, it would just return the same results as before, instead of blocking. The results from your video would only happen when READ_COMMITTED_SNAPSHOT was set to OFF.
I can only imagine that is because when you exported your database, it took the last value of it, and yours happened to have that as the last value.
I searched the internet and found this post explaining what I see you explain in Module 5.
This helped me understand it and reproduce the behavior you demonstrated.
Thanks again for your course and I wish you all the best.