Bạn nên luôn cân nhắc tranh chấp trước khi thêm tệp TempDb. Thêm 7 tệp TempDb bổ sung sẽ không thực sự hữu ích.
Không, nó không nên. Nhưng bạn có chắc rằng bạn không xử lý một lượng lớn dữ liệu hoặc bạn không có quy trình khác đang chạy trên SQL? Con trỏ, bảng Temp và thậm chí các biến bảng sử dụng TempDb rộng rãi. Kiểm tra đối tượng nào đang tiêu tốn nhiều dung lượng TempDb hơn:
SELECT
SUM (user_object_reserved_page_count)*8 as usr_obj_kb,
SUM (internal_object_reserved_page_count)*8 as internal_obj_kb,
SUM (version_store_reserved_page_count)*8 as version_store_kb,
SUM (unallocated_extent_page_count)*8 as freespace_kb,
SUM (mixed_extent_page_count)*8 as mixedextent_kb
FROM sys.dm_db_file_space_usage
Vì vậy, nếu người dùng và các đối tượng nội bộ của bạn nhiều hơn thì điều đó rõ ràng có nghĩa là bạn có không gian TempDb thấp do sử dụng con trỏ và SQL Server nội bộ (Ví dụ:bảng trung gian, tham gia băm, tổng hợp băm, v.v.)
Bạn có thể sử dụng mã dưới đây để nhận tổng số bảng trong tất cả cơ sở dữ liệu
DECLARE @Stats TABLE (DBNAME VARCHAR(40), NAME varchar(200), Rows INT)
INSERT INTO @Stats
EXECUTE sp_MSForEachDB
'USE ?; SELECT DB_NAME()AS DBName,
sysobjects.Name
, sysindexes.Rows
FROM
sysobjects
INNER JOIN sysindexes
ON sysobjects.id = sysindexes.id
WHERE
type = ''U''
AND sysindexes.IndId < 2'
SELECT * FROM @Stats
Tôi đã viết một bài báo trên TempDb khuyến nghị ; Tôi khuyên bạn nên đọc nó để hiểu các đối tượng có thể ảnh hưởng đến TempDb và cách giải quyết các vấn đề chung của nó. Tốt nhất, tổng kích thước TempDb của bạn nên được tính toán dựa trên quan sát mà trong trường hợp của bạn là> 24 GB.
** Chỉnh sửa 1 **
Nếu bạn không chắc chắn về cập nhật số liệu thống kê, hãy sử dụng truy vấn bên dưới để tính tổng số bảng Lưu ý:Thay thế cơ sở dữ liệu mà bạn không muốn có số liệu thống kê
DECLARE @ServerStats TABLE (DatabaseName varchar(200), TableName varchar(200), RowsCount INT)
INSERT INTO @ServerStats
exec sp_msforeachdb @command1='
use #;
if ''#'' NOT IN (''master'', ''model'', ''msdb'', ''tempdb'',''ReportServer'')
begin
print ''#''
exec sp_MSforeachtable @command1=''
SELECT ''''#'''' AS DATABASENAME, ''''?'''' AS TABLENAME, COUNT(*) FROM ? ;
''
end
', @replacechar = '#'
SELECT * FROM @ServerStats
tương tự, bạn có thể phân biệt trong tất cả các bảng cho tất cả cơ sở dữ liệu với truy vấn dưới đây
DECLARE @ServerStatsDistinct TABLE (DatabaseName varchar(200), TableName varchar(200), RowsCount INT)
INSERT INTO @ServerStatsDistinct
exec sp_msforeachdb @command1='
use #;
if ''#'' NOT IN (''master'', ''model'', ''msdb'', ''tempdb'',''ReportServer'')
begin
print ''#''
exec sp_MSforeachtable @command1=''
SELECT ''''#'''' AS DATABASENAME, ''''?'''' AS TABLENAME, COUNT(*) FROM (
SELECT DISTINCT *
FROM ?
) a ;
''
end
', @replacechar = '#'
SELECT * FROM @ServerStatsDistinct