Locking Behaviour with PDW Backups
You may notice your daily ETL jobs or queries running slower than usual or in a queued state when a PDW backup is running. By design, a Backup operation in PDW requires an Exclusive Update (XU) on the database in order to
execute. This is implemented using a standard Lock Manager in PDW engine and the behaviour is different than what you see in a normal SQL SMP. In SQL Server writes are allowed to happen while the Backup operation is active and does not acquire an XU lock. PDW as a distributed architecture, uses this design to guarantee data consistency across nodes while backups are being taken.
You can easily reproduce this behaviour using the following queries:
1. BACKUP DATABASE Adventureworkspdw2012 TO DISK = '\\<your Backup server IP>\backups\AdventureWorks2012.bak' WITH description = 'Backup Test';
2. SELECT * FROM FactInternetSales
This query completes in few seconds when the Backup is active. SharedReads are allowed when the Backup is running.
The following query can be used to see all active requests in PDW.
SELECT * FROM sys.dm_pdw_exec_requests where status = 'Running'
request_id |
session_id |
status |
submit_time |
start_time |
end_compile_time |
end_time |
total_elapsed_time |
command |
QID2119773 |
SID197457 |
Running |
2016-02-15 08:25:42.637 |
2016-02-15 08:25:42.637 |
2016-02-15 08:25:42.650 |
NULL |
106731 |
BACKUP DATABASE AdventureworksPdw2012 TO DISK = '\\xx.xx.xx.xx\backups\AWWorks2012.bak' WITH description = 'Backup Test' |
QID2119774 |
SID197277 |
Running |
2016-02-15 08:25:47.243 |
2016-02-15 08:25:47.243 |
NULL |
NULL |
102121 |
TRUNCATE TABLE Dim_Product |
Alternatively, you can see similar details from Admin Console under the Backups/Restore section. An ExclusiveUpdate lock is granted for Request_ID = QID2119773.
3. TRUNCATE TABLE Dim_Product
This table contains only 606 rows and the Truncate should normally take less than a second but it is still running after 102 secs. This Truncate operation corresponding to QID2119774 is in queued state while the Backup is active. This info can be found in Admin Console under the Queries section.
Note below the Acquire_Time column is NULL and the state = QUEUED when the Backup is still running.
SELECT * FROM sys.dm_pdw_waits
wait_id |
session_id |
type |
object_type |
object_name |
request_id |
request_time |
acquire_time |
state |
0 |
SID197277 |
SharedUpdate |
DATABASE |
AdventureWorksPDW2012 |
QID2119774 |
2016-02-15 08:25:47.243 |
NULL |
Queued |
1 |
SID197277 |
Shared |
SCHEMA |
AdventureWorksPDW2012.dbo |
QID2119774 |
2016-02-15 08:25:47.243 |
NULL |
Queued |
2 |
SID197277 |
Exclusive |
OBJECT |
AdventureWorksPDW2012.dbo.Dim_Product |
QID2119774 |
2016-02-15 08:25:47.243 |
NULL |
Queued |
A SharedUpdate is required for INSERTS and UPDATES. When an ExclusiveUpdate is acquired, any writings to the locked object will be prohibited until the lock is released.