Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

khóa trên bảng tạm thời trong SQL Server 2008

Bạn có thể sử dụng cờ theo dõi 1200 (trên một máy phát triển vì tôi nghĩ đây là toàn cầu) để xem các khóa được lấy ra cho chính bạn

SET NOCOUNT ON;

CREATE TABLE ##T
(
X INT
)

INSERT INTO ##T 
SELECT number
FROM master..spt_values

CREATE TABLE #T
(
X INT
)
INSERT INTO #T
SELECT *
FROM ##T

/*Run the commands first with the trace flag off so the locking
info is less full of irrelevant stuff about plan compilation 
*/
GO

PRINT '##T Read Committed'
SELECT COUNT(*) FROM ##T
PRINT '##T NOLOCK'
SELECT COUNT(*) FROM ##T WITH (NOLOCK)
PRINT '##T Finished'

GO

PRINT '#T Read Committed'
SELECT COUNT(*) FROM #T
PRINT '#T NOLOCK'
SELECT COUNT(*) FROM #T WITH (NOLOCK)
PRINT '#T Finished'

GO

DBCC TRACEON(-1,3604)
DBCC TRACEON(-1,1200)

GO

PRINT '##T Read Committed'
SELECT COUNT(*) FROM ##T
PRINT '##T NOLOCK'
SELECT COUNT(*) FROM ##T WITH (NOLOCK)
PRINT '##T Finished'

GO

PRINT '#T Read Committed'
SELECT COUNT(*) FROM #T
PRINT '#T NOLOCK'
SELECT COUNT(*) FROM #T WITH (NOLOCK)
PRINT '#T Finished'

GO

DBCC TRACEOFF(-1,3604)
DBCC TRACEOFF(-1,1200)

DROP TABLE ##T
DROP TABLE #T

Đối với một bảng tạm thời toàn cục, không có gì ngạc nhiên khi nó tạo ra nhiều sự khác biệt hơn.

Vẫn có một sự khác biệt nhỏ về loại khóa cho #temp cục bộ bảng mặc dù. Tôi tái tạo phần đầu ra đó bên dưới

#T Read Committed
Process 56 acquiring IS lock on OBJECT: 2:301244128:0  (class bit0 ref1) result: OK

Process 56 acquiring S lock on OBJECT: 2:301244128:0  (class bit0 ref1) result: OK

Process 56 releasing lock on OBJECT: 2:301244128:0 

#T NOLOCK
Process 56 acquiring Sch-S lock on OBJECT: 2:301244128:0  (class bit0 ref1) result: OK

Process 56 acquiring S lock on HOBT: 2:9079256880114171904 [BULK_OPERATION] (class bit0 ref1) result: OK

Process 56 releasing lock on OBJECT: 2:301244128:0 

Chỉnh sửa: Các kết quả trên là cho một đống. Đối với các bảng tạm thời có chỉ mục được phân nhóm, kết quả như bên dưới.

#T Read Committed
Process 55 acquiring IS lock on OBJECT: 2:1790629422:0  (class bit0 ref1) result: OK

Process 55 acquiring S lock on OBJECT: 2:1790629422:0  (class bit0 ref1) result: OK

Process 55 releasing lock on OBJECT: 2:1790629422:0 

#T NOLOCK
Process 55 acquiring Sch-S lock on OBJECT: 2:1790629422:0  (class bit0 ref1) result: OK

Process 55 releasing lock on OBJECT: 2:1790629422:0 

#T Finished

Lý do cho BULK_OPERATION khóa trên phiên bản heap được giải thích tại đây . Nhưng có thể thấy rằng chi phí khóa là khá tối thiểu bất cứ điều gì.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách lấy tất cả các bảng có ràng buộc khóa chính được tạo trong cơ sở dữ liệu SQL Server - Hướng dẫn sử dụng SQL Server / TSQL 57

  2. Cách buộc gợi ý nolock cho các lần đăng nhập máy chủ sql

  3. SQLAlchemy cắt bỏ VARCHAR (MAX)

  4. Mệnh đề WHERE để tìm tất cả các bản ghi trong một tháng cụ thể

  5. SQL Server:Mặt tối của NVARCHAR