Kung ang temp DB database ng iyong SQL Server naubusan ng espasyo, maaari itong maging sanhi ng mga pangunahing pagkagambala sa iyong kapaligiran sa produksyon at maaaring makagambala sa mga aplikasyon ng gumagamit mula sa matagumpay na pagkumpleto. Kung gumagamit ka ng isang script upang subaybayan ang laki ng temp DB, idagdag ang script mula sa artikulong ito upang makilala ang ugat na sanhi ng pagpuno ng temp DB.
Punong Tempdb - isang pangkaraniwang senaryo
Ang mga query na hindi maayos ang pagkakasulat ay maaaring lumikha ng ilang pansamantalang bagay na magreresulta sa lumalaking tempdb database. Magtatapos ito sa mga alerto sa disk space at maaaring magdulot ng mga problema sa server. Kapag marami SQL Server Nahihirapan ang mga administrador ng database na paliitin ang tempdb, kaya agad nilang pinipili ang server restart. Kung sinubukan na nila ang lahat ng paraan para paliitin ang tempdb database at kung hindi pa rin ito lumiliit, ang huling opsyon ay i-restart ang SQL Service sa pamamagitan ng configuration manager. Kaya, titigil ang iyong mga alerto sa disk space at titigil din ang mga problema sa server. Gayunpaman, maaaring hindi mo magamit ang pag-restart ng tempdb kung ang isyu ay naganap sa isang production server.
DBCC
Sa mga ganitong kaso, maraming mga utos ng DBCC kung saan kapag tumakbo ay magbibigay-daan sa iyo upang pag-urong ang tempdb. Kung na-set up mo ang mga script upang maagap na subaybayan ang laki ng tempdb, maaari mong gamitin ang script na ito upang malaman ang mga tagapuno ng tempdb. Tulad ng ngayon, ang script na ito ay naisasagawa sa lahat ng mga linkedserver. Madali mong makokontrol ito sa pamamagitan ng paglalagay ng kung saan sugnay. Maaari mong gawin ang script na naisakatuparan lamang kapag may problema sa iyong tempdb. Ginamit ang talahanayan @Tserver upang iimbak ang lahat ng iyong mga naka-link na pangalan ng server. Para sa isang database ng tempdb, SQL katiwalian babaguhin ang katayuan ng database bilang SUSPECT at ito ay makagambala SQL Server serbisyo mula sa simula.
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
Panimula ng May-akda:
Si Neil Varley ay isang dalubhasa sa pagbawi ng data sa DataNumen, Inc., na pinuno ng mundo sa mga teknolohiya sa pagbawi ng data, kasama ang bawiin ang Outlook at excel mga produkto ng pagbawi ng software. Para sa karagdagang impormasyon pagbisita www.datanumen. Sa