Vemos las mejoras que presenta SQL Server 2016 en los temas de InMemory OLTP y también los cambios en Column Store Index, y su importancia en la mejora de desempeño.
Saludos,
Ing. Eduardo Castro, PhD
Microsoft SQL Server MVP
2. Bienvenida
• Ing. Eduardo Castro, PhD
• MVP de Microsoft SQL Server
• PASS Regional de Mentor
• PASS Board of Directors
• ecastro@simsasys.com
• http://www.youtube.com/eduardocastrom
3. Material de Referencia
SQL Server Evolution. SQL 2016 new innovations. Lindsey Allen
Principal Group Program Manager, Borko Novakovic
Program Manager
New in Master Data Services and Integration Services in SQL Server
2016. Matt Masson
SQL Server Evolution. Shawn Bice Engineering Partner Director
Operational Analytics in SQL Server. Sunil Agarwal Principal Program
Manager
4. Plataforma de misión crítica
Desempeño
Operational Analytics
• Reduciralmínimoimpactoenel
rendimientocorriendoanálisisen
tiemporealdedatosdela
transacción
• Evitarladispersióndedatos
InMemory OLTP para
más aplicaciones
Query Store
Seguridad
Always
Encrypted
Row level
security
Dynamic Data
Masking
Disponibilidad
Enhanced
AlwaysOn
• 3réplicassíncronaspara
failoverautomáticoatravésde
dominios
• elequilibriodecargaround
robin deréplicas
• DTCparalaintegridad
transaccional
atravésdeinstanciasdebase
conAlwaysOn
Mejoras en
operaciones en
línea
Escalabilidad
Soporte para
Windows Server 2016
12TB16sockets
5. SQL 2016 Mejoras
Acceder a cualquier
dato
PolyBase
Native JSON
Temporal database
support
Power Query for analytics
and reporting
Built-in Advanced
Analytics
Conocimiento del
negocio a través de
visualizaciones en
cualquier dispositivo
móvil
Escalar y gestionar
Enterprise-grade
Analysis Services
SSDT in
Visual Studio 2015
Enhanced MDS
Enhanced SSIS
Enhanced Reporting
Services
Las soluciones híbridas
Stretch tables en Azure
Power BI with on-premises
data
Escenarios híbridos con
SSIS
• AzureDataFactoryintegrationwithSSIS
• PackageLineageandimpactanalysis
• ConnectSSIStoclouddatasources
Mejoras en respaldohacia
Azure
• Xfasterrestoreand50%reductioninstorage
Mejor migraciónde SQL
Server OnPremiseshacia
Azure
7. Mejoras en Column Store
• Artículo de Microsoft
http://bit.ly/sql2016-columnstore
8. .
.
.
C1 C
2
C3 C5C4
Columstore: cómo funciona?
10
beneficios:
• Mejora de la compresión:
Los datos del mismo dominio
comprimen mejor
• Reducción de E / S:
Traerá sólo las columnas
necesarias
• Desempeño mejorado:
Más datos caben en la memoria
Los datos almacenados
como filas
Column Store(índice)
Los datos almacenados como
columnas
9. Llav
e AlternateKey Nombre
Valore
s
1 AR-5381 Ajustable Carrera 1000
2 BA-8327 Cojinete Pelota 1000
3 BE-2349 Pelota Cojinete Jaula 800
4 BE-2908 Pelota Cojinete Grasa 800
5 BL-2036 Espada 800
6 CA-5965 LL Biela 500
7 CA-6738 ML Biela 500
Página 1 de
fila
almacenar
Página 2 de
fila
almacenar
Segmento
para
columna 1
Segmento
para
columna 2
Segmento
para
columna 3
Segmento
para
columna 4
RowStore vs. Column Store
11. Por qué debería utilizar Column Store Índex
dieciséis
• Un Column Store Index puede proporcionar un nivel
muy alto de compresión de datos, normalmente 10
veces, para reducir el costo de almacenamiento de
almacenamiento de datos de manera significativa.
• Además, para las operaciones analíticas ofrecen un
orden de magnitud mejor rendimiento que un índice de
B-Tree.
• Es el formato de almacenamiento de datos preferido
para datawarehouse y analytics.
• A partir de SQL Server 2016 Release Candidate (RC0),
puede utilizar Column Store Index para real-time
analytics en el operational workload.
12. Razones por las Column Store Index son tan
rápidos
17
• Las columnas almacenan valores del mismo dominio y
comúnmente tienen valores similares, lo que resulta en altas
tasas de compresión. Esto minimiza o elimina cuellos de
botella de IO en el Sistema, al tiempo que reduce
significativamente el consumo de memoria.
• Las altas tasas de compresión mejoran el rendimiento de
consultas mediante el uso de una cantidad de memoria más
pequeña. A su vez, el rendimiento de consulta puede mejorar
porque SQL Server puede realizar más operaciones de
consultas y de datos en memoria.
• La ejecución por lotes mejora el rendimiento de consulta, por
lo general 2-4x, mediante el procesamiento de múltiples filas
a la vez.
• Consultas seleccionan a menudo sólo unas pocas columnas
de una tabla, lo que reduce el IO Total de los medios físicos.
13. ¿Cuándo debo utilizar un Column Store
Index?
18
• Utilizar un clúster Column Store Index para
almacenar tablas de hechos y grandes tablas de
dimensiones para las cargas de trabajo de
datawarehouse. Esto mejora el rendimiento de
las consultas y la compresión de datos hasta 10
veces.
• Utilice un nonclustered columnstore index para
hacer real-time análisis en un OLTP.
14. Columstore Indexes
• Es como si cada columna tiene su propio índice.
• En SQL Server 2012:
• Solo soporta Nonclustered
• Provoca que la tabla quede de sólo lectura
• En SQL Server 2014:
• Se incopora el Clustered columnstore y es
actualizable
• Compresión masiva (60-90%)
• El Nonclustered todavía es read-only
15. Restricciones de SQL Server 2014
Tipos de datos:
ntext, text, and image, vardecimal, varchar(max) and nvarchar(max),
rowversion (and timestamp), sql_variant, CLR types (hierarchyid and
spatial types), xml, uniqueidentifier
Page/Row compression
Replication
Change Tracking, Change Data Capture
Filestream
Enterprise Edition only
16. Columstore Indexes en SQL 2016
• Nonclustered CS indexes ahora es actualizable, se
pueden filtrar
• Clustered CS indexes puede ser utilizados para
construer índex b-tree sobre ellos
• Esto mejora la concurrencia con el bloqueo de filas
• Mejor rendimiento para:
• Agregacios (MIN, MAX, SUM, COUNT, AVG)
• String Predicate (myFieldName LIKE '% foo')
• Mejor concurrencia (soporte snapshot isolation)
• Es soportado en ambientes de AlwaysOn Availability
Group secondary replicas
• Se obtienen mejores resultados de reorganización
de índices (elimina las filas eliminadas, menos
presión de la memoria)
17. • NCCI actualizable
• In-Memory OLTP +
Column-store
• Batch Mode Scans más
rápidos gracias al uso
de instrucciones de
vectores del CPU
• Dynamic Aggregate
pushdown
• PK/FK enforcement
• Offload Reporting to
AlwaysOn Secondary
Replica
18. ¿Cómo elijo entre una rowstore índice y un
Column Store Index?
19
• Rowstore Index tienen mejor rendimiento en las
consultas hacen seek en los datos, la búsqueda de
un valor determinado, o para realizar consultas
sobre un pequeño rango de valores. Utilice
rowstore index con cargas de trabajo
transaccionales ya que tienden a requerir
usualmente table seeks en lugar de table scans.
• Column Store Index da alto rendimiento para
consultas analíticas que escanean grandes
cantidades de datos, especialmente en tablas
grandes. Utilice Column Store en Datawarehouse y
analytics workloads, especialmente en las tablas de
hechos, ya que tienden a requerir escaneos
completos de tabla en lugar de table seek.
19. Puedo combinar rowstore y Column Store en
la misma Tabla
20
• Sí. Comenzando con SQL Server 2016 Release
Candidate (RC0), se puede crear un updatable
nonclustered columnstore index en un rowstore table.
• Los Column Store Index almacenan una copia de las
columnas elegidas, así que se necesita espacio adicional
de almacenamiento, pero se comprimirá en un
promedio de 10 veces.
• Al hacer esto, puede ejecutar analytics en el Column
Store Index y transacciones en el rowstore index al
mismo tiempo.
• El column store se actualiza cuando cambian los datos
en la tabla rowstore, por lo que ambos índices están
trabajando con los mismos datos.
20. ¿Puedo combinar rowstore y Column Store
en la misma Tabla
21
• Comenzando con SQL Server 2016 Release Candidate
(RC0), puede tener uno o más nonclustered rowstore
indexes on a columnstore index.
• Al hacer esto, puede realizar table seeks eficientes en el
utilizando column store.
• Otras opciones están disponibles también. Por ejemplo,
se puede hace un enforce primary key constraint al
utilizar un UNIQUE constraint en la table rowstore.
• Puesto que non-unique value fallará su inserción en el
rowstore, SQL Server no puede insertar el valor en el
column store.
21. Columnstore Indexes for Data Warehousing
23
• SQL Server 2016 Release Candidate (RC1) presenta
estas mejoras de rendimiento en el column store
• AlwaysOn soporta querying a columnstore index on a
readable secondary replica
• Múltiples conjuntos de resultados activos (MARS).
• Una nueva vista de administración dinámica
sys.dm_db_column_store_row_group_physical_stats
(Transact-SQL) proporciona información sobre el
rendimiento de resolución de problemas a nivel de grupo
de filas.
• El operador SORT y DISTINCT se ejecuta en modo batch.
• DISTINCT operación múltiple se ejecuta en modo batch.
22. Column StoreCaracterística Índice
SQL Server
2012
SQL Server
2014
SQL Server
2016 (CTP2)
Base de datos
SQL Azure
la ejecución por lotes para las consultas de subprocesos múltiples sí sí sí sí
la ejecución por lotes para las consultas de un único subproceso sí sí
opción de compresión de archivos. sí sí sí
El aislamiento de instantánea y lectura cometido aislamiento de instantánea sí sí
Especificar Column Storeíndice al crear una tabla. sí sí
Siempre soportes Column Store Index. sí sí sí sí
AlwaysOn soportes secundarios legibles sólo lectura de columnas índices. sí sí sí sí
Siempre soportes secundarios legibles actualizable Column Store Index. sí
Sólo lectura índice de Column Storeno agrupado en montón o árbolB. sí sí sí
1
sí
1
actualizable no agrupado Column Storeíndice en montón o árbolB sí sí
btree índices adicionales permitidos en un montón o árbolB que tiene un índice de almacén
de columnas.
sí sí sí sí
índice de Column Storeagrupadas actualizable. sí sí sí
Índice árbolB en un índice de Column Storeen clúster. sí sí
Column Storeíndice en una tabla de memoria optimizado. ¡Sí!
No agrupado índice de Column Storedefinición es compatible con el uso de una condición
filtrada.
sí sí
Comparacion de Versiones
27. Qué es inMemory OLTP en SQL Server 2014+
29
• Un totalmente nuevo, renovado motor para el
almacenamiento de datos, co-located en la misma base
de datos con el motor existente
• Creado para dar soporte a escenarios y casos específicos
• La terminología puede ser confusa
• Tabla Tradicionales: Home - On-Disk, pero idealmente en cache
In-Memory
• Tablas In-Memory: Home - In-Memory: pero respaldado en On-
Disk Structures
• Si tiene suficiente memoria RAM, On-Disk Tables
también se encuentran en la memoria
• Sin embargo, la aplicación es muy muy diferente
• InMemory tables es fácil de utilizar pero hay que saber
cuando aplica
28. Introducción a InMemory OLTP
• ¿Dónde estamos gastando más tiempo de ejecución?
• Estos son los resultados de los análisis de Microsoft.
I/O, Thread
Management
Storage Engine Relational Engine
Communication
Stack
10% 80% 10%
Access Methods,
Transaction, Lock, Log,
Managers
T-SQL Interpreter, Query
Execution, Expressions
29. Introducción a OLTP en memoria
• Hekaton Proyecto - Palabra griega ἑκατόν
(houndred).
• El objetivo es mejorar el rendimiento en 100x.
• Estrategia tradicional se basa en las estructuras en los datos
almacenados en el disco.
• Al utilizar plenamente las capacidades de memoria
podemos tener estructuras más simples.
• Disponible a partir de SQL Server 2014.
• Muy mejorada en SQL Server 2016.
30. In-memory engine en SQL 2016
32
Velocidad de las consultas 100x y
la compresión de datos
significativos con
In-Memory ColumnStore
Hasta 30 veces más rápido
procesamiento de transacciones con
In-Memory OLTP
Las consultas más
rápidas
IN-MEMORY DW
Las transacciones más
rápidas
IN-MEMORY OLTP
31. Por qué Hekaton ¿es más rápido?
• Elimina locks y latching.
• Aplica Optimistic model
32. Por qué Hekaton ¿es más rápido?
• Los objetos compilados.
• Todos los pasos para interpretar el código se evitan.
33. In-memory OLTP
SQL Server Integration
• Same manageability,
administration &
development experience
• Integrated queries &
transactions
• Integrated HA and
backup/restore
Main-Memory
Optimized
• Optimized for in-memory
data
• Indexes (hash and range)
exist only in memory
• No buffer pool, B-trees
• Stream-based storage
T-SQL Compiled to
Machine Code
• T-SQL compiled to machine
code via C code generator
• Invoking a procedure is just
a DLL entry-point
• Aggressive optimizations @
compile-time
Steadily declining memory
price, NVRAM
Many-core processorsStalling CPU clock rate TCO
Hardware trends Business
Hybrid engine and
integrated experience
High performance data
operations
Efficient business-logic
processing
Customer
Benefits
ArchitecturalPillarsDrivers
High Concurrency
• Multi-version optimistic
concurrency control with full
ACID support
• Core engine uses lock-free
algorithms
• No lock manager, latches or
spinlocks
Frictionless scale-up
34. Aplicación de cliente
Tabular Data Stream (TDS) Handler / Administrador de Sesiones
Ejecución de T-SQL
Buffer Pool para tablas
e índices
Parser,
Catalog,
Optimizer
InMemory
Native Compiler
Motor de almacenamiento
para tablas e índices de
optimizadas para memoria
Nativas Native
Compiled Stored
Procedures Schema
Sqlserv.exe
Memory Optimized
Table Filegroup
Transaction Log Data Filegroup
DLL generado
Componente
InMemory
Componente SQL
existente
Checkpoint Files / Recovery
Query
interoperability
Arquitectura
35. Implementación física
(Técnicamente el cambio está en el software!)
39
• In-Mem data structures coexistente en la base
de datos con los On-Disk structures
• Los datos se almacenan en la memoria RAM, y
una copia de seguridad en Delta Filies y
Transaction Logs
• Delta files se almacenan como filestream storage
• El registro de transacciones es el mismo de siempre
(con una utilización más liviana)
• Tablas e índices están muy acoplados
• MVCC (Multi-Valued Concurrency Control) se
utliza para aislamiento
36. Creación de objetos de almacenamiento -
Tablas
40
• La sintaxis es la misma que en el disco, con algunos
ajustes adicionales
• Existen opciones de durabilidad
• Individual In-Mem Table: SCHEMA_ONLY or
SCHEMA_AND_DATA
• Database level for transactions: Delayed (también para on-
disk tables)
• Es básicamente Asynchronous Log Writes
• Existe otras restricciones...
• Rowsize limitado a 8060 bytes (Enforced at Create Time)
• No se permiten todos los tipos de datos (LOB
types,CLR,sql_variant, datetimeoffset, rowversion)*
• No check constraints *
• No foreign keys *
• Just one unique index per table *
• Cada Durable Table (SCHEMA_AND_DATA) debe
tener un unique index/ primary key
37. Cómo manejar tipos no soportados...
41
• Digamos que tiene una tabla con 10 columnas, pero
1 no está permitido en una tabla en memoria
• En primer lugar: Pregúntate si la tabla realmente se
ajusta a los criterios
• En segundo lugar: Si es así, considere la partición
vertical
• CREATE TABLE In_Mem (KeyValue, Column1, Column2,
Column3)
CREATE TABLE On_Disk (KeyValue, Column4)
• Nota: 2016 permite LOB (varbinary(Max),
nvarchar(Max), varchar (max)) pero todavía es algo
que se puede tener en cuenta, debido a que la
memoria no es gratis...
38. Creación de objetos de almacenamiento - la
creación del índice
42
• Sintaxis está en el CREATE TABLE
• Los índices se vinculan directamente a la tabla
• 8 max índices por tabla
• Sólo un índice único permitido (the primary key) *
• Los índices no se persisten, pero se reconstruyen en el
reinicio
• Dos tipos
• Hash
• Ideal para las búsquedas de una sola fila
• tamaño fijo, se elige el número de recipientes de hash (aprox 1-
2 * # de valores únicos http://msdn.microsoft.com/en-
us/library/dn494956.aspx)
• Bw Tree
• Lo mejor para búsquedas por rango
• Muy similar a una BTree índice como usted (con suerte) lo sepa,
pero optimizado para MVCC y la conexión puntero a la tabla
39. Estructura física
43
• registro de datos básicos para una fila
• Header
Begin Timestamp End Timestamp StatementId IndexCount IndexPointers ...
1
2
3
8
Record Header Data For Columns (Payload)
40. Tamaño de las tablas en memoria
• SQL Server 2014
Tamaño de las durable tables en una base de datos <=
256 GB
• SQL Server 2016
• Soporta 2 TB de durable tables en la base de datos
41. Seguridad (TDE)
• SQL Server 2014
• No hay soporte para TDE.
• Solo tiene que elegir: rendimiento o seguridad?
• SQL Server 2016
• Admite el cifrado de datos transparente.
• Ahora usted tiene rendimiento y seguridad
42. Escalado de almacenamiento
• SQL Server 2014
• Escalabilidad limitada: hasta 2 sockets / 64 núcleos.
• Cuanto más núcleos, más log records son creados.
• Sólo hay un hilo " Offline Checkpoint ".
Single Offline Checkpoint Thread
Del Tran2
(TS 450)
Del Tran3
(TS 250)
Insert into
Hekaton T1
Log in SQL
Table
Del Tran1
(TS150)
SQL Transaction log
disk
To update DATA
and DELTA files.
43. Escalado de almacenamiento
• SQL Server 2016
• No más límites!
• Ahora hay múltiples hilos " Offline Checkpoint " por
cada contenedor.
Offline Checkpoint Thread
Del Tran2
(TS 450)
Del Tran3
(TS 250)
Insert into
Hekaton T1
Log in SQL
Table
Del Tran1
(TS150)
SQL Transaction log
disk
Offline Checkpoint ThreadOffline Checkpoint Thread
44. Desarrollo
• SQL Server 2014
• No se permiten modificaciones!
• Afinamiento de la base de datos
• En respuesta a los cambios en los patrones de datos.
• Desarrollo de aplicaciones / modificación.
• Métodos ágiles de desarrollo / iterativos.
• Necesidad de ser capaz de modificar el esquema de base de
datos.
45. Desarrollo
• SQL Server 2016
• ALTER es sportado!!
• ALTER PROC y sp_recompile soportado
• ALTER TABLE
• add/alter/drop column/constraint
• ALTER INDEX
• Add/drop index supported
• Change HASH index bucket_count through index REBUILD
46. Desarrollo
• SQL Server 2016
• Todavía hay algunas limitaciones ...
• ALTER TABLE es una operación fuera de línea; requiere
memoria 2X
• sp_rename sin embargo, no está soportado
47. Cambio en procesamiento de consultas
• SQL Server 2014
• Planes paralelos se utilizan para las tablas de en
memoria
• Optimizado para OLTP.
• Si se une a una tabla optimizada para memoria con
un Column Store utilizará DOP = 1.
• Se pierde el beneficio del ColumnStore
48. Cambio en procesamiento de consultas
• SQL Server 2016
• Planes paralelos ahora son compatibles!
• Ahora usted puede tener el beneficio de Column
Store mientras hace join con Memory Optimized
Tables.
• Análisis en tiempo real son ahora posibles, más
velocidad!
49. T-SQL Soportado
• SQL 2016
• Más fácil convertir las aplicaciones existentes!
• Ahora es compatible con:
• {LEFT|RIGHT} OUTER JOIN
• Disjunction (OR, NOT)
• UNION [ALL]
• SELECT DISTINCT
• Subqueries (EXISTS, IN, scalar)
• FOREIGN KEY
• CHECK
• UNIQUE constraints and indexes
• Nested Stored procedures (EXECUTE)
• Natively compiled scalar UDFs
• Indexes on NULLable columns
50. T-SQL Soportado
• SQL 2016
• Ahora es compatible con:
• DML Triggers are now supported.
• AFTER triggers, natively compiled.
51. Migración / Manejabilidad
• SQL 2016
• En SQL Server 2014 existe una limitación de collation
• Ahora soportan todas las collations.
• Non-BIN2 collations en index key columns
• Non-Latin code pages para (var)char columns
• Non-BIN2 collations para comparación y ordenamiento
52. Resumen de mejoras en SQL 2016
• Tamaño máximo de tabla en memoria pasa de 256MB-> 2 TB
• Collations además BIN2 permitieron columnas en los índices
(aconsejado que no se desempeñan tan bien)
• ALTER TABLE se puede utilizar en las tablas de memoria para
agregar, eliminar o alterar las columnas, o para agregar, eliminar
o reconstruir los índices.
• ALTER PROCEDURE se puede usar en forma nativa compilado
procedimientos almacenados
• Procedimientos compilados de forma nativa permite sintaxis adicional
(LEFT JOIN, SELECT DISTINCT, UNION, todas las funciones
matemáticas)
• Permite escalar con mayor cantidad de sockets
• AlwaysOn replicas ven in-memory cambios de datos “undelayed”.
• Mejor garbage collection
53. Mejoras en En memoria OLTP
Característica / Límite SQL Server 2014 SQL Server 2016
El tamaño máximo de la tabla duradera 256 GB 2 TB
LOB (varbinary (max), [n] varchar (max)) No soportado Soportado*
Cifrado de datos transparente (TDE) No soportado Soportado
Desconectado Checkpoint Hilos 1 1 por contenedor
ALTER PROCEDURE / sp_recompile No soportado Apoyado (totalmente en línea)
llamadas a procedimientos anidados nativas No soportado Soportado
De forma nativa-compilado UDF escalares No soportado Soportado
ALTER TABLE
No soportado
(DROP / re-crear)
admite de forma parcial
(fuera de línea - detalles a continuación)
disparadores DML No soportado
admite de forma parcial
(DESPUÉS, de forma nativa compilado)
Los índices de las columnas anulables No soportado Soportado
colaciones no BIN2 en columnas de clave de índice No soportado Soportado
No latino páginas de códigos para [var] columnas
CHAR
No soportado Soportado
la comparación no BIN2 / clasificación en módulos
nativos
No soportado Soportado
Llaves extranjeras No soportado Soportado
Compruebe / Restricciones de unicidad No soportado Soportado
Paralelismo No soportado Soportado
OUTER JOIN, O, NO, UNION [ALL], distinto, EXISTE,
EN
No soportado Soportado
Múltiples conjuntos de resultados activos (MARS)
(Medios mejor soporte de Entity Framework).
No soportado Soportado
Diseñador de tablas SSMS No soportado Soportado
Fuente: http: //sqlperformance.com/2015/05/sql-server-2016/in-memory-OLTP-enhancements
54. CREATE DATABASE HowInMemObjectsAffectDesign
ON PRIMARY
( NAME = N'HowInMemObjectsAffectDesign', FILENAME =
N‘Drive:HowInMemObjectsAffectDesign.mdf' , SIZE = 2GB ,
MAXSIZE = UNLIMITED, FILEGROWTH = 10% ),
FILEGROUP [MemoryOptimizedFG] CONTAINS
MEMORY_OPTIMIZED_DATA
( NAME = N'HowInMemObjectsAffectDesign_inmemFiles',
FILENAME = N'Drive:InMemfiles' , MAXSIZE = UNLIMITED)
LOG ON
( NAME = N'HowInMemObjectsAffectDesign_log', FILENAME =
N'Drive:HowInMemObjectsAffectDesign_log.ldf' , SIZE = 1GB ,
MAXSIZE = 2GB , FILEGROWTH = 10%);
GO
Permitir in memory tables en la base de datos
54
Agregar un filegroup para
almacenar los delta files
55. Creación de Tabla Memory Optimized Permanent
55
CREATE TABLE Customers.Customer
(
CustomerId integer NOT NULL IDENTITY ( 1,1 ) ,
CustomerNumber char(10)
COLLATE Latin1_General_100_BIN2 NOT NULL,
CONSTRAINT XPKCustomer PRIMARY KEY NONCLUSTERED
HASH ( CustomerId) WITH ( BUCKET_COUNT = 50000),
INDEX CustomerNumber NONCLUSTERED ( CustomerNumber)
) WITH ( MEMORY_OPTIMIZED = ON ,
DURABILITY = SCHEMA_AND_DATA)
go
56. Creación de Tabla Memory Optimized Permanent
CREATE TABLE Customers.Customer
(
CustomerId integer NOT NULL IDENTITY ( 1,1 ) ,
CustomerNumber char(10)
COLLATE Latin1_General_100_BIN2 NOT NULL,
CONSTRAINT XPKCustomer PRIMARY KEY NONCLUSTERED
HASH ( CustomerId) WITH ( BUCKET_COUNT = 50000),
INDEX CustomerNumber NONCLUSTERED ( CustomerNumber)
) WITH ( MEMORY_OPTIMIZED = ON ,
DURABILITY = SCHEMA_AND_DATA)
go
56
Character column debe ser binario
para index/compare en código
nativo
Tabla es durable
Hash Index usado para
Primary Key. Estimated
Rows in Table 25000
Indicar que es tabla en
memoria
Bw Tree Index sobre
Customer Number
57. El acceso a los datos utilizando el código
compilado (Nativo)
68
• En lugar de ser interpretado, el procedimiento
almacenado se compila a código máquina
• Sintaxis limitada
• Sintaxis permitida
• http://msdn.microsoft.com/en-
us/library/dn452279.aspx