Transcript
• 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
Agenda General
DevOptimización de consultas
AdminOptimización de
Servidores
SSISOptimización de paquetes ETLs
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
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
bú
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
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
bú
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
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
bú
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
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
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;
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.
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…..
Row_number()Puedes hacer join con una subconsulta que particiona la información de la tabla histórica
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.
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
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
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.
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';
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%'
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.
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*" ')
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.
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*
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
• Correo: Juliancastiblancop@Gmail.com• Skype: Julian.castiblancop• Correo corporativo: jcastiblanco@synergytpc.com
Julián
Castiblanco
Gracias !!!
top related