Demostración de SQL Server Query Store
A continuación les comparto el script de TSQL utilizado durante la demostración de SQL Server Query Store.
-- Creamos la base de datos
CREATE DATABASE db_ejemplo_querystore ON PRIMARY ( NAME =
N'db_ejemplo_querystore', filename = N'C:\DATOS_SQL\db_ejemplo_querystore.mdf',
size = 102400kb, maxsize = 1024000kb, filegrowth = 20480kb ) log ON ( NAME =
N'db_ejemplo_querystore_log', filename =
N'C:\DATOS_SQL\db_ejemplo_querystore_log.ldf', size = 20480kb, maxsize = 1024000
kb, filegrowth = 20480kb )
go
ALTER DATABASE db_ejemplo_querystore
SET auto_update_statistics OFF
go
ALTER DATABASE db_ejemplo_querystore
SET auto_create_statistics OFF
go
ALTER DATABASE db_ejemplo_querystore
SET recovery simple
go
ALTER DATABASE db_ejemplo_querystore
SET query_store = OFF
go
USE db_ejemplo_querystore
go -- crear una tabla de ejemplo
CREATE TABLE dbo.db_tabla_query_store
(
campo1 CHAR(100) NOT NULL,
campo2 CHAR(100) NOT NULL,
tipo INT NULL
)
go -- procedimiento almacenado de ejemplo
CREATE PROC dbo.Procedimiento_ejemplo @id SMALLINT
AS
SET nocount ON
SELECT campo1,
campo2
FROM dbo.db_tabla_query_store
WHERE tipo = @id
go -- llenar la tabla con datos
SET nocount ON
INSERT INTO dbo.db_tabla_query_store
(campo1,
campo2,
tipo)
SELECT '18',
'2f',
2
go
20000
INSERT INTO dbo.db_tabla_query_store
(campo1,
campo2)
SELECT '171',
'1ff'
go
4000
INSERT INTO dbo.db_tabla_query_store
(campo1,
campo2,
tipo)
SELECT '172',
'1ff',
0
go
10
INSERT INTO dbo.db_tabla_query_store
(campo1,
campo2,
tipo)
SELECT '172',
'1ff',
4
go
15000 -- habilitar el Query Store en la base de datos
ALTER DATABASE db_ejemplo_querystore
SET query_store = ON
go -- ejecutar el procedimiento sin indices
EXEC dbo.Procedimiento_ejemplo
0
go
20 -------------------------------
-- Revisemos el Query Store
-------------------------------
-- Ahora creemos un indice y volvemos a revisar el Query Store
CREATE NONCLUSTERED INDEX ncindice_1
ON dbo.db_tabla_query_store (tipo)
go
EXEC dbo.Procedimiento_ejemplo
0
go
20 -------------------------------
-- Revisemos el Query Store
-------------------------------
-- Ahora creemos un indice y volvemos a revisar el Query Store
CREATE NONCLUSTERED INDEX ncindice_2
ON dbo.db_tabla_query_store (tipo, campo1)
go
EXEC dbo.Procedimiento_ejemplo
0
go
20 -- Hagamos algunas consultas para determinar el plan de ejecucion
UPDATE dbo.db_tabla_query_store
SET campo1 = '1'
WHERE tipo = '0'
UPDATE dbo.db_tabla_query_store
SET campo2 = '3ff'
WHERE tipo = '1'
DELETE FROM dbo.db_tabla_query_store
WHERE tipo = 3
INSERT INTO dbo.db_tabla_query_store
(campo1,
campo2,
tipo)
SELECT '173',
'1fa',
0
go
5
EXEC dbo.Procedimiento_ejemplo
0
go
20 -------------------------------
-- Revisemos el Query Store
-------------------------------
EXEC Sp_query_store_force_plan
@query_id = 1,
@plan_id = 4;
EXEC dbo.Procedimiento_ejemplo
0
go
20 -- Creemos un indice que es mejor para el desempeno
CREATE NONCLUSTERED INDEX ncindice_3
ON dbo.db_tabla_query_store (tipo)
include (campo1, campo2) -- Quitemos el plan forzado
EXEC Sp_query_store_unforce_plan
@query_id = 1,
@plan_id = 2
go
EXEC dbo.Procedimiento_ejemplo
0
go
Comments