Lợi ích của việc sử dụng VỚI TABLOCK trên CHERTN


14

Trong một số trường hợp, làm một INSERT INTO <tablename> (WITH TABLOCK)sẽ nhanh hơn do đăng nhập tối thiểu. Những trường hợp bao gồm có cơ sở dữ liệu trong BULK_LOGGEDmô hình phục hồi.

Có bất kỳ lợi ích hiệu suất tiềm năng nào khác khi sử dụng WITH TABLOCKtrên một INSERTbảng trống khi cơ sở dữ liệu ( tempdb ) đang sử dụng SIMPLEmô hình khôi phục không?

Tôi đang làm việc với SQL Server 2012 Standard Edition.

Trường hợp sử dụng của tôi là để tạo và sau đó lập tức điền vào bảng tạm thời trong một thủ tục được lưu trữ bằng cách sử dụng một INSERT...SELECT, có thể chứa tới vài triệu hàng. Tôi cố gắng tránh loại lạm dụng tempdb đó , nhưng đôi khi nó là cần thiết.

Tôi đang cố gắng xây dựng một trường hợp để yêu cầu TABLOCK. Có vẻ như nó sẽ không làm tổn thương gì, và có thể có lợi ích. Tôi đang cố gắng tìm hiểu xem có đủ lợi ích tiềm năng để thêm nó ở bất cứ đâu trong toàn bộ cơ sở mã của chúng tôi hay không, nơi tôi chắc chắn không có quy trình nào khác muốn ghi vào bảng.

Tôi thường chèn vào một bảng tạm thời cục bộ mới được tạo với một cụm PK, nhưng đôi khi sử dụng một đống.

Câu trả lời:


15

Tôi biết một vài lợi ích nhưng chúng chủ yếu là tình huống.

  1. Sử dụng TABLOCKsẽ giảm đồng thời nhưng sẽ ngay lập tức khóa bảng trên bảng đích. Miễn là bạn có thể đảm bảo rằng chỉ cần một phiên sẽ chèn vào bảng, điều này sẽ tránh các khóa hàng hoặc trang không cần thiết và sẽ ngăn chặn khóa leo thang . Rốt cuộc, nếu bạn đang chèn quá nhiều dữ liệu thì dù sao bạn cũng sẽ bị khóa leo thang, tại sao không làm nó trả trước?
  2. Nếu bạn đang chèn vào một heap nén trang trống mà không có TABLOCKtất cả các trang sẽ có nén hàng thay vì nén trang :

Hàng vừa được chèn được nén trang:

  • nếu hàng mới đi đến một trang hiện có với nén trang

  • nếu hàng mới được chèn thông qua BULK INSERT với TABLOCK

  • nếu hàng mới được chèn thông qua INSERT INTO ... (TABLOCK) CHỌN TỪ

Mặt khác, hàng được nén.

  1. Trong SQL Server 2016, TABLOCKgợi ý là bắt buộc để có được chèn song song vào các đống , CCI (Chỉ số cột cửa hàng cụm)các bảng tạm thời cục bộ . Có rất nhiều hạn chế, một số trong đó không được ghi nhận. Không thể có một IDENTITYcột, việc chèn không thể được thực hiện thông qua một OUTPUT, v.v.

Xem thêm Hướng dẫn hiệu suất tải dữ liệu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.