Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

Tempdb पूर्ण जब सभी तालिकाओं की अलग-अलग गणना की जा रही है

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर (T-SQL) में डेटाबेस की सूची प्राप्त करने के 3 तरीके

  2. MSSQL2008 - Pyodbc - पिछला SQL एक प्रश्न नहीं था

  3. क्या मैं SQL सर्वर एक्सप्रेस या वेब या कार्यसमूह संस्करणों के साथ SSIS पैकेज चला सकता हूँ?

  4. SQL सर्वर वर्चर को डेटाटाइम में कनवर्ट करें

  5. SQL सर्वर में (nolock) के साथ क्या है?