MSSQL 2008 R2 - Obciążenie CPU 100%

0

Sestem: Windows Server 2008 R2 Standard

Wynik zapytania Select @@version:
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 1546 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Opis problemu:
2-4 razy w tygodniu, proces sql "zawiesza się". Objawy to: brak odpowiedzi serwera SQL, obciążenie CPU w okolicy 95-100%. Pomaga tylko restart usługi.
Problem pojawił się około 2 miesięcy temu. Zazwyczaj pojawia się w godzinach pracy i nie mogę odkładać restartu usługi na dokładną analizę jeśli nie wiem co dokładnie sprawdzić. Poza tym, gdy pojawia się problem nie jestem w stanie wykonać żadnego zapytania a monitor aktywności SQL wyrzuca błąd przekroczenia limitu czasu.

Czy spotkaliście się z czymś takim? Co może być przyczyną i jak to sprawdzić? Jest możliwe, że jeden z użytkowników puszcza w tym momencie jakiś raport - tylko do tej pory nie znalazłem nic, co by aż tak obciążyło serwer.
Z góry dziękuję za zainteresowanie tematem i podpowiedzi.

0

Dziękuję, ten link widziałem. Niestety gdy pojawia się problem nie jestem w stanie wykonać żadnego zapytania.

1

No to nie pozostaje nic innego jak podczas takiego obciążenia zalogować się do bazy przy pomocy DAC (https://www.mssqltips.com/sqlservertip/1801/enable-sql-server-dedicated-administrator-connection/)
i zobaczyć co się dzieje:

SELECT TOP 20
    qs.sql_handle,
    qs.execution_count,
    qs.total_worker_time AS Total_CPU,
    total_CPU_inSeconds = --Converted from microseconds
    qs.total_worker_time/1000000,
    average_CPU_inSeconds = --Converted from microseconds
    (qs.total_worker_time/1000000) / qs.execution_count,
    qs.total_elapsed_time,
    total_elapsed_time_inSeconds = --Converted from microseconds
    qs.total_elapsed_time/1000000,
    st.text,
    qp.query_plan
FROM
    sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
    CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp
ORDER BY qs.total_worker_time DESC
1

Masz jakiś audyt na tej bazie włączony?
Sprawdzałeś dziennik zdarzeń systemu?

1

Jak masz SQL Management Studio, to tam jest tez Activity Monitor. Z SQL Management Studio możesz tez wygenerować raport z wszystkimi blokującymi transakcjami.

Moze tu znajdziesz cos pomocnego:
http://blog.wsol.com/getting-the-most-out-of-sql-server-part-1-using-activity-monitor
https://technet.microsoft.com/en-us/library/ms191199(v=sql.105).aspx

0

@Panczo Uruchomię DAC i sprawdzę wynik zapytania. Dzięki za podpowiedź.
@somekind Sprawdziłem, audytów nie mam zdefiniowanych a w dzienniku zdarzeń loguje mi tylko informację o restarcie usługi (restarcie wykonanym przez nas).
Logi sql nie pokazują nić więcej. Pracuję z tą bazą od niedawna i z tego co wiem, baza nie ma zaplanowanych optymalizacji indeksów, dopiero teraz planuję się tym zająć. Nie zdarzyło mi się, aby problem pojawił się od początku dnia roboczego dlatego uważam, że długo wykonujące się zapytania do bazy mogą być przyczyną ale muszę je namierzyć.

0

Nie udało mi się znaleźć przyczyny ale problem znów przestał się pojawiać.
Chciałbym dokładnie sprawdzić bazę danych, pod względem różnego rodzaju problemów (uszkodzony indeks itp). Jak się do tego zabrać? Czy polecacie jakieś zapytania lub narzędzia?

1

No to proponuje zapoznać się ze skladnia DBCC https://msdn.microsoft.com/en-us/library/ms188796.aspx

Szczególnie Validation Statements i dbcc checkdb

0

Dziękuję wszystkim za pomoc. Temat uważam za zamknięty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1