Εάν η προσωρινή βάση δεδομένων DB σας SQL Server εξαντληθεί ο χώρος, μπορεί να προκαλέσει μεγάλες διακοπές στο περιβάλλον παραγωγής σας και να διακόψει τις εφαρμογές των χρηστών από την επιτυχή ολοκλήρωση. Εάν χρησιμοποιείτε μια δέσμη ενεργειών για την παρακολούθηση του μεγέθους της προσωρινής μονάδας DB, προσαρτήστε τη δέσμη ενεργειών από αυτό το άρθρο για να προσδιορίσετε τη βασική αιτία για την πλήρωση του προσωρινού DB.
Tempdb full – ένα κοινό σενάριο
Τα κακογραμμένα ερωτήματα ενδέχεται να δημιουργήσουν αρκετούς ρυθμούςrary αντικείμενα που οδηγούν σε μια αναπτυσσόμενη βάση δεδομένων tempdb. Αυτό θα καταλήξει σε ειδοποιήσεις χώρου στο δίσκο και μπορεί να προκαλέσει προβλήματα διακομιστή. Όταν πολλοί SQL Server Οι διαχειριστές βάσεων δεδομένων δυσκολεύονται πολύ να συρρικνώσουν το tempdb, επιλέγουν αμέσως το διακομιστή restart. Αν είχατε δοκιμάσει όλες τις μεθόδους για να συρρικνώσετε τη βάση δεδομένων tempdb και αν εξακολουθεί να μην συρρικνώνεται, η τελευταία επιλογή είναι ναtart Υπηρεσία SQL μέσω του διαχειριστή διαμόρφωσης. Έτσι, οι ειδοποιήσεις για το χώρο του δίσκου θα σταματήσουν και τα προβλήματα διακομιστή θα σταματήσουν επίσης. Ωστόσο, αναπtarΤο ting tempdb ενδέχεται να μην είναι διαθέσιμο σε εσάς εάν το ζήτημα είχε παρουσιαστεί σε διακομιστή παραγωγής.
DBCC
Σε τέτοιες περιπτώσεις, υπάρχουν πολλές εντολές DBCC που όταν εκτελούνται θα σας επιτρέψουν να συρρικνώσετε το tempdb. Εάν είχατε ρυθμίσει σενάρια για να παρακολουθείτε προληπτικά το μέγεθος tempdb, μπορείτε να χρησιμοποιήσετε αυτό το σενάριο για να ανακαλύψετε τα fillers του tempdb. Από τώρα, αυτό το σενάριο θα εκτελούνταν σε όλους τους συνδεδεμένους διακομιστές. Μπορείτε να το ελέγξετε εύκολα βάζοντας μια ρήτρα όπου. Μπορείτε να κάνετε το σενάριο να εκτελεστεί μόνο όταν υπάρχει πρόβλημα με το tempdb σας. Ο πίνακας @Tserver χρησιμοποιείται για την αποθήκευση όλων των ονομάτων των συνδεδεμένων διακομιστών σας. Για μια βάση δεδομένων tempdb, Διαφθορά SQL θα άλλαζε την κατάσταση της βάσης δεδομένων ως ύποπτη και αυτό θα διακόψει SQL Server υπηρεσία από starηχώ.
ΔΗΛΩΣΤΕ ΠΙΝΑΚΑΣ @Tserver ( cserver VARCHAR(200) ) INSERT INTO @Tserver VALUES ('SERVERNAME') ΔΗΛΩΣΤΕ ΠΙΝΑΚΑΣ @LogTable ( όνομα διακομιστή VARCHAR(200), cssionid SMALLINT, callocmb BIGINT, cdeexte, cdeextaTloc CHAR( 4000) ) DECLARE c4000 CURSOR FOR SELECT * FROM @Tserver DECLARE @cmd NVARCHAR(1), @server VARCHAR(4000) OPEN c200 FETCH next FROM C1 INTO @server WHILE @@FETCH_STATUS SET = @cmd' 'χρησιμοποιήστε tempdb Δηλώστε τον πίνακα @Table1 ( cdeallopages bigint, callopages bigint, cssionid smallint, creqstid int ) εισαγάγετε στον @Table0 SELECT SUM(internal_objects_dealloc_page_count), SUM(internal_objects_alloc_page_count), session_id, sy_uspacet.CK_M) WHERE session_id <> @@SPID GROUP BY session_id, request_id δήλωση @Table1 πίνακα ( cssionid smallint, callocmb bigint, cdeallocmb bigint, ctext varchar(1), cstatement varchar(2) ) εισαγωγή στον @Table4000 SELECT TBL4000.cssionid, TBL2 /1 , TBL1.cdeallopages * 1.0 / 128 , TBL1.text, ISNULL( NULLIF( SUBSTRING( TBL1.0.text, TBL128.statement_start_offset / 2, ΠΕΡΙΠΤΩΣΗ ΠΟΤΕ TBL2.statement_end_offset < TBL2.statement_start_offset ΤΟΤΕ 0 ΑΛΛΟ( 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 ΚΑΙ TBL1.creqstid .request_id OUTER APPLY sys.dm_exec_sql_text(TBL2.sql_handle) AS TBL2 OUTER APPLY sys.dm_exec_query_plan(TBL3.plan_handle) AS TBL2 WHERE TBL4.text ΔΕΝ ΕΙΝΑΙ NULLDEOR NULLY ; Επιλέξτε * από @Table3'') στο [' + @server + ']' PRINT @cmd INSERT INTO @LogTable (cssionid, callocmb, cdeallocmb, ctext, cstatement) EXEC(@cmd) ΕΝΗΜΕΡΩΣΗ @LogTable SET όνομα διακομιστή = @server ΠΟΥ cservername IS NULL FETCH next FROM C4 INTO @server END CLOSE c3 DEALLOCATE c2 SELECT * FROM @LogTable
Εισαγωγή συγγραφέα:
Ο Neil Varley είναι ειδικός στην ανάκτηση δεδομένων στο DataNumen, Inc., η οποία είναι ο παγκόσμιος ηγέτης στις τεχνολογίες ανάκτησης δεδομένων, συμπεριλαμβανομένων ανακτήστε το Outlook και υπερέχουν προϊόντα λογισμικού ανάκτησης. Για περισσότερες πληροφορίες επισκεφθείτε www.datanumen.com