Have you ever been reviewing SQL Server waits and spotted any that had PREEMPTIVE in the name? There about 200 variations of PREEMPTIVE wait types out there, so I’m guessing you’ve seen at least one at some point in your career. They don’t always get the same type of attention as a CXPACKET wait or a THREADPOOL wait, so perhaps you never took the time to find out what they mean. Let’s discuss PREEMPTIVE waits as well as what NON-PREEMPTIVE means.
What Are PREEMPTIVE Waits?
A PREEMPTIVE wait occurs when SQL Server calls out to the operating system for a specific function or to perform some type of task. While the operating system is busy managing the work, SQL Server patiently records the PREEMPTIVE wait.
What is Meant by NON-PREEMPTIVE?
What about when SQL Server controls its thread scheduling instead of the operating system? This is considered NON-PREEMPTIVE which means SQL Server has the power to manage execution and won’t be interrupted by the OS. SQL Server may yield back to the operating system, but it won’t do so until it completes its current task.
Bunches and Bunches
There are a lot of preemptive wait types. A lot. Feel free to take a look here and see for yourself. I searched “PREEMPTIVE” and took a screenshot so you can catch a glimpse of how many there are:

Why are there so many? Most of the PREEMPTIVE wait types correspond to the Windows function that SQL Server was waiting on. Rather than a one-size-fits-all generic PREEMPTIVE wait, these names are more specific.
Hopefully, these types of waits haven’t caused you issues in the past and won’t cause issues in the future. But if you do see them creeping up to higher numbers than usual, you’ll have a bit of background on what they are.
Thanks for reading!
One thought on “PREEMPTIVE Waits in SQL Server”