Jesteś obecnie w trybie offline. Czekamy na ponowne połączenie z Internetem.

Poprawka: Problemy z wydajnością wystąpić, gdy zwiększa działanie blokady bazy danych w programie SQL Server

WAŻNE: Ten artykuł został przetłumaczony przy użyciu oprogramowania firmy Microsoft do tłumaczenia maszynowego i może być poprawiony przy użyciu technologii Community Translation Framework (CTF). Firma Microsoft udostępnia artykuły tłumaczone maszynowo, poprawione przez społeczność, a także tłumaczone przez tłumaczy profesjonalnych, aby zapewnić dostęp do wszystkich artykułów w bazie wiedzy w wielu językach. Artykuły tłumaczone maszynowo i poprawione mogą zawierać błędy pisowni, składniowe i gramatyczne. Firma Microsoft nie ponosi odpowiedzialności za żadne nieścisłości, błędy ani szkody spowodowane przez niepoprawne tłumaczenia zawartości ani przez korzystanie z niej przez klientów. Więcej o strukturze CTF: http://support.microsoft.com/gp/machine-translation-corrections/pl.

Anglojęzyczna wersja tego artykułu to: 2926217
Uwaga
Domyślnie dodatku Service Pack 1 dla programu SQL Server 2014 i dodatku Service Pack 3 dla programu SQL Server 2012 zawierają tę poprawkę i nie trzeba dodawać żadnych flag śledzenia, aby włączyć tę poprawkę. Aby włączyć tę poprawkę po zainstalowaniu jednego z aktualizacje zbiorcze w sekcji rozwiązanie, trzeba zacząć Microsoft SQL Server przez dodanie flagi śledzenia 1236 do parametrów startowych.
Symptomy
Założono uruchomić wystąpienie 2014 Microsoft SQL Server, SQL Server 2012, program SQL Server 2008 lub SQL Server 2008 R2 na komputerze, który zawiera wiele procesorów. Gdy liczba blokad (typ zasobu = bazy danych) dla konkretnej bazy danych przekracza określony próg, występują następujące problemy z wydajnością:
  • Podwyższone wartości występują dla licznika spinlock LOCK_HASH .

    Uwaga: Zobacz sekcję "Więcej informacji" informacje na temat monitorowania tego spinlock.
  • Kwerendy lub operacji, które wymagają blokad bazy danych zająć dużo czasu do uzupełnienia. Na przykład można zauważyć następujące opóźnienia wydajności:
    • Logowania do programu SQL Server
    • Serwer połączony kwerend
    • sp_reset_connection
    • Transakcje
Uwaga: Aby znaleźć na liście blokad (typ zasobu = bazy danych) na danej bazy danych, zobacz sekcję "Więcej informacji". Wartość progowa zależy od środowiska.
Rozwiązanie

Informacje dotyczące zbiorczej aktualizacji

Problem został rozwiązany po raz pierwszy w następujących aktualizacji zbiorczej programu SQL Server.

13 aktualizację zbiorczą dla programu SQL Server 2008 R2 z dodatkiem SP2

Zbiorcza aktualizacja 17 dla dodatku SP3 dla programu SQL Server 2008

Zbiorcza aktualizacja 1 dla programu SQL Server 2014

Zbiorcza aktualizacja zabezpieczeń 9 dla dodatku SP1 dla programu SQL Server 2012

Aktualizacje zbiorcze dla programu SQL Server — informacje

Każdej nowej aktualizacji zbiorczej dla programu SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały zawarte w poprzedniej zbiorczej aktualizacji. Sprawdź najnowsze aktualizacje zbiorcze dla programu SQL Server:

Informacje o poprawce

Obsługiwana poprawka jest dostępna od firmy Microsoft. Jednak ta poprawka jest przeznaczona tylko do usunięcia problemu opisanego w tym artykule. Tylko w systemach, w których występuje ten problem, należy zastosować tę poprawkę.

Jeśli poprawka jest dostępna do pobrania, pojawi się sekcja "Poprawka dostępna do pobrania" na początku tego artykułu z bazy wiedzy Knowledge Base. Jeśli nie ma tej sekcji, należy przesłać żądanie do centrum obsługi klienta firmy Microsoft i obsługi technicznej w celu uzyskania poprawki.

Zwróć uwagę Ewentualnych dodatkowych problemów lub konieczności rozwiązania problemu, być może trzeba utworzyć osobne zlecenie usługi. Koszty obsługi zwykły zastosuje się do dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu określonej poprawki. Aby uzyskać pełną listę numerów telefonów pomocy technicznej i obsługi klienta firmy Microsoft lub utworzyć osobne zlecenie usługi odwiedź następujące witryny firmy Microsoft: Zwróć uwagę "Poprawka dostępna do pobrania" zawiera listę języków, dla których dostępna jest poprawka. Jeśli odpowiedni język nie jest widoczny, to dlatego, że poprawka nie jest dostępna dla danego języka.

Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.
Więcej informacji
Kiedy aplikacja tworzy połączenie z SQL Server, najpierw ustanawia kontekstu bazy danych. Domyślnie połączenie próbuje uzyskać blokady bazy danych w trybie SH. Blokada Bazy danych SH zostanie wydany, kiedy połączenie zostanie zatrzymana lub kontekstu bazy danych został zmieniony w czasie trwania połączenia. Jeśli masz wiele aktywnych połączeń korzystających z tym samym kontekście bazy danych może mieć wiele blokad typu zasobu bazy danych dla określonej bazy danych.

Na komputerze, na którym zainstalowano 16 lub więcej procesorów tylko obiekty tabeli korzystają ze schematu blokada podzielonym na partycje. Jednakże nie są odseparowane blokad bazy danych. W związku z tym tym większy blokuje numer bazy danych, tym dłużej będzie trwało dla programu SQL Server uzyskać blokadę bazy danych. Większość aplikacji nie będą występować problemy wynikające z tego projektu. Ale tak szybko, jak liczba przekroczy określony próg, aby uzyskać blokady wymagana jest dodatkowa praca i czas. Mimo, że koszt jest tylko micro sekund dla każdej dodatkowej blokady, całkowity czas szybko można zwiększyć, ponieważ blokada Wiadra mieszania są chronione przy użyciu spinlock. To powoduje, że dodatkowe cykle Procesora i czeka na dodatkowych pracowników do uzyskania blokady.

Ta poprawka wprowadza partycjonowanie blokada bazy danych po włączeniu flagi śledzenia T1236 podczas uruchamiania. Partycjonowanie blokada bazy danych utrzymuje głębokość listy blokady w zarządzaniu w każdej partycji lokalnych. To znacznie optymalizuje ścieżki dostępu, który jest używany do uzyskania blokada bazy danych .

Aby monitorować LOCK_HASH spinlock, można użyć następującej kwerendy.
SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)DECLARE @counter int = 1WHILE @counter < 100      BEGIN            INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'            WAITFOR DELAY '00:00:05'            SET @counter +=1      ENDSELECT * FROM #spinlock_stats ORDER BY [CaptureTime]DROP TABLE #spinlock_stats
Aby uzyskać więcej informacji dotyczących diagnostyki i usuwania spinlock Rywalizacja w programie SQL Server przejdź do następujących dokumentów:

Uwaga: Chociaż ten dokument został napisany dla programu SQL Server 2008 R2, informacje są nadal stosowane do programu SQL Server 2012.
Materiały referencyjne
Aby uzyskać więcej informacji dotyczących flag śledzenia programu SQL Server 2012 przejdź do następującej witryny sieci Web TechNet:


Aby uzyskać więcej informacji o tym, jak znaleźć liczbę blokad bazy danych w polu użytkownika na bazę danych należy użyć następującej kwerendy do obliczenia tej wartości:
select  Resource_database_id, resource_type, request_mode, request_status,  count (*) 'LockCount' from sys.dm_tran_locks group by  Resource_database_id, resource_type, request_mode, request_status


Ostrzeżenie: ten artykuł przetłumaczono automatycznie

Właściwości

Identyfikator artykułu: 2926217 — ostatni przegląd: 12/03/2015 16:13:00 — zmiana: 7.0

Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2012 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2008 Service Pack 3, Microsoft SQL Server 2008 R2 Service Pack 2

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbautohotfix kbhotfixserver kbmt KB2926217 KbMtpl
Opinia
var Ctrl = ""; document.write(" mTracker.init();