Ինչպե՞ս գտնել TempDB- ի լիարժեք պատճառը ձեր մեջ SQL Server

Կիսվել հիմա ՝

Եթե ​​temp DB տվյալների բազան ձերն է SQL Server տարածքը սպառվում է, դա կարող է լուրջ խափանումներ առաջացնել ձեր արտադրական միջավայրում և կարող է ընդհատել օգտագործողների ծրագրերը հաջող ավարտից: Եթե ​​օգտագործում եք սցենար ՝ temp DB- ի չափը հետևելու համար, այս հոդվածից կցեք սցենարը ՝ պարզելու temp DB լրացման հիմնական պատճառը:

Tempdb լրիվ - ընդհանուր սցենար

Տեմպդբ Վատ գրված հարցումները կարող են ստեղծել մի քանի ժամանակավոր օբյեկտներ, ինչը կհանգեցնի tempdb տվյալների բազայի աճին: Սա կհանգեցնի սկավառակի տարածքի մասին ծանուցումների և կարող է սերվերի հետ կապված խնդիրներ առաջացնել: Երբ շատերը SQL Server Տվյալների բազայի ադմինիստրատորները շատ դժվարանում են փոքրացնել tempdb-ը, ուստի անմիջապես ընտրում են սերվերի վերագործարկումը: Եթե փորձվել են tempdb տվյալների բազան փոքրացնելու բոլոր մեթոդները, և եթե այն դեռևս չի փոքրանում, վերջին տարբերակը SQL Service-ը վերագործարկելն է կոնֆիգուրացիայի կառավարչի միջոցով: Այսպիսով, ձեր սկավառակի տարածքի մասին ծանուցումները կդադարեն, և սերվերի խնդիրները նույնպես կդադարեն: Այնուամենայնիվ, tempdb-ի վերագործարկումը կարող է հասանելի չլինել ձեզ համար, եթե խնդիրը առաջացել է արտադրական սերվերի վրա:

DBCC

DBCCՆման դեպքերում կան մի քանի DBCC հրամաններ, որոնք գործարկելիս թույլ են տալիս կրճատել tempdb- ը: Եթե ​​դրել եք սցենարներ tempdb- ի չափը ակտիվորեն վերահսկելու համար, կարող եք օգտագործել այս սցենարը tempdb- ի լրացնողները պարզելու համար: Այս պահի դրությամբ այս սցենարը կկատարվի բոլոր կապակցված սերվերների վրա: Դուք կարող եք հեշտությամբ վերահսկել այն ՝ դնելով կետի կետ: Դուք կարող եք կատարել, որ սցենարը կատարվի միայն այն դեպքում, երբ ձեր tempdb- ի հետ խնդիր կա: @Tserver աղյուսակն օգտագործվում է ձեր բոլոր կապակցված սերվերի անունները պահելու համար: Tempdb տվյալների բազայի համար SQL կոռուպցիա փոխելու էր տվյալների շտեմարանի կարգավիճակը որպես ԿԱՍԿԱ, և դա կդադարեցներ SQL Server ծառայությունը մեկնարկից ի վեր։

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

Հեղինակի ներածություն.

Նիլ Վարլին տվյալների վերականգման փորձագետ է DataNumen, Inc., որը տվյալների վերականգման տեխնոլոգիաների համաշխարհային առաջատարն է, այդ թվում վերականգնել Outlook- ը և գերազանցել վերականգնման ծրագրային արտադրանքները: Լրացուցիչ տեղեկությունների համար այցելեք www.datanumen.com

Կիսվել հիմա ՝

Comments փակվում են: