TempDb फ़ाइल जोड़ने से पहले आपको हमेशा विवाद पर विचार करना चाहिए। 7 अतिरिक्त TempDb फ़ाइल जोड़ने से वास्तव में मदद नहीं मिलेगी।
नहीं, यह नहीं होना चाहिए। लेकिन क्या आप सुनिश्चित हैं कि आप बड़ी मात्रा में डेटा के साथ काम नहीं कर रहे हैं या आपके पास SQL पर कोई अन्य प्रक्रिया नहीं चल रही है? कर्सर, टेंप टेबल और यहां तक कि टेबल वेरिएबल भी TempDb का बड़े पैमाने पर उपयोग करते हैं। जांचें कि कौन सी वस्तु अधिक 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
इसलिए, यदि आपके उपयोगकर्ता और आंतरिक ऑब्जेक्ट अधिक हैं तो इसका स्पष्ट अर्थ है कि कर्सर और SQL सर्वर आंतरिक उपयोग के कारण आपके पास TempDb स्थान कम है (उदा:इंटरमीडिएट टेबल, हैश जॉइन, हैश एकत्रीकरण इत्यादि)
आप सभी डेटाबेस में सभी तालिकाओं की गिनती प्राप्त करने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं
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
मैंने TempDb पर एक लेख लिखा है। अनुशंसा ; मैं आपको यह पढ़ने का सुझाव दूंगा कि उन वस्तुओं को समझने के लिए जो TempDb को प्रभावित कर सकती हैं और इसकी सामान्य समस्याओं को कैसे हल करें। आदर्श रूप से, आपके कुल TempDb आकार की गणना अवलोकन के आधार पर की जानी चाहिए जो आपके मामले में> 24 जीबी है।
** 1 संपादित करें**
यदि आप आंकड़ों के अद्यतन के बारे में अनिश्चित हैं तो सभी तालिकाओं की संख्या प्राप्त करने के लिए नीचे दी गई क्वेरी का उपयोग करें नोट:उन डेटाबेस को बदलें जिनके लिए आप आंकड़े नहीं चाहते हैं
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
इसी तरह आप नीचे दी गई क्वेरी के साथ सभी डेटाबेस के लिए सभी तालिकाओं में अलग-अलग ले सकते हैं
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