Dokumentacja
-
Rozwiązywanie PAGELATCH_EX rywalizacji - SQL Server
W tym artykule opisano sposób rozwiązywania problemów z rywalizacją PAGELATCH_EX wstawiania na ostatniej stronie w SQL Server.
Dotyczy: SQL Server 2016 (13.x) i nowsze wersje Wystąpienie zarządzane Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics (tylko dedykowana pula SQL)
Funkcja Magazyn zapytań zapewnia wgląd w wybór planu zapytań i wydajność dla programów SQL Server, Azure SQL Database, Azure SQL Managed Instance i Azure Synapse Analytics. Magazyn zapytań upraszcza rozwiązywanie problemów z wydajnością, ułatwiając szybkie znajdowanie różnic w wydajności spowodowanych zmianami planu zapytań. Magazyn zapytań automatycznie przechwytuje historię zapytań, planów i statystyk środowiska uruchomieniowego i zachowuje je do przeglądu. Oddziela dane według okien czasu, dzięki czemu można zobaczyć wzorce użycia bazy danych i zrozumieć, kiedy na serwerze nastąpiły zmiany planu zapytań. Magazyn zapytań można skonfigurować za pomocą opcji ZMIEŃ ZESTAW BAZ DANYCH.
Ważne
Jeśli używasz magazynu zapytań do analizy obciążenia w czasie w programie SQL Server 2016 (13.x), zaplanuj jak najszybsze zainstalowanie poprawek skalowalności wydajności w KB 4340759.
READ_WRITEW Eksploratorze obiektów kliknij prawym przyciskiem myszy bazę danych, a następnie wybierz polecenie Właściwości.
Uwaga
Wymaga co najmniej wersji 16 programu Management Studio.
W oknie dialogowym Właściwości bazy danych wybierz stronę Magazyn kwerend.
W polu Operation Mode (Requested) (Tryb pracy (żądany) wybierz opcję Odczyt zapisu.
Użyj instrukcji, aby włączyć magazyn zapytań dla danej bazy danych. Na przykład:ALTER DATABASE
ALTER DATABASE <database_name>
SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE);
W usłudze Azure Synapse Analytics włącz magazyn zapytań bez dodatkowych opcji, na przykład:In Azure Synapse Analytics, enable the Query Store without additional options, for example:
ALTER DATABASE <database_name>
SET QUERY_STORE = ON;
Aby uzyskać więcej opcji składni związanych z magazynem zapytań, zobacz ALTER DATABASE SET Options (Transact-SQL).
Uwaga
Nie można włączyć magazynu zapytań dla baz danych lub.mastertempdb
Ważne
Aby uzyskać informacje na temat włączania magazynu zapytań i dostosowywania go do obciążenia, zobacz Najważniejsze wskazówki dotyczące magazynu zapytań.
Plany wykonywania dla dowolnego konkretnego zapytania w programie SQL Server zazwyczaj ewoluują w czasie z wielu różnych powodów, takich jak zmiany statystyk, zmiany schematu, tworzenie/usuwanie indeksów itp. W pamięci podręcznej procedur (w której są przechowywane plany kwerend buforowanych) jest przechowywany tylko najnowszy plan wykonania. Plany są również eksmitowane z pamięci podręcznej planu z powodu obciążenia pamięcią. W rezultacie regresje wydajności zapytań spowodowane zmianami planu wykonania mogą być nietrywialne i czasochłonne do rozwiązania.
Ponieważ magazyn zapytań zachowuje wiele planów wykonywania na zapytanie, może wymuszać zasady nakazujące Procesorowi zapytań użycie określonego planu wykonywania dla zapytania. Jest to określane jako wymuszanie planu. Wymuszanie planu w magazynie zapytań jest dostarczane przy użyciu mechanizmu podobnego do wskazówki kwerendy USE PLAN, ale nie wymaga żadnych zmian w aplikacjach użytkownika. Wymuszanie planu może rozwiązać regresję wydajności zapytania spowodowaną zmianą planu w bardzo krótkim czasie.
Uwaga
Magazyn zapytań zbiera plany dla instrukcji DML, takich jak SELECT, INSERT, UPDATE, DELETE, MERGE i BULK INSERT.
Zgodnie z projektem magazyn zapytań nie zbiera planów dla instrukcji DDL, takich jak CREATE INDEX itp. Magazyn zapytań przechwytuje skumulowane zużycie zasobów, zbierając plany dla podstawowych instrukcji DML. Na przykład magazyn zapytań może wyświetlać instrukcje SELECT i INSERT wykonywane wewnętrznie w celu wypełnienia nowego indeksu.
Magazyn zapytań domyślnie nie zbiera danych dla natywnie skompilowanych procedur składowanych. Użyj sys.sp_xtp_control_query_exec_stats, aby włączyć zbieranie danych dla natywnie skompilowanych procedur składowanych.
Statystyki oczekiwania są kolejnym źródłem informacji, które pomagają rozwiązywać problemy z wydajnością w programie Aparat baz danych. Przez długi czas statystyki oczekiwania były dostępne tylko na poziomie instancji, co utrudniało cofnięcie oczekiwania na konkretne zapytanie. Począwszy od programu SQL Server 2017 (14.x) i usługi Azure SQL Database, magazyn zapytań zawiera wymiar, który śledzi statystyki oczekiwania. Poniższy przykład umożliwia magazynowi zapytań zbieranie statystyk oczekiwania.
ALTER DATABASE <database_name>
SET QUERY_STORE = ON ( WAIT_STATS_CAPTURE_MODE = ON );
Typowe scenariusze korzystania z funkcji magazynu zapytań to:Common scenarios for using the Query Store feature are:
Magazyn kwerend zawiera trzy magazyny:The Query Store contains three stores:
Liczba unikatowych planów, które mogą być przechowywane dla zapytania w magazynie planów, jest ograniczona przez opcję konfiguracji max_plans_per_query. Aby zwiększyć wydajność, informacje są zapisywane w sklepach asynchronicznie. Aby zminimalizować wykorzystanie miejsca, statystyki wykonywania środowiska wykonawczego w magazynie statystyk środowiska wykonawczego są agregowane w stałym przedziale czasu. Informacje w tych magazynach są widoczne przez wysłanie zapytania do widoków katalogu magazynu kwerend.
Poniższe zapytanie zwraca informacje o zapytaniach i planach w magazynie kwerend.
SELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry.*
FROM sys.query_store_plan AS Pl
INNER JOIN sys.query_store_query AS Qry
ON Pl.query_id = Qry.query_id
INNER JOIN sys.query_store_query_text AS Txt
ON Qry.query_text_id = Txt.query_text_id;
Dotyczy: SQL Server (począwszy od SQL Server 2022 (16.x))
Funkcja Magazyn zapytań dla replik pomocniczych udostępnia te same funkcje magazynu zapytań dla obciążeń replik pomocniczych, które są dostępne dla replik podstawowych. Gdy jest włączona usługa Magazyn zapytań dla replik pomocniczych, repliki wysyłają informacje o wykonywaniu zapytań, które normalnie byłyby przechowywane w magazynie zapytań, z powrotem do repliki podstawowej. Następnie replika podstawowa utrwala dane na dysku we własnym magazynie zapytań. Zasadniczo istnieje jeden magazyn zapytań współużytkowany między podstawową i wszystkimi replikami pomocniczymi. Magazyn zapytań istnieje w replice podstawowej i przechowuje dane dla wszystkich replik razem.
Aby uzyskać pełne informacje na temat magazynu zapytań dla replik pomocniczych, zobacz Magazyn zapytań dla zawsze włączonych replik pomocniczych grup dostępności.
Po włączeniu magazynu zapytań odśwież część bazy danych w okienku Eksplorator obiektów, aby dodać sekcję Magazyn zapytań.
Uwaga
W przypadku usługi Azure Synapse Analytics widoki magazynu zapytań są dostępne w obszarze Widoki systemowe w części dotyczącej bazy danych okienka Eksplorator obiektów.
Wybierz pozycję Regresed Queries (Zapytania regresywne), aby otworzyć okienko Regresed Queries (Zapytania regresywne) w programie SQL Server Management Studio. W okienku Zapytania regresyjne są wyświetlane zapytania i plany w magazynie zapytań. Użyj pól rozwijanych u góry, aby filtrować zapytania na podstawie różnych kryteriów: Czas trwania (ms) (domyślnie), Czas procesora (ms), Odczyty logiczne (KB), Zapisy logiczne (KB), Odczyty fizyczne (KB), Czas CLR (ms), DOP, Zużycie pamięci (KB), Liczba wierszy, Używana pamięć dziennika (KB), Czasowa pamięć bazy danych (KB) i Czas oczekiwania (ms).
Wybierz plan, aby wyświetlić graficzny plan zapytań. Dostępne są przyciski umożliwiające wyświetlanie zapytania źródłowego, wymuszanie i wymuszanie planu zapytania, przełączanie między formatami siatki i wykresu, porównywanie wybranych planów (jeśli wybrano więcej niż jeden) oraz odświeżanie wyświetlania.
Aby wymusić plan, wybierz zapytanie i plan, a następnie wybierz pozycję Wymuś plan. Można wymusić tylko plany, które zostały zapisane przez funkcję planu zapytania i są nadal zachowywane w pamięci podręcznej planu zapytań.
Począwszy od programu SQL Server 2017 (14.x) i usługi Azure SQL Database, statystyki oczekiwania na zapytanie w czasie są dostępne w magazynie zapytań.
W magazynie zapytań typy oczekiwania są łączone w kategorie oczekiwania. Mapowanie kategorii oczekiwania na typy oczekiwania jest dostępne w języku sys.query_store_wait_stats (języka Transact-SQL).
Wybierz pozycję Statystyka oczekiwania na kwerendę, aby otworzyć okienko Statystyka oczekiwania na zapytanie w programie SQL Server Management Studio w wersji 18 lub nowszej. W okienku Statystyka oczekiwania na zapytanie jest wyświetlany wykres słupkowy zawierający najważniejsze kategorie oczekiwania w magazynie zapytań. Użyj listy rozwijanej u góry, aby wybrać zbiorcze kryteria czasu oczekiwania: avg, max, min, std dev i total (domyślnie).
Select a wait category by selecting on the bar and a detail view on the selected wait category displays. This new bar chart contains the queries that contributed to that wait category.
Use the drop-down box at the top to filter queries based on various wait time criteria for the selected wait category: avg, max, min, std dev, and total (default). Select a plan to see the graphical query plan. Buttons are available to view the source query, force, and unforce a query plan, and refresh the display.
Wait categories are combining different wait types into buckets similar by nature. Different wait categories require a different follow-up analysis to resolve the issue, but wait types from the same category lead to very similar troubleshooting experiences, and providing the affected query on top of waits would be the missing piece to complete most such investigations successfully.
Here are some examples how you can get more insights into your workload before and after introducing wait categories in Query Store:
| Previous experience | New experience | Action |
|---|---|---|
| High RESOURCE_SEMAPHORE waits per database | High Memory waits in Query Store for specific queries | Find the top memory consuming queries in Query Store. These queries are probably delaying further progress of the affected queries. Consider using MAX_GRANT_PERCENT query hint for these queries, or for the affected queries. |
| High LCK_M_X waits per database | High Lock waits in Query Store for specific queries | Check the query texts for the affected queries and identify the target entities. Look in Query Store for other queries modifying the same entity, which are executed frequently and/or have high duration. After identifying these queries, consider changing the application logic to improve concurrency, or use a less restrictive isolation level. |
| High PAGEIOLATCH_SH waits per database | High Buffer IO waits in Query Store for specific queries | Find the queries with a high number of physical reads in Query Store. If they match the queries with high IO waits, consider introducing an index on the underlying entity, in order to do seeks instead of scans, and thus minimize the IO overhead of the queries. |
| High SOS_SCHEDULER_YIELD waits per database | High CPU waits in Query Store for specific queries | Find the top CPU consuming queries in Query Store. Among them, identify the queries for which high CPU trend correlates with high CPU waits for the affected queries. Focus on optimizing those queries - there could be a plan regression, or perhaps a missing index. |
For the available options to configure Query Store parameters, see ALTER DATABASE SET options (Transact-SQL).
Query the view to determine the current options of the Query Store. For more information about the values, see sys.database_query_store_options.sys.database_query_store_options
For examples about setting configuration options using Transact-SQL statements, see Option Management.
Uwaga
For Azure Synapse Analytics, the Query Store can be enabled as on other platforms but additional configuration options are not supported.
View and manage Query Store through Management Studio or by using the following views and procedures.
Functions help operations with the Query Store.
Catalog views present information about the Query Store.
Stored procedures configure the Query Store.
sp_query_store_consistency_check (Transact-SQL)1
1 In extreme scenarios Query Store can enter an ERROR state because of internal errors. Starting with SQL Server 2017 (14.x), if this happens, Query Store can be recovered by executing the stored procedure in the affected database. See sys.database_query_store_options for more details described in the column description.sp_query_store_consistency_checkactual_state_desc
Best practices and recommendations for maintenance and management of the Query Store have been expanded in this article: Best practices for managing the Query Store.
For more information about diving into performance tuning with Query Store, see Tune performance with the Query Store.
Other performance topics:
Prześlij i wyświetl opinię dla
Dokumentacja
Rozwiązywanie PAGELATCH_EX rywalizacji - SQL Server
W tym artykule opisano sposób rozwiązywania problemów z rywalizacją PAGELATCH_EX wstawiania na ostatniej stronie w SQL Server.