Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

Firma Microsoft rozpowszechnia poprawki programu Microsoft SQL Server 2008 R2 jako jednego pliku do pobrania. Ponieważ poprawki są zbiorcze, każde nowe wydanie zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniej wersji poprawki SQL Server 2008 R2.

Symptomy

Rozpatrzmy następujący scenariusz:

  • Aplikacja uruchamia kwerendę odwołującą się do tabel tymczasowych w programie Microsoft SQL Server 2008 i w programie Microsoft SQL Server 2008 R2. Tabele tymczasowe są tworzone w sesji zamiast w procedurze składowanej.

  • Plan kwerend jest buforowany.

  • Wielu użytkowników uruchamia tę samą kwerendę w bardzo współbieżnym środowisku. Na przykład wielu użytkowników korzysta z aplikacji, która uruchamia następujące zapytanie:

    create table #x (col1 int) go insert into #x values (1) go select * from #x where col1 = 1 go

W tym scenariuszu aplikacja napotyka problemy z wydajnością.Uwaga Aby uzyskać więcej informacji na temat identyfikowania tego problemu, zobacz sekcję "więcej informacji".

Przyczyna

Ten problem występuje, ponieważ te same plany kwerend są wstawiane do pamięci podręcznej w tym samym zasobniku mieszania dla każdego użytkownika, gdy tekst kwerendy jest taki sam. Gdy duża liczba planów jest mieszana do tego samego zasobnika (nazywanego również łańcuchem mieszania), czas na wyszukanie planu w pamięci podręcznej znacznie wzrasta i może wystąpić problem z wydajnością. Ponadto wątki robocze mogą napotkać poważne rywalizacje o spinlock, a inne wątki są narażone, gdy te wątki robocze nie wykonują właściwych plonów harmonogramu.

Rozwiązanie

Uwaga Obecnie jest dostępna tylko aktualizacja programu SQL Server 2008 R2. W przypadku programu SQL Server 2008 zapoznaj się z sekcją "Obejście" w celu obejścia tego problemu.

Informacje o aktualizacji zbiorczej

SQL Server 2008 R2 z dodatkiem Service Pack 1

Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 1 dla programu SQL Server 2008 R2 z dodatkiem Service Pack 1. Aby uzyskać więcej informacji na temat sposobu uzyskiwania tego zbiorczego pakietu aktualizacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2544793 Pakiet aktualizacji zbiorczej 1 dla programu SQL Server 2008 R2 z dodatkiem Service Pack 1Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń dołączone do poprzedniej wersji poprawki SQL Server 2008 R2. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2567616 Kompilacje programu SQL Server 2008 R2, które zostały wydane po opublikowaniu dodatku Service Pack 1 dla programu SQL Server 2008 R2

SQL Server 2008 R2

Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 7. Aby uzyskać więcej informacji na temat sposobu uzyskiwania tego zbiorczego pakietu aktualizacji dla programu SQL Server 2008 R2, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2507770 Pakiet aktualizacji zbiorczej 7 dla programu SQL Server 2008 R2 Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń dołączone do poprzedniej wersji poprawki SQL Server 2008 R2. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

981356 Kompilacje programu SQL Server 2008 R2, które zostały wydane po opublikowaniu programu SQL Server 2008 R2

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".

Obejście

Aby obejść ten problem w programie SQL Server 2008 i programie SQL Server 2008 R2, Przenieś wszystkie odwołania do tabel tymczasowych do przechowywanych wewnętrznie.

Więcej informacji

Aby uzyskać więcej informacji na temat tworzenia i modyfikowania podstaw tabeli, odwiedź następującą witrynę MSDN w sieci Web:

Jak tworzyć i modyfikować podstawy tabeliRywalizację spinlock można zidentyfikować z sys.dm_os_spinlock_stats poziomu dynamicznego widoku zarządzania (DMV), który ma wysoką szybkość rywalizacji na SOS_CACHESTORE spinlock. Aby zidentyfikować ten problem, uruchom zapytanie podobne do następujących:

select cp.bucketid, count(cp.bucketid) as BucketCount, st.text from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text(cp.plan_handle) as st group by cp.bucketid, st.text having count(cp.bucketid) >1 order by BucketCount descJeśli po uruchomieniu tego zapytania są spełnione następujące warunki, mogą wystąpić problemy z wydajnością:

  • Ta kwerenda generuje ten sam tekst zapytania.

  • Liczba dla tego samego BucketID jest duża.Uwaga Duża liczba dla tego samego BucketID jest zwykle większa niż 1000.

  • Tabele tymczasowe odwołań do zapytań

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×