TempDB-nin Sizdə Dolmasının Səbəbini Necə Tapmaq olar SQL Server

İndi paylaş:

Əgər müvəqqəti DB verilənlər bazası sizin SQL Server yer tükənirsə, o, istehsal mühitinizdə böyük fasilələrə səbəb ola bilər və istifadəçi proqramlarının uğurla tamamlanmasından sonra kəsilə bilər. Əgər müvəqqəti DB ölçüsünü izləmək üçün skriptdən istifadə edirsinizsə, müvəqqəti DB doldurulmasının əsas səbəbini müəyyən etmək üçün bu məqalədəki skripti əlavə edin.

Tempdb full – ümumi ssenari

Tempdb Zəif yazılmış sorğular bir neçə müvəqqəti obyekt yarada bilər ki, bu da tempdb verilənlər bazasının böyüməsinə səbəb olur. Bu, disk boşluğu xəbərdarlıqları ilə nəticələnəcək və server problemlərinə səbəb ola bilər. Çox olduqda SQL Server Verilənlər bazası administratorları tempdb-ni kiçiltməkdə çox çətinlik çəkdikləri üçün dərhal serveri yenidən başlatmağı seçirlər. Əgər tempdb verilənlər bazasını kiçiltmək üçün bütün üsulları sınamısınızsa və hələ də kiçilmirsə, son seçim SQL Service-i konfiqurasiya meneceri vasitəsilə yenidən başlatmaqdır. Beləliklə, disk boşluğu bildirişləriniz dayanacaq və server problemləri də dayanacaq. Lakin, problem istehsal serverində baş verərsə, tempdb-ni yenidən başlatmaq sizin üçün əlçatan olmaya bilər.

DBCC

DBCCBelə hallarda, işə salındıqda tempdb-ni kiçiltməyə imkan verən bir neçə DBCC əmri var. Əgər tempdb ölçüsünə proaktiv şəkildə nəzarət etmək üçün skriptlər quraşdırmısınızsa, tempdb doldurucularını tapmaq üçün bu skriptdən istifadə edə bilərsiniz. İndiyə kimi bu skript bütün əlaqəli serverlərdə icra olunacaq. Harada cümləsi qoyaraq asanlıqla idarə edə bilərsiniz. Siz skriptin icrasını yalnız tempdb ilə bağlı problem olduqda edə bilərsiniz. @Tserver cədvəli bütün əlaqəli server adlarınızı saxlamaq üçün istifadə olunur. tempdb verilənlər bazası üçün, SQL korrupsiyası verilənlər bazasının statusunu ŞÜBHƏLİ olaraq dəyişdirəcək və bu, müdaxilə edəcək SQL Server xidmət başlanğıcdan.

DECLARE @Tserver TABLE 
  ( 
     cserver VARCHAR(200) 
  ) 

INSERT INTO @Tserver 
VALUES      ('SERVERNAME') 

DECLARE @LogTable TABLE 
  ( 
     cservername VARCHAR(200), 
     cssionid    SMALLINT, 
     callocmb    BIGINT, 
     cdeallocmb  BIGINT, 
     ctext       VARCHAR(4000), 
     cstatement  VARCHAR(4000) 
  ) 
DECLARE c1 CURSOR FOR 
  SELECT * 
  FROM   @Tserver 
DECLARE @cmd    NVARCHAR(4000), 
        @server VARCHAR(200) 

OPEN c1 

FETCH next FROM c1 INTO @server 

WHILE @@FETCH_STATUS = 0 
  BEGIN 
      SET @cmd = 'EXEC(''use tempdb Declare @Table1 table  ( cdeallopages bigint, callopages bigint, cssionid smallint, creqstid int ) insert into @Table1 SELECT SUM(internal_objects_dealloc_page_count), SUM(internal_objects_alloc_page_count), session_id, request_id  FROM sys.dm_db_task_space_usage WITH (NOLOCK) WHERE session_id <> @@SPID GROUP BY session_id, request_id declare @Table2 table ( cssionid smallint, callocmb bigint, cdeallocmb bigint, ctext varchar(4000), cstatement varchar(4000) ) insert into @Table2 SELECT TBL1.cssionid, TBL1.callopages * 1.0 / 128 , TBL1.cdeallopages * 1.0 / 128 , TBL3.text, ISNULL( NULLIF( SUBSTRING( TBL3.text,  TBL2.statement_start_offset / 2,  CASE WHEN TBL2.statement_end_offset < TBL2.statement_start_offset  THEN 0  ELSE( TBL2.statement_end_offset - TBL2.statement_start_offset ) / 2 END ), '''''''' ), TBL3.text ) FROM @Table1 AS TBL1 INNER JOIN sys.dm_exec_requests TBL2 WITH (NOLOCK) ON  TBL1.cssionid = TBL2.session_id AND TBL1.creqstid = TBL2.request_id OUTER APPLY sys.dm_exec_sql_text(TBL2.sql_handle) AS TBL3 OUTER APPLY sys.dm_exec_query_plan(TBL2.plan_handle) AS TBL4 WHERE TBL3.text IS NOT NULL OR TBL4.query_plan IS NOT NULL ORDER BY 3 DESC; Select * from @Table2'') at [' + @server + ']' 

      PRINT @cmd 

      INSERT INTO @LogTable 
                  (cssionid, 
                   callocmb, 
                   cdeallocmb, 
                   ctext, 
                   cstatement) 
      EXEC(@cmd) 

      UPDATE @LogTable 
      SET    cservername = @server 
      WHERE  cservername IS NULL 

      FETCH next FROM c1 INTO @server 
  END 

CLOSE c1 

DEALLOCATE c1 

SELECT * 
FROM   @LogTable

Müəllif Giriş:

Neil Varley məlumatların bərpası üzrə mütəxəssisdir DataNumendaxil olmaqla məlumatların bərpası texnologiyaları üzrə dünya lideri olan , Inc Outlook-u bərpa edin və excel bərpa proqram məhsulları. Ətraflı məlumat üçün ziyarət edin www.datanumen.com

İndi paylaş:

Şərhlər bağlıdır.