como perder un servidor en 10 consultas | solidq summit 2012

30
Como perder un servidor en 10 consultas Javier Loria Mentor [email protected]

Upload: solidq

Post on 05-Jul-2015

268 views

Category:

Technology


7 download

DESCRIPTION

Página oficial del SolidQ Summit: http://summit.solidq.com/madrid/2013/ Basado en la película "Cómo perder a un chico en 10 días", esta sesión, cómica pero no romántica, nos resumirá algunos de las cosas que como desarrolladores tendemos a hacer mal, y que perjudican nuestras relaciones con los servidores de base de datos. Empezaremos con el reconocido “SELECT *” y avanzaremos a tópicos mas descubridores.

TRANSCRIPT

Page 1: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Como perder un servidor en 10 consultas

Javier Loria Mentor

[email protected]

Page 2: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Javier Loría

Mentor

Arquitecto/ Diseñador Software

Autor

Page 3: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012
Page 4: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Select *

Page 5: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Select *

Malos planes de acceso

Tránsito en la red

Particularmente (Imágenes, FileStream, etc)

Mantenimiento de las tablas (Replicación)

Page 6: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Falta de WHERE

Page 7: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Falta de WHERE

Malos planes de acceso

Tránsito en la red

Particularmente (Imágenes,

FileStream, etc)

Page 8: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012
Page 9: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

ORDER BY

Page 10: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

ORDER BY

ORDER BY: No usar si no se requiere

Ordenar en el cliente

ORDER BY ocurre:

• ORDER BY - GROUP BY - SELECT DISTINCT – UNION

No asumir el ORDER BY

Page 11: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Usar el UNION en vez de UNION ALL

Page 12: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Usar el UNION en vez de UNION ALL

Union: Remueve Duplicados

Union ALL: NO Remueve Duplicados

UNION Equivale SELECT DISTINCT …

Planes de Acceso

Page 13: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012
Page 14: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Cursores y Loops

Page 15: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Cursores y Loops

Cada FETCH es como un SELECT

Usan grandes cantidades de Memoria

Causan problemas de bloqueos

Consumo de ancho de banda

Page 16: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

SCALAR Functions

Page 17: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

SCALAR Functions

Una ejecución por fila

• SELECT y WHERE

Interpretadas

• Múltiples comandos

“Mono-hilo”

• Planes de acceso

Page 18: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012
Page 19: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Bloqueos

Page 20: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Bloqueos

Transacciones cortas

Sin entrada de usuario

Sin Time Out

• SET LOCK_TIMEOUT

Page 21: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

NOLOCK

Page 22: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

NOLOCK

Evita el “Shared Lock”= No espero consistencia

Puede retornar la misma fila, varias veces

Puede brincarse filas commited

Tiende a producir INDEX SCAN, y otros efectos

colaterales

Page 23: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012
Page 24: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Consultas sin Estadísticas

Page 25: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Consultas sin Estadísticas

AUTO_CREATE y AUTO_UPDATE

WHERE o ON con campos calculados

Linked Servers

Difíciles de detectar

Page 26: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

No usar argumentos: “SARGABLE”

Page 27: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

No usar argumentos: “SARGABLE”

WHERE UPPER(Nombre)='JAVIER'

WHERE ISNULL(Nombre, '')=''

WHERE SUBSTRING(Nombre,1,4)='JAVI'

DateDiff(day,FechaOrden,GetDate()) >= 30

Page 28: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012
Page 29: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012
Page 30: Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Si quieres disfrutar de las mejores sesiones de

nuestros mentores de España y Latino América,

ésta es tu oportunidad.

http://summit.solidq.com/madrid/

Síguenos: