SQL Server Rápido y Furioso
Alejandro Cordero
Database Consultant – Pythian Group
Correo electrónico: [email protected]
Twitter: @ale_corderocr
LinkedIn: https://cr.linkedin.com/in/alejandrocorderocr
BLOG: Sqlturbo.com
MCTS, CSM
Patrocinadores del SQL Saturday
Gold Sponsor
Bronze Sponsor
Geek Sponsor
Agenda







Configuración General SQL Server
Tablas Variables vrs Tablas Temporales
Búsqueda de textos – Sargabilidad
Query Hints
Indices Sugeridos y sin Usar
Programación “Set Based”
SQL2014 – In Memory
3
Configuración General
 CPU cores vrs Archivos de Tempdb.
PAGELATCH_UP, PAGELATCH_EX, or PAGELATCH_SH
4
Configuración General
 Crecimiento de los archivos de base de datos
Configuración General
 Memoria Máxima
Configuración General
 Organización en disco
TempDB
Datafile
Backups
Transaction log
Demo
 Configuremos una instancia de SQL Server
Tablas Variables vrs Tablas Temporales
 El estimado de líneas de información(tuplas)
es diferente, para las variables se estima 1
sola línea, para las temporales la estimación
es más cercana al contenido real de la tabla
 Declare @temp table(campo1 int, campo2 char(1))
 Create table #temp(campo1 int, campo2 char(1))
Demo
 Plan de Ejecución de tablas variables vrs
tablas temporales
Búsquedas de Texto
 Diferencias en el uso del operador like












Find date values in a certain year:
Non-sargable: SELECT ... WHERE EXTRACT(YEAR FROM date) = 2012
Sargable: SELECT ... WHERE date >= '2012-01-01' AND date < '2013-01-01'
Handling NULLs:
Non-sargable: SELECT ... WHERE COALESCE(FullName, 'John Smith') = 'John
Smith'
Sargable: SELECT ... WHERE (FullName = 'John Smith') OR (FullName IS NULL)
String prefix search:
Non-sargable: SELECT ... WHERE SUBSTRING(DealerName FROM 1 FOR 6) =
'Toyota'
Sargable: SELECT ... WHERE DealerName LIKE 'Toyota%'
String postfix search:
Non-sargable: SELECT ... WHERE Email LIKE '%wikipedia.org'
Sargable: SELECT ... WHERE REVERSE(Email) LIKE REVERSE('%wikipedia.org')
Demo
 Planes de ejecución en un like
Query HINTS






MAXDOP
NOLOCK
FORCESEEK
RECOMPILE
OPTIMIZE FOR UNKNOWN
MAX_GRANT_PERCENT – SQL Server
2016!
Parameter Sniffing
EXEC dbo.DisplayBillingInfo
@BeginDate = '2005-01-01',
@EndDate = '2005-01-03';
@begindate=‘2005-01- Plan 1
02’
@begindate=‘2006-01- Plan 2
02’
@begindate=‘2007-01- Plan 3
02’
Demo
 Probando Query Hints
Índices sugeridos y sin usar
 Revisando estadísticas de uso con
sys.dm_db_index_usage_stats
 Revisando sugerencias del motor de base de
datos con
sys.dm_db_missing_index_group_stats,
sys.dm_db_missing_index_details
 Tomar en cuenta último inicio del servicio de
SQL Server
Demo
 Scripts de revisión
Programación “Set Based”
 Pensar en la teoría de conjuntos
 Tratar siempre de aplicar una transacción a
un grupo de datos en lugar de uno a la vez
 Evitar iteraciones, ciclos, condicionales, etc.
 Usar vistas, agregaciones, funciones, etc
Demo
 Código hecho en set based programming vrs
código usual de aplicación (ejemplos TSQL)
In -memory
 Utilizar tablas in memory
Demo
 Comparativa de rendimiento, tabla normal vrs
In- Memory
Preguntas?
PREGUNTAS Y RESPUESTAS
[email protected]
Sqlturbo.com
Alejandro
@ale_corderocr
Evaluaciones
Evaluacion del evento
http://www.sqlsaturday.com/443/eventeval.aspx
Evaluacion de las charlas
http://www.sqlsaturday.com/443/sessions/sessionevaluation.aspx
Descargar

Document