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

Popular posts from this blog

Desempeño de SQL Server 2008 R2 y Max Worker Threads

Cómo identificar consultas más pesadas en SQL Server

SQL Server La longitud de los datos LOB (2200100) que se van a replicar excede el máximo configurado 65536.