Arquitectura rendimiento y performance Tuning del motor relacional del SQL Server 08/05/2009 1 Ing. Jose Mariano Alvarez [email protected]www.sqltotalconsulting.com Arquitectura rendimiento y performance Tuning del motor relacional del SQL Server Filegroups un archivo o filegroup puede ser usado solo por una base de datos Un archivo puede ser miembro de un solo filegroup. El log no es parte de ningún filegroup y no puede ser parte de ningún archivo. Un archivo es una unidad de paralelismo y de recuperación. Los filegroups permiten asignar objetos a archivos especificos. 2 Filegroups (2) Las tablas solo se pueden asignar a un filegroup. Se puede crear varios archivos para que use en paralelo los discos. Crea un thread por cada archivo. Si el RAID es por hardware puede que no mejore 3 Filegroups (3) Permite realizar stripping Usar un archivo por disco físico si Disk Queue length <= 3 Verificar que se produce una mejora si se usa Separar los índices no clustered de las tablas en conjuntos de discos separados Combinar Hardware con filegroups separando carga 4 Indices Páginas 6
18
Embed
Arquitectura Rendimiento y Performance Tuning Del Motor Relacional Del SQL Server Parte 2
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
Arquitectura rendimiento y performance
Tuning del motor relacional del SQL Server
08/05/2009
1
I ng . J os e M ar iano A lvarezj o s e . m a r i a n o . a l va r e z @g m a i l . c o m
ww w . s q l t o t a l c o n s u l t i n g . c o m
Arquitectura rendimiento y
performance Tuning de l motor
relacional del SQL Server
Filegroups
un archivo o filegroup puede ser usado solo por una base de datos
Un archivo puede ser miembro de un solo filegroup.
El log no es parte de ningún filegroup y no puede ser parte de ningún archivo.
Un archivo es una unidad de paralelismo y de recuperación.
Los filegroups permiten asignar objetos a archivos especificos.
2
Filegroups (2)
Las tablas solo se pueden asignar a un filegroup.
Se puede crear varios archivos para que use en paralelo
los discos.
Crea un thread por cada archivo.
Si el RAID es por hardware puede que no mejore
3
Filegroups (3)
Permite realizar stripping
Usar un archivo por disco físico si Disk Queue length <= 3
SET TRANSACTION ISOLATION LEVEL READ COMMITEDSELECT …
UPDATE …INSERT …
…
READ UNCOMMITTED
Especifica que las instrucciones pueden leer filas que han
sido modificadas por otras transacciones pero todavía no
se han confirmado.
41
READ COMMITTED
Especifica que las instrucciones no pueden leer datos que
hayan sido modificados, pero no confirmados, por otras
transacciones. Esto evita las lecturas no actualizadas.
Otras transacciones pueden cambiar datos entre cada
una de las instrucciones de la transacción actual, dando
como resultado lecturas no repetibles o datos ficticios.
Esta opción es la predeterminada para SQL Server.
42
Arquitectura rendimiento y performance
Tuning del motor relacional del SQL Server
08/05/2009
8
REPEATABLE READ
Especifica que las instrucciones no pueden leer datos que
han sido modificados pero aún no confirmados por otras
transacciones y que ninguna otra transacción puede
modificar los datos leídos por la transacción actual hasta
que ésta finalice.
43
SERIALIZABLE
Las instrucciones no pueden leer datos que hayan sido modificados, pero aún no confirmados, por otras transacciones.
Ninguna otra transacción puede modificar los datos leídos por la transacción actual hasta que la transacción actual finalice.
Otras transacciones no pueden insertar filas nuevas con valores de clave que pudieran estar incluidos en el intervalo de claves leído por las instrucciones de la transacción actual hasta que ésta finalice.
44
SNAPSHOT (2005)
Especifica que los datos leídos por cualquier instrucción de una transacción vean la versión coherente, desde el punto de vista transaccional, de los datos existentes al comienzo de la transacción. La transacción únicamente puede reconocer las modificaciones de datos confirmadas antes del comienzo de la misma. Las instrucciones que se ejecuten en la transacción actual no verán las modificaciones de datos efectuadas por otras transacciones después del inicio de la transacción actual. El efecto es el mismo que se obtendría si las instrucciones de una transacción obtuviesen una instantánea de los datos confirmados tal como se encontraban al comienzo de la transacción.
45
Equiva lencia nivel de a is lamiento
Locking H ints
R E A D U N C O M M I TTE D
R E A D C O M M I TTE D
R E P E A TA B L E R E A D
S E R I A L I ZA B L E
N O L O C K o R E A D U N C O M M I TTE D
R E A D C O M M I TTE D
R E P E A TA B L A R E A D
H O L D L O C K
46
SELECT * FROM MI_TABLA WITH (NOLOCK)
Modos de las transacciones
47
Modo
Implícito
Explícito
(default)
Transacción Implícita
Transacción Explícita
SET IMPLICIT_TRANSACTIONS { ON / OFF }
Características
Tipo de lockeo adquirido (Lock mode)
Unidad de datos lockeada (Lock resource)
Duración del lockeo (Lock duration)
48
Estos datos se mantienen en la
pseudo-tabla SysLockInfo
Arquitectura rendimiento y performance
Tuning del motor relacional del SQL Server
08/05/2009
9
Tipos de locks adquiridos
(Lock mode)
49
S hare – „S ‟
E xc lus ive – „X‟
U pdate – „U ‟
I n tent – „ IS ‟ / „ I X‟ / „ IU ‟
Unidad de datos lockeada (Lock
resource) R o w
P a g e
E x t e n t
Ta b l e
I n d e x k e y
R a n g e i n d e x k e y
50
Los Extents se lockean en operaciones de grow de tablas o índices.Tienen lugar dependiendo de la existencia o no de un clustered index.
Duración de los locks
51
Lock
Mode
Read
Committed
Repeatable
Read
Serializable
Share Hasta que los
datos se leen y
procesan
Hasta el final de la
transacción
Hasta el final de la
transacción
Update Hasta que los datos se
leen y procesan, a
menos que sea
escalada a Exclusive y
duran hasta el final de la
transacción
Hasta el final de la
transacción
Hasta el final de la
transacción
A menos que sea
escalada a
Exclusive
Exclusive Hasta el final de la
transacción
Hasta el final de la
transacción
Hasta el final de la
transacción
sp_lock
52
EXEC sp_lock [ [ @spid_1] , [@spid_2] ]
EXEC sp_lock @@spid
Compatibil idad
53
Modo actualmente existente
Modo solicitado IS S U IX SIX X
Intent Share (IS) SI SI SI SI SI NO
Shared (S) SI SI SI NO NO NO
Update (U) SI SI NO NO NO NO
Intent Exclusive (IX) SI NO NO SI NO NO
Shared con Intent
Exclusive (SIX)SI NO NO NO NO NO
Exclusive NO NO NO NO NO NO
Otros t ipos de locks
B ulk Update y Schema
54
Lock
Bulk Update
Schema
Stability (Sch-S)
Modification (Sch-M)
Arquitectura rendimiento y performance
Tuning del motor relacional del SQL Server
08/05/2009
10
Range locks
Solamente aplica en el SERIALIZABLE ISOLATION LEVEL
Afecta un rango de claves sin incluir el inicio.
Ejemplo en T-SQL sería:NOMBRE >‟JORGE‟ AND NOMBRE <=
„JUAN‟
55
Escalamiento automático de locks
SQL Server escalará los locks que sean posibles cuando el uso de los mismos supere
el 40% de la memoria destinada a ellos
Para modificar esto utilizar sp_configure „locks‟, valor
Optimizer Hints
RowLock
PageLock
TabLock
TabLockX
56
Latches
Mantienen la consistencia de los datos mientras éstos son
leídos
Raramente se ven errores 844 y 845
Ver el artículo 310834 en http://support.microsoft.com
57
Controlando los locks
Niveles de aislamiento / ISOLATION LEVEL
SET LOCK_TIMEOUT (nuevo en SQL Server 7.0)
Error 1222 es time-out de lock pero no hace ROLLBACK !
Setear SET XACT_ABORT ON
READPAST Locking Hint (solo para SELECT)
58
Deadlocks
59
SQL Server
Databases
SPID 1
SPID 2
Error con deadlocks-
60
Server: Msg 1205, …
Transaction (Process ID xxx) was deadlocked with another process
and has been chosen as deadlock victim. Rerun the transaction.
SET DEADLOCK_PRIORITY { LOW / NORMAL /
@variable_char }
Arquitectura rendimiento y performance
Tuning del motor relacional del SQL Server
08/05/2009
11
Controlando los deadlocks
61
Utilizar el trace-flag
1204 para registrar en el
Log de errores de SQL
Server todos los dead-
locks.
Trace f lags
DBCC TRACEON ( #traza [ ,...n ] )
DBCC TRACESTATUS ( #traza [ ,...n ] )
DBCC TRACEOFF ( #traza [ ,...n ] )
62
Análisis de Performance
Trace Flags – Otra forma de usarlos …
Como evitar deadlocks
Mantener las transacciones lo mas cortas posibles
Usar transacciones solamente si son necesarias
Usar el mínimo nivel de aislamiento necesario
No permitir interacción con los usuarios dentro de una transacción
No utilizar recursos innecesariamente
Usar „Row Level Locking‟
Acceder los recursos en el mismo orden
Utilizar los índices de manera correcta
63
C LR
SQL Server 2005
Objetivos de l SQL Server 2005
Se tomaron en cuenta en el siguiente orden
Seguridad
Confiabilidad
Performance
65
Como funciona
66
Assembly:
“TaxLib.dll”
Build
SQL Server
SQL Data Definition: create assembly …
create function …
create procedure …
create trigger …
create type …SQL Queries: select
sum(tax(sal,state) )
from Emp
where county = ‘King’
Runtime en el SQL
Server
public void Tax (){
……..
}´
Arquitectura rendimiento y performance
Tuning del motor relacional del SQL Server
08/05/2009
12
CLR Host y Assembly
Cualquier proceso que carga el runtime .NET y corre el
código en un entorno manejado ASP.NET
Otros
Ahora el SQL Server
El Assembly es la unidad de despliegue
67
Cambios en e l CLR
.NET 1.1
Diseñado para IIS
Los procesos pueden ser matados (kill)
Se puede crear libremente threads (hilos de ejecución) y pedir memoria
.NET 2.0
Diseñado para SQL Server 2005
Los procesos NO pueden ser matados
El Host puede reusarse a las peticiones de memoria o de nuevos threads
68
Integración del CLR
69
Windows OS
SQL OS Layer
SQL Engine
Hosting
Layer
CLR
P r o ve e c o o r d i n a c i ó n y c o n t r o l
d e :
Carga de Assemblies
Gestión de memoria
Modelo de seguridad
Confiabilidad
Threads y Fibers
Detección de Deadlock
Contexto de ejecucion
Novedades de l .NET 2 .0
70
CLR: Gestión de memoria
Todas las asignaciones de memoria del CLR se realizan a través del SQL Server
La mayoría de la memoria del CLR (GC Heap) proviene de la memoria multi-page (fuera del Buffer-pool o “MemToLeave”) La opción Max server memory no cubre la memoria del CLR
Si hay poca memoria dispnible el SQL le pide al CLR que inicie el Garbage Collector
71
CLR: Gestión de memoria (2)
DMV (dynamic management view) Para monitorear el uso
de memoria del CLR Sys.dm_os_memory_clerks
Sys.dm_os_memory_objects
Perf counters: # GCs, Cantidad de memoria asignada
SQL-OS gestión de memoria http://blogs.msdn.com/slavao/archive/2005/02/11/371063.aspx
72
Arquitectura rendimiento y performance
Tuning del motor relacional del SQL Server
08/05/2009
13
CPU: threads y s incronización
Todos los threads “managed” están mapeados a tareas gestionadas por el scheduler del SQL Server El Schedule del SQL es Cooperativo
Excepto: los threads del GC
El SQL Scheduler detecta las tareas que no liberan (managed o T-SQL) y las castiga Fuerza a la tarea a parar, la pone al final de la cola de proceso y le
hace perder algunas vueltas
73
CPU: threads y s incronización
Callback al SQL Server en P/Invoke (cuando se llama código nativo)
Cuando cambia al modo pre-emptive
Los pedidos de lock desde el CLR se realizan a través del
SQL Server lock manager Hay una detección unificada de deadlock entre los locks del CLR y del
SQL nativo
74
Application Domain
App-domains Mecanismo del CLR para el aislamiento y la descarga de código
SQL Server usa dos clases de app-domains DDL-time: temporario. Usado durante el DDL para verificación
Execution time: Cuando se ejecuta el código
Granularidad Uno por cada dueño de un assembly en cada base de datos
Todos los assemblies de un mismo dueño están en el mismo app domain
75
APPDomains
No se permite la llamada entre distintos app domain
Los datos y el código que tienen como dueño a un usuario esta aislado de los de los otros usuarios a menos que se habilite el acceso
Se puede asignar permisos en el create assembly
El dueño de una assembly puede asignar el permiso de referencia del mismo
76
Comparación T-SQL CLR
77
T-SQL CLR
User Defined Functions X X
Stored Procedures X X
Triggers X X
User Defined Types X
Aggregates X
Clases de l framework disponibles
La mayoria de las System.* incluyendo: mscorlib.dll
system.dll
system.data.dll
system.xml.dll
system.security.dll
No estan disponibles las clases de uso interactivo como por ejemplo: system.windows.forms.dll
system.drawing.dll
system.web.dll
78
Arquitectura rendimiento y performance
Tuning del motor relacional del SQL Server
08/05/2009
14
Código Manajado
No esta habilitado por default, se debe configurar al servidor para que lo pueda usar
Se debe usar DML para cargar los assembly y registrar los objetos
Solo pueden ser DLL
Se puede cargar desde un archivo o de un bitstream
Se requiere tener suficientes permisos
Solo funciona con seguridad integrada
79
Code Access Security (CAS)
SAFE
Solo se tiene acceso al CLR
No se puede acceder a recursos externos, gestión de threads, código unsafe o interop
EXTERNAL_ACCESS
Además se puede acceder a recursos externos al .NET Framework
Por ejemplo . EventLog, FileSystem y la red
Sin acceso a código unsafe o interop
UNSAFE
Sin restricciones es similar a los extended stored procedures
AS EXTERNAL NAME ExampleYukon.SqlClr.OutputProcedure
Parámetros de Stored Procedures (2 )
90
// In/Out Parameter
public static void InOutProcedure(ref int number) {
number = 42;
}
CREATE PROCEDURE InOutProcedure@number int OUTPUT
AS EXTERNAL NAME ExampleYukon.SqlClr.InOutProcedure
// Return Parameter
public static int ReturnProcedure() {
return 42;
}
CREATE PROCEDURE ReturnProcedureAS EXTERNAL NAME ExampleYukon.SqlClr.ReturnProcedure
Arquitectura rendimiento y performance
Tuning del motor relacional del SQL Server
08/05/2009
16
Funciones CLR
Son similares a las funciones T-SQL
Escritas en cualquier lenguaje .NET Decoradas con el atributo [SqlFunction]
Hay que cargar el assembly en la base de datos
Se debe definir la función a partir de un assembly
Limites Los mismos que los CLR SP
91
Funciones CLR (2)
92
CREATE FUNCTION <Function Name>(<Parameter List>) RETURNS <Return Type>AS EXTERNAL NAME <Assembly Identifier>.<Type Name>.<Method Name>
CREATE FUNCTION Addition(@x int,@y int
)RETURNS intAS EXTERNAL NAME ExampleYukon.SqlClr.Addition
Funciones CLR (2)
[SqlFunction]: Permite al SQL saber que tipo de función es IsDeterministic
IsPrecise
DataAccess
SystemDataAccess
93
[SqlFunction]public static int Suma(int x, int y) {return x + y;
}
Triggers CLR
94
CREATE TRIGGER <TriggerName>ON <Table or View> FOR <INSERT|UPDATE|DELETE>AS EXTERNAL NAME <Assembly Identifier>.<Type Name>.<Method Name>
CREATE TRIGGER AddAuthorON author FOR INSERTAS EXTERNAL NAME ExampleYukon.SqlClr.AddAuthor
CREATE TRIGGER <TriggerName>ON <ALL_SERVER or DATABASE> <FOR or AFTER> <EventName>AS EXTERNAL NAME <Assembly Identifier>.<Type Name>.<Method Name>
CREATE TRIGGER AddUserON DATABASE FOR CreateUserAS EXTERNAL NAME ExampleYukon.SqlClr.AddUser
Triggers CLR (2)
TriggerContext nos da información del Trigger
ColumnsUpdates nos dice que columnas cambiaron
La clase debe retornar void
95
Triggers CLR (3)
96
public static void AddAuthor() {SqlTriggerContext ctx = SqlContext.TriggerContext;
if (ctx.TriggerAction == TriggerAction.Insert) {string msg = "";// Get the data associated with Eventfor (int x = 0; x < ctx.ColumnsUpdated.Length; ++x) {