2. • 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
4. 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
5.
6. Ciclo de vida de una transacción SELECT
Mdf
file
Ldf
file
Motor de almacenamiento
Gestorde
transacción
Métodode
acceso
Gestordel
búfer
Motor Relacional (procesador de
consultas)
optimizador
Analizador
desintaxis
Ejecutorde
consultas
Capa de
Protocolo
SIN – SQL
Server
Network
Interfaz
Buffer Pool
• Plan Caché
• Caché de datos
TCP/IP
Shared
memory
Name pipes
VIA
TDS
SQLcommand
Consulta de
árbol *
Plan de ejecución
Profesional SQL Server 2012 Internals & Troubleshooting. Wrox
7. Ciclo de vida de una transacción SELECT
Mdf
file
Ldf
file
Motor de almacenamiento
Gestorde
transacción
Métodode
acceso
Gestordel
búfer
Motor Relacional (procesador de
consultas)
optimizador
Analizador
desintaxis
Ejecutorde
consultas
Capa de
Protocolo
SIN – SQL
Server
Network
Interfaz
Buffer Pool
• Plan Caché
• Caché de datos
TCP/IP
Shared
memory
Name pipes
VIA
TDS
Profesional SQL Server 2012 Internals & Troubleshooting. Wrox
8. Ciclo de vida de una transacción UPDATE
Mdf
file
Ldf
file
Motor de almacenamiento
Gestorde
transacción
Métodode
acceso
Gestordel
búfer
Motor Relacional
(procesador de consultas)
optimizador
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
Dirty
Page
9. Memoria del Sistema
Es la memoria RAM
Memoria
Física
• Actualmente WS2012 4TB
VAS: Virtual Address Space
Memoria
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
10. 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 CURSOR
FOR SELECT * FROM Purchasing.Vendor
OPEN vend_cursor
FETCH NEXT FROM vend_cursor;
11. 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.
12. 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…..
15. 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.
16. Consultas multitabla: Como puedo
optimizarlas???
Union All Union
Cuando 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
17. 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.pacientes2
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
-- 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
END
GO
18. 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.
19. 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)
OUTPUT
newid(),'Sales.MyOrders',('orderid:'+cast(inser
ted.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, orderdate
FROM Sales.Orders
WHERE shipcountry = N'Norway';
20. 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.pacientes2
WHERE nombre LIKE '%Felipe%M%'
21. 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.
22. 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.pacientes2
WHERE CONTAINS((documento,nombre),N'"Felipe*"
AND "M*" ')
23. 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.
24. 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*
25. 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