SQL Server lưu trữ các bảng tạm thời được tạo trong các thủ tục được lưu trữ và chỉ đổi tên chúng khi thủ tục kết thúc và sau đó được thực thi. Câu hỏi của tôi phải làm khi không gian tempdb được phát hành. Tôi đã đọc rằng bảng được cắt bớt ở cuối thủ tục . Tôi đã đọc các bình luận rằng việc này được xử lý trên cơ sở mỗi phiên và thấy một câu hỏi về việc có cần dọn dẹp hay không trả lời trên MSDN . Nhưng nếu nó không bao giờ được thực hiện bởi cùng một phiên hai lần thì sao?
Tôi cũng đã nghe nói rằng có một quy trình thu gom rác nền giải phóng không gian đó một khi bảng nằm ngoài phạm vi.
Việc cắt một bảng tạm thời ở cuối thủ tục được lưu trữ tạo ra nó dường như khiến không gian mà bảng sử dụng trong tempdb để dữ liệu được giải phóng nhanh hơn nếu không sử dụng câu lệnh rút gọn nào, mặc dù có những kỳ vọng ngược lại. Tại sao?
Điều gì sẽ có ý nghĩa hiệu suất tương đối của việc sử dụng hoặc không sử dụng một tuyên bố cắt ngắn như vậy? Khi sử dụng cách ly SNAPSHOT, tempdb thường bị căng thẳng và tôi nghĩ rằng việc giải phóng không gian được sử dụng trong tempdb từ một bảng tạm thời càng sớm càng tốt sẽ ngăn chặn sự tăng trưởng không cần thiết của tempdb. Tiết kiệm không gian tiềm năng này sẽ đến với chi phí hiệu suất?
Đây là một số mã để tái tạo vấn đề (chủ yếu từ @TheGameiswar, với một số thay đổi):
SET NOCOUNT ON;
GO
ALTER PROC usp_test
AS
BEGIN
IF object_id('tempdb..#temp') IS NOT NULL
DROP TABLE #temp
SELECT *
INTO #temp
FROM [dbo].[Event_28] -- This is a table with 15313 rows, using 35648 KB according to sp_spaceused
--SELECT SUM(user_object_reserved_page_count) AS [user object pages used]
-- ,(SUM(user_object_reserved_page_count) * 1.0 / 128) AS [user object space in MB]
-- ,getdate() AS BeforeTruncate
--FROM tempdb.sys.dm_db_file_space_usage;
-- TRUNCATE TABLE #temp
--SELECT SUM(user_object_reserved_page_count) AS [user object pages used]
-- ,(SUM(user_object_reserved_page_count) * 1.0 / 128) AS [user object space in MB]
-- ,getdate() AS AfterTruncate
--FROM tempdb.sys.dm_db_file_space_usage;
END
GO
SELECT SUM(user_object_reserved_page_count) AS [user object pages used]
,(SUM(user_object_reserved_page_count) * 1.0 / 128) AS [user object space in MB]
,getdate() AS 'before'
FROM tempdb.sys.dm_db_file_space_usage;
EXEC usp_test
GO
SELECT SUM(user_object_reserved_page_count) AS [user object pages used]
,(SUM(user_object_reserved_page_count) * 1.0 / 128) AS [user object space in MB]
,getdate() AS 'final'
FROM tempdb.sys.dm_db_file_space_usage;
GO 40
Các dòng bình luận đã được để lại nhận xét cho một số lần chạy và không bình luận cho những người khác. Khi TRUNCATE
đã nhận xét, phải mất từ 2,25 đến 4,5 giây trước khi kết quả của tempdb.sys.dm_db_file_space_usage
truy vấn (có thêm 452 trang và lớn hơn 34.9375 MB) phù hợp với kết quả trước khi quy trình được thực hiện. Với các dòng (bao gồm cả TRUNCATE
) chưa được bình luận, chỉ mất khoảng 0,11 - 0,9 giây. Những kết quả này là từ một hệ thống trực tiếp, với một số tăng trưởng dữ liệu nhỏ trong bảng nguồn trong thí nghiệm này.
Đầu ra mẫu với mã nhận xét (2,69 giây từ mục nhập "cuối cùng" đầu tiên đến cuối cùng):
user object pages used user object space in MB before
---------------------- --------------------------------------- -----------------------
1536 12.000000 2017-10-04 21:03:42.197
Beginning execution loop
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:42.423
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:42.533
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:42.643
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:42.883
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:42.990
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:43.100
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:43.450
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:43.650
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:43.767
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:43.993
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:44.103
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:44.213
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:44.437
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:44.553
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:44.663
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:44.887
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6000 46.875000 2017-10-04 21:03:45.003
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
1536 12.000000 2017-10-04 21:03:45.113
Kết quả mẫu với mã chưa được nhận xét (0,11 giây từ mục nhập "cuối cùng" đầu tiên đến cuối cùng):
user object pages used user object space in MB before
---------------------- --------------------------------------- -----------------------
1536 12.000000 2017-10-04 21:07:39.807
user object pages used user object space in MB BeforeTruncate
---------------------- --------------------------------------- -----------------------
6016 47.000000 2017-10-04 21:07:39.923
user object pages used user object space in MB AfterTruncate
---------------------- --------------------------------------- -----------------------
6016 47.000000 2017-10-04 21:07:39.923
Beginning execution loop
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
6016 47.000000 2017-10-04 21:07:40.160
user object pages used user object space in MB final
---------------------- --------------------------------------- -----------------------
1536 12.000000 2017-10-04 21:07:40.270