Егер сіздің уақытша ДБ дерекқорыңыз болса SQL Server орын жетіспейді, бұл сіздің өндірістік ортаңызда үлкен бұзылулар тудыруы мүмкін және пайдаланушы қосымшаларын сәтті аяқталуына кедергі келтіруі мүмкін. Егер сіз уақытша ҚБ өлшемін қадағалау үшін сценарий қолдансаңыз, онда осы мақаланың сценарийін қосыңыз, бұл уақытша ҚБ толтырудың негізгі себебін анықтаңыз.
Tempdb толық - жалпы сценарий
Нашар жазылған сұраулар бірнеше уақытша нысандарды жасауы мүмкін, нәтижесінде tempdb дерекқорының өсуіне әкеледі. Бұл дискілік кеңістік туралы ескертулерге әкеледі және серверде ақаулар тудыруы мүмкін. Көптеген кезде SQL Server Дерекқор әкімшілері tempdb файлын кішірейтуді өте қиын деп тапса, олар дереу серверді қайта іске қосуды таңдайды. Егер tempdb дерекқорын кішірейтудің барлық әдістерін қолданып көрген болсаңыз және ол әлі де кішіреймесе, соңғы нұсқа - SQL Service қызметін конфигурация менеджері арқылы қайта іске қосу. Осылайша, дискілік кеңістік туралы ескертулер тоқтайды және сервер мәселелері де тоқтайды. Дегенмен, егер мәселе өндірістік серверде орын алса, tempdb бағдарламасын қайта іске қосу сізге қолжетімді болмауы мүмкін.
DBCC
Мұндай жағдайларда бірнеше DBCC командалары бар, олар іске қосылған кезде tempdb кішірейтуге мүмкіндік береді. Егер сіз tempdb өлшемін белсенді түрде бақылау үшін сценарийлер орнатқан болсаңыз, онда сіз tempdb толтырғыштарын табу үшін осы сценарийді пайдалана аласыз. Қазіргі уақытта бұл сценарий барлық сілтеме серверлерінде орындалады. Мұны қайда сөйлем қою арқылы басқаруға болады. Сіз tempdb ақаулығы болған кезде ғана сценарийді орындауға болады. @Tserver кестесі барлық байланыстырылған сервер атауларын сақтау үшін қолданылады. Tempdb дерекқоры үшін, SQL-нің бұзылуы дерекқордың күйін SUSPECT ретінде өзгертеді және бұл үзіледі 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 бағдарламасын қалпына келтіру және excel қалпына келтіру бағдарламалық жасақтама өнімдері. Қосымша ақпарат алу үшін кіріңіз WWW.datanumen.com