The wait type LCK_M_IS is ranked #6 by Stedman Solutions and Database Health Monitor. Wait statistics, in the context of SQL Server, refer to the amount of time that a query spends waiting to access data in the database. When a client application requests data from the database, the request is placed in a queue and the client application must wait for its turn to access the data. The time that the query spends waiting is called a "wait" and is tracked by SQL Server. This information can be used to identify potential performance bottlenecks and optimize the performance of the database. Wait statistics are commonly used by database administrators to diagnose and troubleshoot performance issues in SQL Server.
SQL Server uses various locks to manage data access and maintain consistency in multi-user environments. One specific lock wait type is LCK_M_IS, which stands for Intent Shared Lock. This wait type occurs when SQL Server is waiting to acquire a shared lock on a resource, typically because other transactions are already holding incompatible locks. In this post, we’ll explain what LCK_M_IS means, when it appears, and how it may impact SQL Server performance. What Is the LCK_M_IS Wait Type?The LCK_M_IS wait type appears when SQL Server is trying to acquire an Intent Shared (IS) lock on a database resource. An IS lock is used when SQL Server wants to read data but needs to signal that it may need to acquire more specific shared locks on individual rows or pages within that resource. An IS lock does not block other reads, but it may need to wait if an exclusive lock (which prevents reads) is already in place. In simpler terms, a LCK_M_IS wait happens when SQL Server is trying to prepare for a read operation by acquiring a lock that lets it signal its intent to read data. If another transaction is modifying that data with an exclusive lock, SQL Server may have to wait until the other transaction completes before it can proceed. When Does LCK_M_IS Appear?LCK_M_IS waits generally occur in environments with high levels of concurrent reads and writes. Some common scenarios where LCK_M_IS waits may appear include:
Some LCK_M_IS waits are normal in any multi-user system, but frequent or prolonged waits may indicate a locking issue that could impact performance. Why LCK_M_IS Waits MatterWhile some LCK_M_IS waits are expected, high or frequent waits can slow down the system, causing delays in query processing. Excessive LCK_M_IS waits may indicate that SQL Server is spending too much time waiting to acquire intent shared locks, which can impact overall performance. Common causes of high LCK_M_IS waits include:
How to Address LCK_M_IS WaitsIf LCK_M_IS waits are causing performance issues, consider these strategies to help reduce them:
ConclusionThe LCK_M_IS wait type in SQL Server occurs when the system is waiting to acquire an intent shared lock on a resource. While some waits are expected, frequent or long waits may indicate lock contention, long-running transactions, or inefficient queries that could be affecting performance. By optimizing queries, improving indexing, using shorter transactions, and monitoring for blocking, you can help reduce LCK_M_IS waits and improve SQL Server performance. If you need assistance with SQL Server performance tuning, lock management, or query optimization, Stedman Solutions offers managed services to help keep your SQL Server environment running smoothly and efficiently.
Applies toRelated WaitsLCK_M_BULCK_M_BU_ABORT_BLOCKERS LCK_M_BU_LOW_PRIORITY LCK_M_IS_ABORT_BLOCKERS LCK_M_IS_LOW_PRIORITY LCK_M_IU LCK_M_IU_ABORT_BLOCKERS LCK_M_IU_LOW_PRIORITY LCK_M_IX LCK_M_IX_ABORT_BLOCKERS LCK_M_IX_LOW_PRIORITY LCK_M_RIn_NL LCK_M_RIn_NL_ABORT_BLOCKERS LCK_M_RIn_NL_LOW_PRIORITY LCK_M_RIn_S LCK_M_RIn_S_ABORT_BLOCKERS LCK_M_RIn_S_LOW_PRIORITY LCK_M_RIn_U LCK_M_RIn_U_ABORT_BLOCKERS LCK_M_RIn_U_LOW_PRIORITY LCK_M_RIn_X LCK_M_RIn_X_ABORT_BLOCKERS LCK_M_RIn_X_LOW_PRIORITY LCK_M_RS_S LCK_M_RS_S_ABORT_BLOCKERS LCK_M_RS_S_LOW_PRIORITY LCK_M_RS_U LCK_M_RS_U_ABORT_BLOCKERS LCK_M_RS_U_LOW_PRIORITY LCK_M_RX_S LCK_M_RX_S_ABORT_BLOCKERS LCK_M_RX_S_LOW_PRIORITY LCK_M_RX_U LCK_M_RX_U_ABORT_BLOCKERS LCK_M_RX_U_LOW_PRIORITY LCK_M_RX_X LCK_M_RX_X_ABORT_BLOCKERS LCK_M_RX_X_LOW_PRIORITY LCK_M_S LCK_M_S_ABORT_BLOCKERS LCK_M_S_LOW_PRIORITY LCK_M_SCH_M LCK_M_SCH_M_ABORT_BLOCKERS LCK_M_SCH_M_LOW_PRIORITY LCK_M_SCH_S LCK_M_SCH_S_ABORT_BLOCKERS LCK_M_SCH_S_LOW_PRIORITY LCK_M_SIU LCK_M_SIU_ABORT_BLOCKERS LCK_M_SIU_LOW_PRIORITY LCK_M_SIX LCK_M_SIX_ABORT_BLOCKERS LCK_M_SIX_LOW_PRIORITY LCK_M_U LCK_M_U_ABORT_BLOCKERS LCK_M_U_LOW_PRIORITY LCK_M_UIX LCK_M_UIX_ABORT_BLOCKERS LCK_M_UIX_LOW_PRIORITY LCK_M_X LCK_M_X_ABORT_BLOCKERS LCK_M_X_LOW_PRIORITY See AlsoAll Wait Types |