En el presente post, les hago entrega de cada unos de los script ejecutados en el webcast que soporta dicha intervención y a su vez, el video de la presentación.
VIDEO DE LA PRESENTACIÓN
Para poder visualizar el video de la presentación puedes verlo en linea o descargarlo ingresando al siguiente enlace previamente registrandote, vale.
La liga es: https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=es-AR&EventID=1032505988&CountryCode=AR.
O, también puedes ingresar a mi SkyDrive y visuazarlo
A continuación, les emito los scripts de las demos ejecutadas durante la presentación.
SCRIPT DE LAS DEMOS
Bases de datos utilizadas:
-
AdventureWorks2008R2
-
AdventureWorksDWDenali
DEMO 1 – Creación de un índice columnar.
1_CreacionCSI01
– Ejemplo 01 “Script”
USE [AdventureWorksDWDenali]
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX
[IXC_Ejemplo01] ON [dbo].[FactInternetSales] – Tabla FactInternetSales
(
[ProductKey],
[OrderDateKey],
[CustomerKey],
[SalesTerritoryKey],
[TotalProductCost],
[SalesAmount],
[TaxAmt],
[OrderDate]
)
WITH
(DROP_EXISTING = OFF)
ON [PRIMARY]
GO
DEMO 2 – Optimización de una consulta con Column Store Index – ‘CSI’.
2_1_OptimizacionCreacionCSI01
USE [AdventureWorksDWDenali]
GO
– Ejemplo 02 “Script”
CREATE NONCLUSTERED COLUMNSTORE INDEX
[IXC_Ejemplo02]
ON [dbo].[FactResellerSales] – Tabla FactResellerSales
(
[ProductKey],
[OrderDateKey],
[EmployeeKey],
[SalesTerritoryKey],
[OrderQuantity],
[UnitPrice],
[ExtendedAmount],
[TotalProductCost],
[SalesAmount],
[TaxAmt],
[OrderDate]
)
WITH
(DROP_EXISTING = OFF)
ON [PRIMARY]
GO
————————————————————————————————————–
2_2_OptimizacionEjecucionCSI02
USE AdventureWorksDWDenali;
GO
SELECT
d.CalendarYear,
d.CalendarQuarter,
COUNT(*) AS NumberSold
FROM
dbo.FactResellerSales AS f
JOIN
dbo.DimDate AS d
ON f.OrderDateKey = d.DateKey
WHERE
(f.ProductKey = 215)
GROUP BY
d.CalendarYear,
d.CalendarQuarter
ORDER BY
d.CalendarYear,
d.CalendarQuarter
GO
DEMO 3 – CSI en acción.
3_1_CSIenAccion01
– Validamos la base de datos de trabajo
USE [AdventureWorks2008R2]
GO
– Creamos una nueva tabla
CREATE TABLE [dbo].[MySalesOrderDetail](
[SalesOrderID] [int] NOT NULL,
[SalesOrderDetailID] [int] NOT NULL,
[CarrierTrackingNumber] [nvarchar](25) NULL,
[OrderQty] [smallint] NOT NULL,
[ProductID] [int] NOT NULL,
[SpecialOfferID] [int] NOT NULL,
[UnitPrice] [money] NOT NULL,
[UnitPriceDiscount] [money] NOT NULL,
[LineTotal] [numeric](38, 6) NOT NULL,
[rowguid] [uniqueidentifier] NOT NULL,
[ModifiedDate] [datetime] NOT NULL)
ON [PRIMARY]
GO
– Creamos un índice clustered
CREATE CLUSTERED INDEX [PKN_SalesOrderDetailID]
ON [dbo].[MySalesOrderDetail]
([SalesOrderDetailID])
GO
– Generamos data de ejemplo para poblar la data. La misma puede
– demorar algunos minutos dependiendo de nuestro sistema.
INSERT INTO
[dbo].[MySalesOrderDetail]
(
[SalesOrderID],
[SalesOrderDetailID],
[CarrierTrackingNumber],
[OrderQty],
[ProductID],
[SpecialOfferID],
[UnitPrice],
[UnitPriceDiscount],
[LineTotal],
[rowguid],
[ModifiedDate]
)
SELECT
[SalesOrderID],
[SalesOrderDetailID],
[CarrierTrackingNumber],
[OrderQty],
[ProductID],
[SpecialOfferID],
[UnitPrice],
[UnitPriceDiscount],
[LineTotal],
[rowguid],
[ModifiedDate]
FROM
[Sales].[SalesOrderDetail]
GO 100
————————————————————————————————————–
3_2_CSIenAccion02
– Ahora hacemos las pruebas de rendimiento. Hemos habilitado la
– opción STATISTICS IO ON para medir la cantidad de IO
– (Actividad de disco consumida por el código T-SQL mostrando
– información estadistica) después de generar la consulta de prueba.
– 1ra. Prueba: Se ejecuta la consulta con índice normal validando el
— consumo de tiempo que genero en traernos la data.
— Tomamos nota al respecto.
– 2da. Prueba: Ejecutamos la consulta con índice de almacén columnar
— y medido el tiempo de IO que se ha consumido.
– Validamos la base de datos de trabajo
USE [AdventureWorks2008R2]
GO
– Establecemos la opción STATISTICS IO en ON.
SET STATISTICS IO ON
GO
– La prueba que vamos a validar aquí es con un índice normal.
SELECT
[ProductID],
SUM([UnitPrice]) AS SumUnitPrice,
AVG([UnitPrice]) AS AVGUnitPrice,
SUM([OrderQty]) AS SumOrderQty,
AVG([OrderQty]) AS AVGOrderQty
FROM
[dbo].[MySalesOrderDetail]
GROUP BY
[ProductID]
ORDER BY
[ProductID]
GO
————————————————————————————————————–
3_3_CSIenAccion03
– Validamos la base de datos de trabajo
USE [AdventureWorks2008R2]
GO
– Establecemos la opción STATISTICS IO en ON.
SET STATISTICS IO ON
GO
– Creamos el índice de almacenamiento columnar
CREATE NONCLUSTERED COLUMNSTORE INDEX
[IXC_MySalesOrderDetail]
ON [MySalesOrderDetail]
([UnitPrice], [OrderQty], [ProductID])
GO
– La prueba que vamos a validar aquí es con un índice columnar.
SELECT
[ProductID],
SUM([UnitPrice]) AS SumUnitPrice,
AVG([UnitPrice]) AS AVGUnitPrice,
SUM([OrderQty]) AS SumOrderQty,
AVG([OrderQty]) AS AVGOrderQty
FROM
[dbo].[MySalesOrderDetail]
GROUP BY
[ProductID]
ORDER BY
[ProductID]
GO
– Ahora veamos los resultados en los mensajes respectivos de cada query
– Despúes veamos cada Plan de Ejecución de Consulta haber que nos
– muestra.
————————————————————————————————————–
4_LimpiezaEscenario
USE AdventureWorks2008R2
GO
DROP INDEX [IXC_MySalesOrderDetail]
ON [dbo].[MySalesOrderDetail]
GO
TRUNCATE TABLE [dbo].[MySalesOrderDetail]
GO
DROP TABLE [dbo].[MySalesOrderDetail]
GO
————————————————————————————————————–
Espero que les sea de mucha utilidad el presente post y les ayude a desarrollar ampliamente los tópicos y conceptos tratados en la presente exposición.
Nos pillamos en una próxima, vale.

























































