Anda harus selalu mempertimbangkan pertentangan sebelum menambahkan file TempDb. Menambahkan 7 file TempDb tambahan tidak akan membantu.
Tidak, seharusnya tidak. Tetapi apakah Anda yakin bahwa Anda tidak berurusan dengan sejumlah besar data atau Anda tidak memiliki proses lain yang berjalan di SQL? Kursor, tabel Temp, dan bahkan variabel tabel menggunakan TempDb secara ekstensif. Periksa objek mana yang menghabiskan lebih banyak ruang TempDb:
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
Jadi, jika pengguna dan objek internal Anda lebih banyak, itu jelas berarti Anda memiliki ruang TempDb rendah karena kursor dan penggunaan internal SQL Server (Misalnya:tabel perantara, gabungan Hash, agregasi Hash, dll.)
Anda dapat menggunakan kode di bawah ini untuk mendapatkan jumlah semua tabel di semua database
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
Saya telah menulis artikel di TempDb rekomendasi ; Saya menyarankan Anda untuk membacanya untuk memahami objek yang dapat memengaruhi TempDb dan bagaimana menyelesaikan masalah umum itu. Idealnya, total ukuran TempDb Anda harus dihitung berdasarkan pengamatan yang dalam kasus Anda> 24 GB.
** Sunting 1***
Jika Anda tidak yakin tentang pembaruan statistik, gunakan kueri di bawah ini untuk menghitung semua tabelCatatan:Ganti basis data yang statistiknya tidak Anda inginkan
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
demikian pula Anda dapat mengambil yang berbeda di semua tabel untuk semua database dengan kueri di bawah ini
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