Les journes SQL Server 2013 - Forum du club des ... Les journes SQL Server 2013 Un vnement organis par GUSS Les Verrous Arian Papillon, MVP SQL Server Frdric Brouard, MVP SQL Server

  • View
    216

  • Download
    3

Embed Size (px)

Text of Les journes SQL Server 2013 - Forum du club des ... Les journes SQL Server 2013 Un vnement organis...

  • #JSS2013

    Les journes

    SQL Server 2013

    Un vnement organis par GUSS

  • #JSS2013

    Les journes

    SQL Server 2013

    Un vnement organis par GUSS

    Les VerrousArian Papillon, MVP SQL Server

    Frdric Brouard, MVP SQL Server

  • #JSS2013

    Arian Papillon a.papillon@datafly.fr

    Frdric Brouard sqlpro@sqlspot.com

  • #JSS2013

    Bientt dans les bacs

  • #JSS2013

    Merci nos sponsors

  • #JSS2013

    SGBD et concurrence daccs

    Quest-ce quun verrou ?

    Transactions et niveaux disolation

    Ltreinte fatale ou verrou de la mort

    Diagnostiquer les verrous, attentes, blocages

    Limiter la contention et les deadlocks

    Agenda

  • #JSS2013

    Plusieurs utilisateurs accdent aux donnes et les

    mettent jour

    Il est ncessaire de garantir la stabilit des donnes

    afin que des accs simultans aux mmes donnes

    ninterfrent pas

    Le verrou est le mcanisme de base pour assurer la

    stabilit des donnes

    SGBD : Systme Multi-Utilisateurs

  • #JSS2013

    Pessimiste : blocage priori

    Les lectures bloquent les critures

    Les critures bloquent tout

    Mode par dfaut dans SQL Server

    Optimiste : vrification postriori

    Bas sur un versionning des lignes

    Aussi pris en charge par SQL Server

    Comment grer les accs concurrents ?

  • #JSS2013

    ANOMALIES TRANSACTIONNELLES :

    Le dernier qui met jour gagne : les mises jour prcdentes sont crases (perte de mise jour)

    Lors des lectures, si une mise jour est en cours, il peut y avoir : lectures sales , lectures non rptables, lignes fantmes

    Le temps de lire toutes les lignes dune table, un autre utilisateur peut changer les valeurs de certaines lignes. Exemple : deux produits identiques mis successivement dans un

    mme panier, pourraient avoir deux prix diffrents !

    Sans verrouillage, que se passe-t-il ?

  • #JSS2013

    Le mcanisme utilis pour contrler laccs

    une mme donne par de multiples

    utilisateurs

    Avant quune transaction neffectue une

    modification, elle doit sassurer un accs

    exclusif la donne

    Quest-ce quun verrou ?

  • #JSS2013

    Ressources verrouillables et granularit

    Base de donnes

    Table

    Partition

    Page

    Ligne

    Cl (index)

    Range de cls

    Schma

    Extension

    Fichier

    Mode de verrouillage X : exclusif S : partag U : update I : intention (IS, IX) SIX/SIU/UIX : partags avec

    intention

    Dure :

    Lecture

    Ordre SQL

    Transaction

    Quest-ce quun verrou

  • #JSS2013

    Compatibilit des modes de verrouillage

    IS S U IX SIX X

    IS

    S

    U

    IX

    SIX

    X

    Verrou poser

    Verrou existant

  • #JSS2013

    Lorsquune ressource est verrouille et quune

    autre transaction ncessite la pose dun verrou

    en conflit sur cette mme ressource : attente.

    Par dfaut, lattente est infinie

    SET LOCK_TIMEOUT configur pour la session permet

    labandon (et lerreur 1222)

    Blocages et attentes

  • #JSS2013

    Le verrou est une ressource serveur conomiser

    Cote environ 100 octets

    SQL Server choisit la granularit de verrouillage adapte la

    requte excuter (ligne, page, partition ou table)

    Pendant le traitement, de nombreux verrous sont acquis.

    Au fil de lexcution, limitation de la charge par escalade (ligne

    ou page > table) :

    Conversion des verrous dintention

    Lorsquil atteint environ 5000 locks pour une instruction, en cas dchec

    tentative tous les 1250 locks (valeurs approximatives)

    Escalade de verrous

  • #JSS2013

    Dmo

  • #JSS2013

    On peut contrler la concurrence daccs, par :

    Une transaction explicite

    Le niveau disolation des transactions

    Mcanismes logiques

  • #JSS2013

    Concerne toute opration unitaire de lecture ou criture (implicite)

    Lorsque plusieurs tables sont concernes, les oprations doivent

    seffectuer en tout ou rien (compltement ou pas du tout

    transaction explicite).

    Implicite : Toute commande SQL (DDL, DML, DCL) est une transaction

    Commit automatique par dfaut (SET IMPLICIT_TRANSACTIONS)

    ou explicite : Dmarrage par BEGIN TRANSACTION

    Finalisation par COMMIT ou ROLLBACK

    Transaction

  • #JSS2013

    Lectures impropres (sales, dirty, chaos)

    Lecture non rptables

    Lecture fantme

    Les anomalies transactionnelles potentielles

  • #JSS2013

    Sans contrle READ UNCOMMITTED

    Pessimiste READ COMMITTED

    REPEATABLE READ

    SERIALIZABLE

    Optimiste READ COMMITTED SNAPSHOT

    SNAPSHOT

    Les niveaux disolation

  • #JSS2013

    Au niveau session :

    SET TRANSACTION ISOLATION LEVEL

    Au niveau table / ordre SQL :

    Hints de table NOLOCK | READUNCOMMITTED

    READCOMMITTED

    REPEATABLEREAD

    HOLDLOCK | SERIALIZABLE

    UPDATE Production.Product WITH (SERIALIZABLE)

    Grer son niveau disolation

  • #JSS2013

    Dmo

  • #JSS2013

    Interblocage de ressources :

    Concerne au moins 2 transactions simultanes

    Survient si au moins une transaction concerne deux ressources

    Lune des transactions doit crire

    Dead lock : ltreinte fatale

  • #JSS2013

    Comportement :

    Chaque transaction attend la libration des

    ressources dtenues par lautre

    Dtect par le moniteur de verrouillage

    Annule automatiquement la moins coteuse

    SET DEADLOCK_PRIORITY

    Dead lock : ltreinte fatale

  • #JSS2013

    Dmo

  • #JSS2013

    Wait Stats : statistiques dattente depuis le dmarrage DMV sys.dm_os_wait_stats

    Attentes de verrous > 30 secondes XEvents : SystemHealth

    Activit globale de verrouillage Analyseur de performances (perfmon)

    Compteurs Lock Requests/s, Lock Waits/s, Lock Wait Time (ms), Number of Deadlocks/s

    Activit en cours sp_lock, sp_who, moniteur dactivit

    DMV sys.dm_tran_locks

    Captures dtailles des verrous poss et escalades Profiler

    Sessions XEvents

    Dtecter les attentes de verrous

  • #JSS2013

    Capturer les informations sur les verrous bloquants :

    Block Process Report

    Configurer le seuil de dclenchement dans les

    proprits de linstance

    Recueil des informations avec : profiler

    notification dvnement

    XEvents

    Dtecter les blocages

  • #JSS2013

    Trace Flags 1204 et 1222

    Capturer les informations sur les Deadlocks Deadlock Graph

    Capture avec : profiler

    notification dvnement

    Xevents : vnement prsent dans System Health

    Dtecter les deadlocks

  • #JSS2013

    Dmo

  • #JSS2013

    Hints de table PAGLOCK | ROWLOCK | TABLOCK (et UPDLOCK | XLOCK | TABLOCKX)

    Options dindex ALLOW_ROW_LOCKS

    ALLOW_PAGE_LOCKS

    ALTER TABLE SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )

    Laisser un lock IX positionn sur une tableBEGIN TRANSELECT * FROM TABLE1 WITH (UPDLOCK,SERIALIZABLE) WHERE 1=0WAITFOR DELAY ... COMMIT

    TraceFlags (global ou session) utiliser avec prcaution 1224 : dsactive jusqu 40% mmoire utilise, puis ractive

    1211 : dsactive totalement lescalade jusqu saturation mmoire et erreur

    Contrler la granularit ou lescalade

  • #JSS2013

    Pour limiter la contention et viter les blocages

    Faire des transactions les plus courtes possible :

    viter de sur transactionner

    Minimiser le code transactionn

    Faire les transactions ct serveur (procdures stockes)

    Noubliez pas que certains verrous ne sont levs quen

    finalisation (COMMIT, ROLLBACK)

    Bonnes pratiques

  • #JSS2013

    Pour limiter la contention et viter les blocages

    Normalisation :

    Tables obses vs tables fines

    Plus une table est grosse , plus elle concentre de mise jour

    Corrler avec : sys.dm_db_index_usage_stats /

    SUM(user_updates)

    Remodliser, partitionner (vertical, horizontal).

    Bonnes pratiques

  • #JSS2013

    Pour limiter la contention et viter les blocages

    Indexation, optimisation

    Plans de requte : viter les parcours de table ou dindex

    grce une indexation efficace

    Les index servent aussi pour les mises jour !

    Rcrire les requtes pour diminuer le temps de traitement

    Bonnes pratiques

  • #JSS2013

    Pour limiter la contention et viter les blocages

    criture du code :

    viter le code non ensembliste :

    Boucle

    Curseur

    Variable table, table temporaires, fonctions table

    Faire les transactions explicites ct serveur !

    Bonnes pratiques

  • #JSS2013

    Pour limiter la contention et viter les blocages

    Diminuer la force du verrouillage

    Descendre le niveau disolation global

    Adapter pour certaines tables

    Utiliser lUPDATE pour lecture

    Bonnes pratiques

  • #JSS2013

    Pour limiter le verrou mortel

    criture du code :

    Placer les mises jour avant les lectures

    Squencer les oprations dans le mme ordre logique

    dobjets

    Bonnes pratiques

  • #JSS2013

    Blog Datafly :

    http://blog.datafly.pro/post/les-verrous

    Blog SQLPro :

    http://blog.developpez.com/sqlpro/p/ms-sql-

    server/les-verrous

    Site GUSS : www.guss.pro

    Tlchargez la prsentation

    http://blog.datafly.pro/post/les-verroushttp://blog.d