Índices y Rendimiento (Performance) en El SQL Server

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