IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Pb de Performance SQLServer 2008 R1 - CXPACKET/LATCH_EX


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 137
    Par défaut Pb de Performance SQLServer 2008 R1 - CXPACKET/LATCH_EX
    Bonjour

    J'ai actuellement un problème sur un batch qui dure très longtemps.
    Ce batch lance plusieurs processus en parallèle (géré côté applicatif)
    Chaque processus lance plusieurs la même procédure
    Cette procédure fait environ 1 millions d'IO (99% d'IO logique/ pas ou peu d'IO physiques)

    Au final le traitement global dure plus de 5 heures et lance plus de 3 000 fois cette procédure.

    Je simplifie un peu mais la procédure lance ce genre de traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    CREATE TABLE #TMP_Flux
    		( [col1] varchar(50)
    		, col2varchar(50)
    		, [col3] varchar(50)
    		, [col4] varchar(50)
    		, [col5] varchar(50)
    		, [col6] varchar(50)
    		, [col7] int)
     
    	-- TMP Insertion
    	INSERT INTO #TMP_Flux (col1,col2,col3,col4, col5, col6, col7)
    	SELECT col1,col2,col3,col4, col5, col6, col7
    	FROM   OPENXML (@idoc, '/root/row', 2)
    	WITH 
    	(
    		col1 varchar(50) '@val1',
    		col2 varchar(50) '@val2',
    		col3 varchar(50) '@val3',
    		col4 varchar(50) '@val4' ,
    		col5 varchar(50) '@val5', 
    		col6 varchar(50) '@val6', 
    		col7 int '@val7'
    	) as inputTable
     
    	-- TMP Index Creation
    	CREATE NONCLUSTERED INDEX IX_TMP_Flux_2
    		ON #TMP_Flux   ([col5],col4)
     
     
    	-- Selection of cashflow
    	SELECT DISTINCT 
    	C.c1
    	, C.c2
    	, C.c3
    	, EC.c1
    	, C.c4
    	, C.c5
    	, C.c6
     	, inputTable.col1
    	, inputTable.col2
    	, ET.c1
    	FROM #TMP_Flux  as inputTable
    	LEFT JOIN t1 CW WITH(NOLOCK) ON CW.c5 = inputTable.c5 AND CW.c4 = inputTable.c4 AND CW.c6 = inputTable.c6
    	LEFT JOIN t2 T ON T.c3 = CW.c3
    	LEFT JOIN t3 ET WITH (NOLOCK) ON ET.TradeId = T.Id
    	LEFT JOIN t4 C WITH (NOLOCK)ON C.TradeId = T.Id
     	LEFT JOIN t5 EC WITH (NOLOCK) ON EC.CId = C.Id
    	LEFT JOIN t6 B WITH(NOLOCK) ON B.CId = C.Id AND B.SId = inputTable.c4
    	where inputTable.c2 = '' AND CW.CType = 'Portfolio'
    	AND ET.RunId = @CId 
    	AND ET.Gop = inputTable.c5
    	AND EC.RunId = @CId
    	AND C.c3 IN ('BAU','STATIC')
    	AND C.CType NOT LIKE '%winding' AND C.CCode = inputTable.CCurr 
    	AND B.Id is not null
    Les IO se font essentiellement sur la partie select distinct

    L'instance SQLServer a 48 Go de RAM et 12 engines répartis sur 2 engine NUMA.

    Durant le batch, la CPU dépasse les 80% d'utilisation.
    Les principales 'wait tasks' sont CXPACKET majoritairement et LATCH_EX et sont uniforme durant tout le batch :
    CXPACKET : 5 000 000 wait_time_ms (collecte faite toutes les minutes)
    LATCH_EX : 900 000 wait_time_ms (collecte faite toutes les minutes)

    Le débit d'IO semble se détériorer

    J'avoue que je seche un peu
    J'aurais voulu comprendre comment identifier la contention LATCH_EX et si elle peut être peinalisante pour mon batch

    En fait, toute idée est la bien venue

    Heeeeeeeeeeeeelp !!!!

    Merci
    Jeeps64

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Insérez tout vos documents XML dans une table dotée d'une colonne XML, indexez cette colonne (inndex XML), puis faites quelques requêtes ensemblistes.

    Je pense que vous serez surpris par la différence fondamentale de temps de traitements.

    Je ne serait pas surpris que vous diviser au moins par 10 le temps d'exec.

    En sus, désactivez la parallélisme pour ces requêtes e n utilisant la clause OPTION (MAXOP 1) en effet, les requêtes XML ne sont par parallélisables, d’où vos CXPACKET.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 137
    Par défaut
    Merci de ce retour
    Nous allons tester votre proposition

    En parallèle, comme puis-je identifier à quoi correspond les attentes LATCH_EX dans mon cas de figure ?
    En fait, j'ai du mal à comprendre ou est la contention

    Je comprend la "contention" CXPACKET sur laquelle nous avons pu agir en travaillant sur le MAXDOP sur certaines procedure stockée

    Jeeps64

Discussions similaires

  1. Performance (SQLServer 2008)
    Par cosmos38240 dans le forum Administration
    Réponses: 4
    Dernier message: 04/10/2012, 15h13
  2. Réponses: 3
    Dernier message: 16/04/2010, 14h10
  3. Attacher une BD creer sous SQL SERVER 2000 DANS SQLSERVER 2008
    Par bouhlal_badre dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 30/05/2009, 09h15
  4. [SQLServer 2008] Limitation droits utilisateurs
    Par Dimitri S. dans le forum Administration
    Réponses: 2
    Dernier message: 09/04/2009, 15h45
  5. Probleme d'instal sqlServer 2008 / .Net Framework sur Win serv2008
    Par bruninho dans le forum Administration
    Réponses: 1
    Dernier message: 03/02/2009, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo