Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Post on 05-Jul-2015

270 views 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 of Como Perder un Servidor en 10 Consultas | SolidQ Summit 2012

Como perder un servidor en 10 consultas

Javier Loria Mentor

jloria@solidq.com

Javier Loría

Mentor

Arquitecto/ Diseñador Software

Autor

Select *

Select *

Malos planes de acceso

Tránsito en la red

Particularmente (Imágenes, FileStream, etc)

Mantenimiento de las tablas (Replicación)

Falta de WHERE

Falta de WHERE

Malos planes de acceso

Tránsito en la red

Particularmente (Imágenes,

FileStream, etc)

ORDER BY

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

Usar el UNION en vez de UNION ALL

Usar el UNION en vez de UNION ALL

Union: Remueve Duplicados

Union ALL: NO Remueve Duplicados

UNION Equivale SELECT DISTINCT …

Planes de Acceso

Cursores y Loops

Cursores y Loops

Cada FETCH es como un SELECT

Usan grandes cantidades de Memoria

Causan problemas de bloqueos

Consumo de ancho de banda

SCALAR Functions

SCALAR Functions

Una ejecución por fila

• SELECT y WHERE

Interpretadas

• Múltiples comandos

“Mono-hilo”

• Planes de acceso

Bloqueos

Bloqueos

Transacciones cortas

Sin entrada de usuario

Sin Time Out

• SET LOCK_TIMEOUT

NOLOCK

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

Consultas sin Estadísticas

Consultas sin Estadísticas

AUTO_CREATE y AUTO_UPDATE

WHERE o ON con campos calculados

Linked Servers

Difíciles de detectar

No usar argumentos: “SARGABLE”

No usar argumentos: “SARGABLE”

WHERE UPPER(Nombre)='JAVIER'

WHERE ISNULL(Nombre, '')=''

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

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

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: