When multiple transactions need to perform work that requires a nonshareable lock on the same object, SQL Engine controls concurrency by:
- Granting a lock to the transaction that requests access to first.
- Queuing subsequent transactions in order of their arrival, such that they wait indefinitely until preceding query completes and a new lock can be granted, with these exceptions:
- Requests identified with the LOCKING modifier NOWAIT option immediately abort rather than join the queue.
- MultiLoad transactions can timeout after waiting for over 50 seconds. See Teradata® MultiLoad Reference, B035-2409.
- Aborting the younger request(s) among deadlocked requests. Deadlocking occurs when multiple requests need access to several of the same objects, each request has a lock on one of the objects, and is locked out of at least one of the objects, such that none of the requests can complete.
- Releasing the lock and granting a new lock to the oldest transaction in the queue, when the current transaction completes.
For a complete discussion of locks and locking, see Teradata Vantage™ - SQL Request and Transaction Processing, B035-1142.