Upload
jose-moreno
View
6
Download
0
Embed Size (px)
DESCRIPTION
Índices y Rendimiento
Citation preview
ndices y rendimiento (Performance) en el SQL Server
03/11/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 @gm a i l . c om
www . s q l t o t a l c o n s u l t i n g . c om
h t t p : / / B l o g . j o s ema r i a n o a l va r e z . c om
ndices y rendimiento (Performance) en e l 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 ningn filegroup y no puede ser parte de ningn archivo.
Un archivo es una unidad de paralelismo y de recuperacin.
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 fsico si Disk Queue length
ndices y rendimiento (Performance) en el SQL Server
03/11/2009
2
Extents
7
rboles B y Heap
8
Qu es un ndice ?
9
ndices c lustered
Solo puede haber uno por tabla porque define el orden fsico
Al crearlo se requiere el doble de espacio de la tabla porque se copian
Recomendado para Grandes resultados con Scan por rango
Obtencin de datos ordenados
No recomendado Columnas que se actualizan habitualmente
Claves anchas
10
Clustered
11
Seek - Cluster
12
ndices y rendimiento (Performance) en el SQL Server
03/11/2009
3
Range - Cluster
13
ndices non Clustered
Puede haber varios por tabla (hasta 249)
Son estructuras secundarias a la tabla
Accesos puntuales
Requieren alta selectividad
Requiere Bookmark Lookup porque depende del clustered index
Son muy tiles con resultados de pocas filas de tablas grandes
14
Nonclustered
15
Traversing Bookmark look-up
16
Seek Non Cluster
17
Range Non Cluster
18
ndices y rendimiento (Performance) en el SQL Server
03/11/2009
4
Caractersticas de los ndices
Unicidad Ayuda a las estrategias de acceso
Selectividad Es el porcentaje de la tabla accedida
Selectividad = filas accedidas / Total
Selectividad de un join Es el nmero de filas de una tabla inner de la relacin con respecto a
una tabla outer definida
19
Definicin de ndices
Fillfactor Indica cuan llenas deben estar las pginas de un ndice
0: 100% de todas las pginas (Read Only)
100: 100% de las pginas hoja
Padd index Indica cuan llenas deben estar las pginas intermedias
Se usa junto a fillfactor
20
Fil l Factor
21
Anlis is de las es tadst icas de una tabla
Muestra la informacin estadstica de una tabla que usa el SQL Server para seleccionar el mejor plan
Densidades Define la selectividad de un ndice
Density
All density
Histograma
22
Planes de e jecucin
SET SHOWPLAN_TEXT Muestra la informacin detallada del plan aproximado (no ejecuta la instruccin)
SET SHOWPLAN_ALL Muestra la informacin detallada del plan aproximado y de los recursos utilizados (no ejecuta la
instruccin)
Anlisis grfico desde el Query Analyzer Plan estimado (CTRL+L)
Plan ejecutado (CTRL+K)
23
Operadores
Operadores lgicos Describe la operacin algebraica relacional usada para procesar una
sentencia
Operadores fsicos Describe la implementacin fsica del algoritmo usado para procesar
una sentencia
24
ndices y rendimiento (Performance) en el SQL Server
03/11/2009
5
Estadsticas de e jecucin Statistics time ON
Muestra informacin de tiempo en ms relativa al parsing, compilacin y ejecucin de cada sentencia
Indica que el proceso actualice la columna CPU de la tabla sysprecesses
No funcione en el modo FIBER (lightweight pooling ON)
Statistics IO ON Muestra informacin relacionada con el acceso a disco
Table
scan count
logical reads
physical reads
read-ahead reads
25
Sugerencias
Crear primero el Clustered y luego los non clustered
Borrarlos en el orden inverso
Crear la menor cantidad de ndices
Hacer los ndices tan pequeos como se pueda, especialmente en los clustered
Crear ndices non clustered que sean altamente selectivos, UNIQUE de ser posible
26
Cover index
Cover index Todos los datos requeridos estn en el ndice
No accede a las paginas de datos (sin Bookmark Lookup)
Solo para ndices Non Clustered
Acta como un ndice clustered (efectividad y ordenamiento)
Es costoso mantenerlos
27
Index intersection
Permite el Uso de ms de un ndice por tabla y por query
Obtienen un subconjunto que es la interseccin de mltiples ndices
28
Index Join
Utiliza solo ndices para satisfacer la consulta mediante tcnicas de join
Usa tcnicas de Index intersection Covering index
29
SARGS (search argument)
Limitan las bsquedas mediante un valor exacto o rango
No puede haber dos columnas en la condicin0/ columna (Operador)
Operadores =, >, ,
ndices y rendimiento (Performance) en el SQL Server
03/11/2009
6
Otras consideraciones
Heursticas usadas cuando no hay estadsticas disponibles = 10%
> 30%
< 30%
BETWEEN 10%
Constraints Pueden provocan accesos adicionales para su verificacin
31
Tipos de jo in Hash: Es efectivo si
Ambos conjuntos difieren de tamao pero no tienen ordenamiento por las columnas del join En resultados intermedios no indexados
Merge: Es efectivo si Los conjuntos estn ordenados por la columna del join Uno de los conjuntos no esta ordenado pero ambos son del mismo tamao (Se realiza un SORT)
Nested loops: Es efectivo Cuando uno de los conjuntos del join es muy chico (< 10 reg)
32
Conceptos de ndices
Las tablas sin clustered index tienen una fila en sysindexes con indid = 0
Las tablas con clustered index tienen una fila en sysindexes con indid = 1
Las tablas con nonclustered indexes tienen una fila en sysindexes con indid >= 2
Una tabla nunca tendr indid = 0 e indid = 1 a la vez en sysindexes !
33
Estadsticas
Las estadsticas tambin se almacenan como nonclustered indexes en sysindexes con indid >= 2 !!
Se almacenan en la columna StatsBlob
Cuantas ms estadsticas haya en una tabla, menos cantidad de ndices se podrn crear !!
34
Resumiendo
35
Valor en indid
Sin clustered 0
Con clustered 1
Non-clustered y estadsticas 2 - 250
Columna text / ntext / image 255
Interaccin de las Transacciones
36
Cliente #2Cliente #1
SQLServer
Cliente #3
ndices y rendimiento (Performance) en el SQL Server
03/11/2009
7
Niveles de Ais lamiento
37
READ UNCOMMITTED
READ COMMITTED (default)
REPEATABLE READ
SERIALIZABLE
Posibles problemas
38
Dirty
Read
Non-
Repeatable Read
PhantomsConflicto en
Update
Read
UncommittedSi Si Si No
Read Committed No Si Si No
Repeatable
ReadNo No Si No
Serializable No No No No
Cambio de l nivel de a is lamiento
Permanece en vigencia hasta que la conexin se cierre o se lo cambie nuevamente
39
SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED| READ COMMITTED| REPEATABLE READ| SNAPSHOT| SERIALIZABLE}
Cambio de l nivel de a is lamiento
40
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED
SELECT
UPDATE
INSERT
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 todava 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 transaccin actual, dando como resultado lecturas no repetibles o datos ficticios. Esta opcin es la predeterminada para SQL Server.
42
ndices y rendimiento (Performance) en el SQL Server
03/11/2009
8
REPEATABLE READ
Especifica que las instrucciones no pueden leer datos que han sido modificados pero an no confirmados por otras transacciones y que ninguna otra transaccin puede modificar los datos ledos por la transaccin actual hasta que sta finalice.
43
SERIALIZABLE
Las instrucciones no pueden leer datos que hayan sido modificados, pero an no confirmados, por otras transacciones.
Ninguna otra transaccin puede modificar los datos ledos por la transaccin actual hasta que la transaccin actual finalice.
Otras transacciones no pueden insertar filas nuevas con valores de clave que pudieran estar incluidos en el intervalo de claves ledo por las instrucciones de la transaccin actual hasta que sta finalice.
44
SNAPSHOT (2005) Especifica que los datos ledos por cualquier instruccin de una transaccin vean la
versin coherente, desde el punto de vista transaccional, de los datos existentes al comienzo de la transaccin. La transaccin nicamente puede reconocer las modificaciones de datos confirmadas antes del comienzo de la misma. Las instrucciones que se ejecuten en la transaccin actual no vern las modificaciones de datos efectuadas por otras transacciones despus del inicio de la transaccin actual. El efecto es el mismo que se obtendra si las instrucciones de una transaccin obtuviesen una instantnea de los datos confirmados tal como se encontraban al comienzo de la transaccin.
45
Equiva lencia nive l de a is lamientoLocking H ints
R E A D UNC OMM I TTE D
R E A D C OMM 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
NOLOC K o R E A DUNC OMM I TTE D
R E A DCOMM I TTE D
R E P E A TA B LA RE A D
HOLD LOC K
46
SELECT * FROM MI_TABLA WITH (NOLOCK)
Modos de las transacciones
47
Modo
Implcito
Explcito
(default)
Transaccin Implcita
Transaccin Explcita
SET IMPLICIT_TRANSACTIONS { ON / OFF }
Caractersticas
Tipo de lockeo adquirido (Lock mode)
Unidad de datos lockeada (Lock resource)
Duracin del lockeo (Lock duration)
48
Estos datos se mantienen en la
pseudo-tabla SysLockInfo
ndices y rendimiento (Performance) en el SQL Server
03/11/2009
9
Tipos de locks adquiridos (Lock mode)
49
S hare S
E xc lus ive X
Upda te U
I n ten t I S / I X / I U
Unidad de datos lockeada (Lock resource)
R ow
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.
Duracin 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
transaccin
Hasta el final de la
transaccin
Update Hasta que los datos se leen y procesan, a
menos que sea
escalada a Exclusive y
duran hasta el final de la
transaccin
Hasta el final de la
transaccin
Hasta el final de la
transaccin
A menos que sea
escalada a
Exclusive
Exclusive Hasta el final de la
transaccin
Hasta el final de la
transaccin
Hasta el final de la
transaccin
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 Bulk Update y Schema
54
Lock
Bulk Update
Schema
Stability (Sch-S)
Modification (Sch-M)
ndices y rendimiento (Performance) en el SQL Server
03/11/2009
10
Range locks
Solamente aplica en el SERIALIZABLE ISOLATION LEVEL
Afecta un rango de claves sin incluir el inicio.
Ejemplo en T-SQL sera:NOMBRE >JORGE AND NOMBRE
ndices y rendimiento (Performance) en el SQL Server
03/11/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
Anlisis de Performance
Trace Flags Otra forma de usarlos