Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Az SQL Server Query Store lehetővé teszi a natívan lefordított kód teljesítményének monitorozását a memóriában futó OLTP-t futtató számítási feladatokhoz.
A fordítási és futásidejű statisztikák gyűjtése és nyilvánosságra helyezése ugyanúgy történik, mint a lemezalapú számítási feladatok esetében.
Ha a memóriában lévő OLTP-be migrál, az SQL Server Management Studióban továbbra is használhatja a Lekérdezéstár nézeteket, valamint a lemezalapú számítási feladatokhoz kifejlesztett egyéni szkripteket az áttelepítés előtt. Ezzel megtakaríthatja a lekérdezéstár technológiájának elsajátítására fordított befektetést, és használhatóvá teszi az összes számítási feladat hibaelhárításához.
A lekérdezéstár használatával kapcsolatos általános információkért tekintse meg a Lekérdezéstár használatával végzett teljesítményfigyelést.
A lekérdezéstár memóriabeli OLTP-vel való használatához nincs szükség további funkciókonfigurációra. Ha engedélyezi az adatbázison, az minden típusú számítási feladathoz használható.
A lekérdezéstár memórián belüli OLTP-vel való használatakor azonban a felhasználóknak tisztában kell lenniük néhány konkrét szemponttal:
Ha a Lekérdezéstár engedélyezve van, a rendszer alapértelmezés szerint összegyűjti a lekérdezéseket, a csomagokat és a fordítási idő statisztikáit. A futtatókörnyezeti statisztikák gyűjtése azonban csak akkor aktiválódik, ha explicit módon engedélyezi azt sys.sp_xtp_control_query_exec_stats (Transact-SQL) használatával.
Ha @new_collection_value 0 értékre állítja, a lekérdezéstár nem gyűjti az érintett eljárás vagy a teljes SQL Server-példány futásidejű statisztikáit.
A sys.sp_xtp_control_query_exec_stats (Transact-SQL) beállítással konfigurált érték nem marad meg. Ellenőrizze és konfigurálja újra a statisztikai gyűjteményt az SQL Server újraindítása után.
A rendszeres lekérdezési statisztikák gyűjtéséhez hasonlóan a teljesítmény is csökkenhet, ha a Lekérdezéstár használatával követi nyomon a számítási feladatok végrehajtását. Fontolja meg a statisztikák gyűjtésének engedélyezését csak a natívan lefordított tárolt eljárások fontos részhalmazához.
A lekérdezések és tervek rögzítése és tárolása az első natív fordításban történik, és minden újrafordításkor frissül.
Ha engedélyezte a Lekérdezéstárat, vagy törölte annak tartalmát az összes natív tárolt eljárás fordítása után, manuálisan kell újrafordítania őket, hogy a lekérdezéstár rögzítse őket. Ugyanez vonatkozik arra az esetre is, ha manuálisan eltávolította a lekérdezéseket sp_query_store_remove_query (Transact-SQL) vagy sp_query_store_remove_plan (Transact-SQL) használatával. A sp_recompile (Transact-SQL) használatával kényszerítse ki az eljárás újrafordítását.
A Lekérdezéstár a memóriabeli OLTP terv létrehozási mechanizmusait használja a lekérdezési végrehajtási tervek rögzítéséhez a fordítás során. A tárolt terv szemantikailag egyenértékű azzal, amit a
SET SHOWPLAN_XML ONhasználatával kapna, egyetlen különbséggel: a Lekérdezéstárban lévő tervek egyéni utasításonként vannak felosztva és tárolva.Ha vegyes számítási feladattal rendelkező adatbázisban futtatja a Lekérdezéstárat, a sys.query_store_plan (Transact-SQL)is_natively_compiled mezőjével gyorsan megtalálhatja a natív kódfordítás által létrehozott lekérdezésterveket.
A lekérdezéstár rögzítési módja (QUERY_CAPTURE_MODEparaméter az ALTER TABLE utasításban) nem befolyásolja a natívan lefordított modulok lekérdezéseit, mivel azok mindig rögzítve vannak a konfigurált értéktől függetlenül. Ebbe beletartozik a beállítás
QUERY_CAPTURE_MODE = NONE.A lekérdezéstár által rögzített lekérdezés-fordítás időtartama csak a lekérdezésoptimalizálással töltött időt tartalmazza a natív kód létrehozása előtt. Pontosabban nem tartalmaz időt a C-kód fordítására és a C-kód generáláshoz szükséges belső struktúrák létrehozására.
Az sys.query_store_runtime_stats (Transact-SQL) belüli metrikákat a rendszer nem tölti ki natívan lefordított lekérdezésekhez – az értékük mindig 0. A memóriahasználati oszlopok a következők: avg_query_max_used_memory, last_query_max_used_memory, min_query_max_used_memory, max_query_max_used_memory és stdev_query_max_used_memory.
A Lekérdezéstár engedélyezése és használata az In-Memory OLTP használatával
Az alábbi egyszerű példa bemutatja, hogyan használható a Lekérdezéstár memóriabeli OLTP-vel egy teljes körű felhasználói forgatókönyvben. Ebben a példában feltételezzük, hogy egy adatbázis (MemoryOLTP) engedélyezve van a memóriában lévő OLTP-hez.
A memóriaoptimalizált táblák előfeltételeiről további információt a Memory-Optimized tábla létrehozása és a natívan lefordított tárolt eljárás létrehozása című témakörben talál.
USE MemoryOLTP;
GO
-- Create a simple memory-optimized table
CREATE TABLE dbo.Ord
(OrdNo INTEGER not null PRIMARY KEY NONCLUSTERED,
OrdDate DATETIME not null,
CustCode NVARCHAR(5) not null)
WITH (MEMORY_OPTIMIZED=ON);
GO
-- Enable Query Store before native module compilation
ALTER DATABASE MemoryOLTP SET QUERY_STORE = ON;
GO
-- Create natively compiled stored procedure
CREATE PROCEDURE dbo.OrderInsert(@OrdNo integer, @CustCode nvarchar(5))
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH
(TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'English')
DECLARE @OrdDate DATETIME = GETDATE();
INSERT INTO dbo.Ord (OrdNo, CustCode, OrdDate)
VALUES (@OrdNo, @CustCode, @OrdDate);
END;
GO
-- Enable runtime stats collection for queries from dbo.OrderInsert stored procedure
DECLARE @db_id INT = DB_ID()
DECLARE @proc_id INT = OBJECT_ID('dbo.OrderInsert');
DECLARE @collection_enabled BIT;
EXEC [sys].[sp_xtp_control_query_exec_stats] @new_collection_value = 1,
@database_id = @db_id, @xtp_object_id = @proc_id;
-- Check the state of the collection flag
EXEC sp_xtp_control_query_exec_stats @database_id = @db_id,
@xtp_object_id = @proc_id,
@old_collection_value= @collection_enabled output;
SELECT @collection_enabled AS 'collection status';
-- Execute natively compiled workload
EXEC dbo.OrderInsert 1, 'A';
EXEC dbo.OrderInsert 2, 'B';
EXEC dbo.OrderInsert 3, 'C';
EXEC dbo.OrderInsert 4, 'D';
EXEC dbo.OrderInsert 5, 'E';
-- Check Query Store Data
-- Compile time data
SELECT q.query_id, plan_id, object_id, query_hash, p.query_plan,
p.initial_compile_start_time, p.last_compile_start_time,
p.last_execution_time, p.avg_compile_duration,
p.last_force_failure_reason, p.force_failure_count
FROM sys.query_store_query AS q
JOIN sys.query_store_plan AS p
ON q.query_id = p.plan_id
WHERE q.object_id = OBJECT_ID('dbo.OrderInsert');
-- Get runtime stats
-- Check count_executions field to verify that runtime statistics
-- have been collected by the Query Store
SELECT q.query_id, p.plan_id, object_id, rsi.start_time, rsi.end_time,
p.last_force_failure_reason, p.force_failure_count, rs.*
FROM sys.query_store_query AS q
JOIN sys.query_store_plan AS p
ON q.query_id = p.plan_id
JOIN sys.query_store_runtime_stats AS rs
ON rs.plan_id = p.plan_id
JOIN sys.query_store_runtime_stats_interval AS rsi
ON rs.runtime_stats_interval_id = rsi.runtime_stats_interval_id
WHERE q.object_id = OBJECT_ID('dbo.OrderInsert');