Nieaktualne statystyki bazy danych zmniejszają wydajność programu SharePoint Server

Informacje o statystykach bazy danych

Statystyki optymalizacji zapytań to obiekty zawierające informacje statystyczne dotyczące rozkładu wartości w co najmniej jednej kolumnie tabeli lub widoku indeksowanego. Optymalizator zapytań używa tych statystyk do oszacowania kardynalności lub liczby wierszy w wyniku zapytania. Te szacunki kardynalności umożliwiają optymalizatorowi zapytań utworzenie planu zapytań wysokiej jakości.

Na przykład optymalizator zapytań może zwiększyć wydajność zapytań, używając oszacowań kardynalności, aby wybrać operator wyszukiwania indeksu zamiast bardziej zasobochłonnego operatora skanowania indeksu. W przeciwnym razie nieaktualne statystyki mogą zmniejszyć wydajność zapytań przy użyciu nieefektywnych planów zapytań.

Duże wdrożenia programu SharePoint w przedsiębiorstwie muszą mieć plany konserwacji bazy danych w celu zaktualizowania statystyk bazy danych dotyczących baz danych zawartości znajdujących się w programie Microsoft SQL Server. Klienci nie powinni polegać tylko na zadaniach konserwacji bazy danych opartych na programie SharePoint w celu wykonania tych zadań. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące programu SQL Server w farmie programu SharePoint Server.

Objawy

Gdy statystyki bazy danych staną się nieaktualne, w instalacjach programu SharePoint Server mogą pojawić się jeden lub więcej z następujących objawów:

  • Wolne czasy ładowania i zmniejszona wydajność, która może wygenerować błąd HTTP 500 podczas otwierania strony witryny

  • Niższa wydajność, która generuje komunikaty o błędach, takie jak następujący przykład:

    Service unavailable  
    Unknown SQL Exception 53  
    Server Error in '/' Application Runtime Error
    
  • Wykonywanie przeszukiwania powoduje nieoczekiwane działanie programu SQL Server, blokowanie i zablokowanie dostępu do bazy danych.

  • Długotrwałe zadania czasomierza, takie jak zadania przetwarzania danych użycia programu Microsoft SharePoint Foundation, które mogą trwać stopniowo dłużej podczas każdej iteracji.

  • Brak możliwości otwarcia witryny programu SharePoint i komunikat o błędzie podobny do następującego:

    Unexpected System.Web.HttpException: Request timed out   
    
  • Witryna przekroczyła limit czasu renderowania podczas ładowania elementów nawigacyjnych i wyświetla następujący komunikat o błędzie:

    PortalSiteMapProvider was unable to fetch children for node   
    
  • Wysokie użycie procesora CPU na serwerze z uruchomionym programem SQL Server podczas przetwarzania zapytań programu SharePoint

Przyczyna

Te problemy mogą być spowodowane nieaktualnymi statystykami bazy danych. Program SharePoint codziennie uruchamia zadanie czasomierza w celu zaktualizowania statystyk bazy danych przy użyciu procedury proc_updatestatistics SQL. Jednak z różnych powodów to zadanie czasomierza może nie zostać ukończone lub nie może stale aktualizować wszystkich tabel. Jeśli na przykład kopia zapasowa jest uruchomiona względem bazy danych zawartości z programu SQL Server współbieżnie z zadaniem czasomierza programu SharePoint, zadanie nie będzie kontynuowane.

Po ukończeniu zadania czasomierza programu SharePoint, które aktualizuje statystyki, następujące zdarzenia mogą być zapisywane w dziennikach ULS:

  • e9bf "Wystąpił błąd podczas aktualizowania statystyk w bazie danych" {0}
  • cm1y "Aktualizowanie statystyk w bazie danych" {0}
  • dbl2 "Pomijanie aktualizacji statystyk bazy danych {0} , ponieważ jej stan to {1}"
  • cm1x "Aktualizowanie statystyk we wszystkich bazach danych w systemie {0}"

Jeśli te warunki nie są ściśle monitorowane i jeśli akcje naprawcze nie są podejmowane, statystyki bazy danych staną się nieaktualne, a problemy z wydajnością programu SharePoint w końcu wystąpią.

Rezolucja

Aby zapobiec tym objawom i potencjalnym awariom usług, należy wdrożyć plany konserwacji programu SQL Server, aby statystyki bazy danych zawartości programu SharePoint były aktualizowane przy użyciu opcji FULLSCAN. Aby uzyskać więcej informacji, zobacz Statystyki indeksu.

Podczas implementowania planu konserwacji programu SQL Server w celu zaktualizowania statystyk baz danych programu SharePoint nie jest wymagane wyłączenie zadania z programu SharePoint. Jednak ponieważ te zadania konserwacji wykonują podobne funkcje znad obu lokalizacji, można wyłączyć regułę "Bazy danych używane przez program SharePoint mają nieaktualne statystyki indeksu" Reguła analizatora kondycji z farmy SharePoint, jeśli bazy danych są zarządzane przez serwer SQL. Aby uzyskać więcej informacji na temat zarządzania zadaniem aktualizacji indeksu z programu SharePoint Server, zobacz Bazy danych używane przez program SharePoint mają nieaktualne statystyki indeksu (SharePoint 2013).

Więcej informacji

Aktualizowanie statystyk baz danych zawartości programu SharePoint przy użyciu opcji FULLSCAN codziennie z programu SQL Server jest zalecanym najlepszym rozwiązaniem. Aby uzyskać więcej informacji, zobacz Best practices for SQL Server in a SharePoint Server farm and Database maintenance for SharePoint Foundation 2010 (Najlepsze rozwiązania dotyczące programu SQL Server w farmie programu SharePoint Server i konserwacja bazy danych dla programu SharePoint Foundation 2010).

Jeśli jednak w farmie programu SharePoint występują obecnie problemy z wydajnością z powodu nieaktualnych statystyk, następujące informacje mogą służyć jako jednorazowy krok ograniczania ryzyka, aby złagodzić ten problem.

Aby wyświetlić informacje o statystykach bazy danych z określonej bazy danych, uruchom następujące zapytanie:

-- Checking the DB Stats  
select a.id as 'ObjectID', isnull(a.name,'Heap') as 'IndexName', b.name as 'TableName',   
stats_date (id,indid) as stats_last_updated_time   
from sys.sysindexes as a   
inner join sys.objects as b   
on a.id = b.object_id   
where b.type = 'U'  

Aby uzyskać więcej informacji na temat przeglądu statystyk bazy danych, zobacz DBCC SHOW_STATISTICS.

Aby zaktualizować statystyki bazy danych dla pojedynczej bazy danych korzystającej z opcji FULLSCAN, uruchom następujące zapytanie:

-- Update DB Stats  
EXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN'  

Ważna uwaga: Opcja "sp_MSforeachtable" to nieudokumentowana procedura dostarczona w obecnej formie i powinna być używana tylko w celu zażegnania pilnego problemu. Nie zalecamy korzystania z tej procedury w ramach regularnego planu konserwacji. Zamiast tego zapoznaj się z naszą dokumentacją UPDATE STATISTICS (Transact-SQL), aby dowiedzieć się, jak wdrożyć plan AKTUALIZACJI STATYSTYK przy użyciu opcji FULLSCAN.

W zależności od tego, jak przestarzałe są statystyki bazy danych, może być konieczne wyczyszczenie pamięci podręcznej planu zapytań przez uruchomienie polecenia DBCC FREEPROCCACHE po zaktualizowaniu statystyk bazy danych. Składnię i argumenty tej procedury znajdziesz w artykule DBCC FREEPROCCACHE (Transact-SQL). Dzięki temu nowe zapytania korzystają z optymalnego planu wykonywania po zaktualizowaniu statystyk bazy danych. Zobacz na przykład następujące zapytanie:

-- Remove all elements from the plan cache  
DBCC FREEPROCCACHE  

Ważne

Uruchomienie polecenia DBCC FREEPROCCACHE powoduje wyczyszczenie pamięci podręcznej dla wszystkich planów zapytań w wystąpieniu SQL. To polecenie powinno być zrozumiałe przed wykonaniem go w godzinach produkcji.

Jeśli polecenie DBCC FREEPROCCACHE nie zostało wykonane po zaktualizowaniu nieaktualnych statystyk bazy danych, zapytania z nieefektywnymi planami wykonywania mogą nadal znajdować się w pamięci podręcznej i być używane. W takim przypadku wymuś ponowne skompilowanie określonej procedury składowanej przy użyciu procedury składowanej (zobacz sp_recompile (Transact-SQL)). Zobacz na przykład następujące zapytanie:

USE SP2013_Content_DB  
GO  
sp_recompile proc_getwebnavstruct  

Uruchomienie polecenia sp_recompile w połączeniu z procedurą, funkcją lub parametrami tabeli ma na celu usunięcie pojedynczego elementu z pamięci podręcznej bez wpływu na całą instancję.

Nadal potrzebujesz pomocy? Przejdź do witryny SharePoint Community.