Top Banner
26
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Carbura tusql sesion1_slideshare
Page 2: Carbura tusql sesion1_slideshare

• Ingeniero de Diseño & Automatización Electrónica• Especialista en Gerencia y Tecnologías de Información• MCT-MCSA-MCITP-MCTS en SQL SERVER• Synergy TPC SAS como consultor especializado en

bases de datos SQL Server

Julián

Castiblanco

Andrés

Useche

• Ingeniero de Sistemas• Especialista en Teleinformática• MCP SQL SERVER 2012• Terpel como ingeniero de infraestructura IT - DBA

Page 3: Carbura tusql sesion1_slideshare

Agenda General

DevOptimización de consultas

AdminOptimización de

Servidores

SSISOptimización de paquetes ETLs

Page 4: Carbura tusql sesion1_slideshare

Agenda

• Ciclo de vida de una transacción

• Manejo de memoria en SQL Server

• Cursores: la mejor solución para desgastar tu memoria

• Subconsultas dentro de la sentencia SELECT: existe otra forma de hacerlo?

• Consultas multitabla: Como puedo optimizarlas???

• Triggers: la solución más antigua para manejar auditoría

• Manejo de consultas sobre campos de texto

• Como medir el rendimiento de las consultas.

• Problemas de contención y tablas en memoria.

• Que viene en SQL Server 2014….?

• Otros casos de la vida real

Page 5: Carbura tusql sesion1_slideshare
Page 6: Carbura tusql sesion1_slideshare

Ciclo de vida de una transacción SELECT

Mdffile

Ldffile

Motor de almacenamiento

Ge

sto

r d

e tr

ansa

cció

n

Mét

od

o d

e

acce

so

Ge

sto

r d

el

fer

Motor Relacional (procesador de consultas)

op

tim

izad

or

An

aliz

ado

r d

e si

nta

xis

Ejec

uto

r d

e co

nsu

ltas

Capa de Protocolo

SIN – SQL Server

Network Interfaz

Buffer Pool

• Plan Caché

• Caché de datos

TCP/IPShared

memoryName pipes

VIA

TDS

SQLcommandConsulta de

árbol *

Plan de ejecución

Profesional SQL Server 2012 Internals & Troubleshooting. Wrox

Page 7: Carbura tusql sesion1_slideshare

Ciclo de vida de una transacción SELECT

Mdffile

Ldffile

Motor de almacenamiento

Ge

sto

r d

e tr

ansa

cció

n

Mét

od

o d

e

acce

so

Ge

sto

r d

el

fer

Motor Relacional (procesador de consultas)

op

tim

izad

or

An

aliz

ado

r d

e si

nta

xis

Ejec

uto

r d

e co

nsu

ltas

Capa de Protocolo

SIN – SQL Server

Network Interfaz

Buffer Pool

• Plan Caché

• Caché de datos

TCP/IPShared

memoryName pipes

VIA

TDS

Profesional SQL Server 2012 Internals & Troubleshooting. Wrox

Page 8: Carbura tusql sesion1_slideshare

Ciclo de vida de una transacción UPDATE

Mdffile

Ldffile

Motor de almacenamiento

Ge

sto

r d

e tr

ansa

cció

n

Mét

od

o d

e

acce

so

Ge

sto

r d

el

fer

Motor Relacional(procesador de consultas)

op

tim

izad

or

Analizador de sintaxis

Ejecutor de consultas

Capa de Protocolo

SIN – SQL Server Network

Interfaz

Buffer Pool

• Plan Caché

• Caché de datos

TDS

Lang. EventQTree

QP

DirtyPage

Page 9: Carbura tusql sesion1_slideshare

Memoria del Sistema

Es la memoria RAMMemoria

Física• Actualmente WS2012 4TB

VAS: Virtual Address SpaceMemoria

Virtual• El SO se encarga de asignar espacios de memoria en disco que direccionan

a un espacio en la RAM. Varios procesos pueden tener la misma Dirección en RAM

VIRTUAL MEMORY MANAGER

ARCHIVOS DE PAGINACIÓN DE

WINDOWS

Page 10: Carbura tusql sesion1_slideshare

Cursores: la mejor solución para desgastar tu memoria

http://msdn.microsoft.com/es-es/library/ms180169.aspx

Se Alojan en memoria, por lo cual pueden degradar el servicio no solo de SQL Server

sino de otros procesos en el servidor.

Problemas de Rendimiento. Procesar registros fila a fila es más costoso que

procesar en conjunto

El cursor bloquea los objetos al abrir el cursor. Lo cual puede generar WAITS y LOCKS

excesivos en los objetos

DECLARE vend_cursor CURSORFOR SELECT * FROM Purchasing.Vendor

OPEN vend_cursorFETCH NEXT FROM vend_cursor;

Page 11: Carbura tusql sesion1_slideshare

Subconsultas dentro de la sentencia SELECT: existe otra forma de hacerlo?

Es una forma rápida de mezclar agrupaciones contra valores propios de una columna

Permiten traer datos como el último registro, o el más reciente de tablas históricas

Genera una alta carga en el motor, porque se disparan consultas adicionales por cada fila

devuelta.

Page 12: Carbura tusql sesion1_slideshare

Caso de la vida real….

• Tengo que sacar en una consulta la información de todos mis clientes, con información agrupada de sus compras mensuales y adicionalmente información detallada del valor de su última compra…..

Page 13: Carbura tusql sesion1_slideshare

Row_number()Puedes hacer join con una subconsulta que particiona la información de la tabla histórica

Page 14: Carbura tusql sesion1_slideshare

Consultas multitabla: Como puedo optimizarlas???

holaDESPUÉSANTES

Page 15: Carbura tusql sesion1_slideshare

Caso de la vida real….

• Este procedimiento se demora tanto porque debe tomar la información de los clientes, mezclando la información contra cada una del tablas sucursales. Y entregar todo esto en una misma consulta.

Page 16: Carbura tusql sesion1_slideshare

Consultas multitabla: Como puedo optimizarlas???

Union All UnionCuando se está seguro que los subconjuntos de datos no están repetidos

Cuando se está seguro que los subconjuntos de datos no están repetidos

Page 17: Carbura tusql sesion1_slideshare

Triggers: la solución más antigua para manejar auditoría

Permite insertar operaciones antes, después o al momento

de ingresar información en una tabla específica

Se vuelve código poco administrable y mantenible

Aunque SQL Server soporta un grado de anidamiento de

32 disparadores.

-- =============================================-- Author:triggerdeprueba-- Create date: jcastiblanco-- Description:este trigger permite insertar la auditoria-- =============================================CREATE TRIGGER dbo.tgr_pacientes2

ON dbo.pacientes2AFTER INSERT,DELETE,UPDATE

ASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON;INSERT INTO tablaauditoria (descripcion),('alguna cosa')

-- Insert statements for trigger here

ENDGO

Page 18: Carbura tusql sesion1_slideshare

Caso de la vida real….

• Por circular 052 de la superfinanciera de Colombia necesitamos guardar los valores previos que se tenían del cliente, antes de realizar cualquier modificación sobre la información del cliente.

• Necesitamos guardar en la auditoría la información de hora, usuario y terminal desde el cual se realizaron cambios.

Page 19: Carbura tusql sesion1_slideshare

Triggers: la solución más antigua para manejar auditoría

La modificación de la auditoría es totalmente

personalizable

Solo se cargan los datos en memoria una vez

Es más fácil de administrar y mantener el código.

INSERT INTO Sales.MyOrders(custid, empid,orderdate)OUTPUTnewid(),'Sales.MyOrders',('orderid:'+cast(inserted.orderid as varchar(50))+' custid: '+cast(inserted.custid as varchar(50))),SUSER_SNAME(),APP_NAME() AS ApplicationName

INTO sales.auditTable (id,tabla,cambios,usuario,aplicacion)SELECT custid, empid, orderdateFROM Sales.OrdersWHERE shipcountry = N'Norway';

Page 20: Carbura tusql sesion1_slideshare

Manejo de consultas sobre campos de texto

Las consultas con comodines al iniciar la cadena genera un uso in adquado de los índices

Son bastantes pesadas a nivel de procesador y memoria

ram

Es un código fácil de utilizar

SELECT * FROM dbo.pacientes2WHERE nombre LIKE '%Felipe%M%'

Page 21: Carbura tusql sesion1_slideshare

Caso de la vida real….

• Mi sistema el cual es altamente transaccional hace consultas por nombre del cliente. El usuario algunas veces consulta el nombre completo, otras solo el apellidos, o nombre y apellido. Es imposible manejar la consulta sin comodines.

Page 22: Carbura tusql sesion1_slideshare

Manejo de consultas sobre campos de texto

Es un servicio especializado para resolver las consultas

Sobrepasa la funcionlidad del like, permitiendo hacer

búsquedas de texto conjugado

Esta acoplado totalmente al motor por lo cual minimiza el impacto de administración.

SELECT * FROM dbo.pacientes2WHERE CONTAINS((documento,nombre),N'"Felipe*" AND "M*" ')

Page 23: Carbura tusql sesion1_slideshare

Caso de la vida real….

Esta base de datos es una locura en vez de mejorar al haber incrementado el número de procesadores, ahora tenemos mayores problemas de bloqueos.

Page 24: Carbura tusql sesion1_slideshare

Que viene en SQL Server 2014

Cambia el paradigma de Páginas de 8K

No es lo mismo que el antiguo DBCC PINTABLE

El motor de tablas en memoria está totalmente

integrada al motor relacional

Introducing Microsoft SQL Server 2014. Microsoft Press*

Page 25: Carbura tusql sesion1_slideshare

Bibliografía y Sitios de interés

• Professional SQL Server 2012 Internals and Troubleshooting

• Professional SQL Server 2008 Internals and Troubleshooting

• Microsoft SQL Server 2012 Internals

• Diagnosing and Resolving Latch Contention on SQL Server

• Pro Full-Text Search in SQL Server 2008

• Introducing Microsoft SQL Server 2014. Microsoft Press

• Training Kit (Exam 70-461): Querying Microsoft SQL Server 2012

Page 26: Carbura tusql sesion1_slideshare

• Correo: [email protected]• Skype: Julian.castiblancop• Correo corporativo: [email protected]

Julián

Castiblanco

Gracias !!!