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 :

Blocage insertion sql


Sujet :

Administration SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    consultant BI
    Inscrit en
    Mai 2011
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suède

    Informations professionnelles :
    Activité : consultant BI
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 182
    Points : 95
    Points
    95
    Par défaut Blocage insertion sql
    Bonjour a tous

    une autre fois j'ai eu un phénomène de blocage sur mon serveur SGBD ce dernier est dédier pour la production ainsi pour le reporting

    les requêtes qui sont dédier pour le reporting se sont les plus coûteuse car il utilise beaucoup des fonction d'agrégation (order by, distinct,count.....)

    aussi beaucoup de jointure dans les procédures sans utilisation des opération de type commit,roolback,begin....

    je sais bien que le verrou est un phénomène normal pour le moteur SGBD mais je veux qu'elle ne serai pas un blocage pour cela ma collègue ma conseiller de

    modifier le paramétrage vers 3000ms la valeur actuelle est donner par la requête est -1

    est ce que cette modification peuvent minimiser le phénomène du blocage ????

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Ça devrait éventuellement peut-être résoudre partiellement le problème = au lieu d'attendre indéfiniment, le SGBD ne va conserver des locks que 3 secondes.

    Seul souci, c'est qu'une fois les locks expirés, les requêtes de mise à jour vont être shootées, et donc cela va avoir des répercussion sur le fonctionnement des outils.

    En revanche, pour du reporting, il est peut-être possible d'utiliser des hints dans les requêtes pour lire une UNCOMMITED. Ca devrait alléger les blocages en permettant de lire des données qui n'ont pas encore été committées.
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Membre régulier
    Homme Profil pro
    consultant BI
    Inscrit en
    Mai 2011
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suède

    Informations professionnelles :
    Activité : consultant BI
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 182
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Ça devrait éventuellement peut-être résoudre partiellement le problème = au lieu d'attendre indéfiniment, le SGBD ne va conserver des locks que 3 secondes.

    Seul souci, c'est qu'une fois les locks expirés, les requêtes de mise à jour vont être shootées, et donc cela va avoir des répercussion sur le fonctionnement des outils.

    Donc comment je peux résoudre mon problème sans perturber est ce que la valeur 3000 est élevé ???
    Citation Envoyé par StringBuilder Voir le message
    En revanche, pour du reporting, il est peut-être possible d'utiliser des hints dans les requêtes pour lire une UNCOMMITED. Ca devrait alléger les blocages en permettant de lire des données qui n'ont pas encore été committées.
    plus de détaille stp ??? j'ai pas compris cette point

    autre point est ce que l'augmentation du RAM peuvent améliorer les choses???

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    le niveau d'solation de transaction read uncommited est en effet une solution possible ou l'utilisation des hint de requête NOLOCK. Cependant si les résultats doivent être consistants ce n'est pas forcément la meilleure option. On peut également utiliser le niveau d'isolation de transaction read committed snapshot par exemple.

    L'activité de Reporting malgré l'utilisation de ces mécanismes pour éviter les blocages risque peut être d'avoir un impact sur les ressources du serveur. Ceci est à prendre en considération et dans le cas où l'impact serait trop grand, il existe ici aussi la possibilité de déporter l'activité de Reporting sur un autre serveur (à voir les besoins en Reporting en temps réel ou non dans ce cas et les technologies associées qui permettent de répondre au besoin ...)

    Bref en fonction du contexte la solution n'est pas forcément si simple que cela.

    ++

  5. #5
    Membre régulier
    Homme Profil pro
    consultant BI
    Inscrit en
    Mai 2011
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suède

    Informations professionnelles :
    Activité : consultant BI
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 182
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    le niveau d'solation de transaction read uncommited est en effet une solution possible ou l'utilisation des hint de requête NOLOCK. Cependant si les résultats doivent être consistants ce n'est pas forcément la meilleure option. On peut également utiliser le niveau d'isolation de transaction read committed snapshot par exemple.

    L'activité de Reporting malgré l'utilisation de ces mécanismes pour éviter les blocages risque peut être d'avoir un impact sur les ressources du serveur. Ceci est à prendre en considération et dans le cas où l'impact serait trop grand, il existe ici aussi la possibilité de déporter l'activité de Reporting sur un autre serveur (à voir les besoins en Reporting en temps réel ou non dans ce cas et les technologies associées qui permettent de répondre au besoin ...)

    Bref en fonction du contexte la solution n'est pas forcément si simple que cela.

    ++

    ci joint la procédure utilisé pour la partie reporting et qui pause beaucoup du problème

    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
     
    CREATE         PROCEDURE [dbo].[spSGM_GetDonneesCapabilite]
     
    @dateDebut	datetime,
    @dateFin 	datetime,
    @Transaction	varchar(30),
    @LpNum		varchar(2),
    @TypeProduit    varchar(20)=NULL
     
    AS
     
    IF (@TypeProduit IS NULL)
    	SELECT distinct mvttest.pt_num, vSGM_produit.pt_lib, mt_testeur, vSGM_Postes.pr_lib, me_libelle
    	FROM Mvttest
    	INNER JOIN Detailmesure ON DetailMesure.mt_id = mvttest.mt_id 
    	INNER JOIN Mesure on detailmesure.me_id = mesure.me_id
    	INNER JOIN vSGM_produit ON MvtTest.pt_num = vSGM_produit.pt_num
    	LEFT JOIN vSGM_Postes on Mvttest.mt_testeur COLLATE SQL_Latin1_General_CP1_CI_AS = vSGM_Postes.pr_IDreseau
    	WHERE MvtTest.mt_datedeb >= @datedebut
    	and mvttest.mt_datedeb <=@dateFin
    	and MvtTest.mt_test=@transaction
    	and vSGM_produit.lp_num=@LpNum
    	and sp_id in('PROD','PROTO')
    	order by MvtTest.pt_num, MvtTest.mt_testeur, me_libelle
    ELSE
    	IF (@TypeProduit <> 'Standard')
    		SELECT distinct mvttest.pt_num, vSGM_produit.pt_lib, mt_testeur, vSGM_Postes.pr_lib, me_libelle
    		FROM Mvttest
    		INNER JOIN Detailmesure ON DetailMesure.mt_id = mvttest.mt_id 
    		INNER JOIN Mesure on detailmesure.me_id = mesure.me_id
    		INNER JOIN vSGM_produit ON MvtTest.pt_num = vSGM_produit.pt_num
    		LEFT JOIN vSGM_Postes on Mvttest.mt_testeur COLLATE SQL_Latin1_General_CP1_CI_AS = vSGM_Postes.pr_IDreseau
    		WHERE MvtTest.mt_datedeb >= @datedebut
    		and mvttest.mt_datedeb <=@dateFin
    		and MvtTest.mt_test=@transaction
    		and vSGM_produit.lp_num=@LpNum
    		and sp_id in('PROD','PROTO')
    		AND mp_cod like '%' + @Typeproduit + '%'
    		order by MvtTest.pt_num, MvtTest.mt_testeur, me_libelle
    	ELSE
    	BEGIN
    		SELECT distinct mvttest.pt_num, vSGM_produit.pt_lib, mt_testeur, vSGM_Postes.pr_lib, me_libelle
    		FROM Mvttest
    		INNER JOIN Detailmesure ON DetailMesure.mt_id = mvttest.mt_id 
    		INNER JOIN Mesure on detailmesure.me_id = mesure.me_id
    		INNER JOIN vSGM_produit ON MvtTest.pt_num = vSGM_produit.pt_num
    		LEFT JOIN vSGM_Postes on Mvttest.mt_testeur COLLATE SQL_Latin1_General_CP1_CI_AS = vSGM_Postes.pr_IDreseau
    		WHERE MvtTest.mt_datedeb >= @datedebut
    		and mvttest.mt_datedeb <=@dateFin
    		and MvtTest.mt_test=@transaction
    		and vSGM_produit.lp_num=@LpNum
    		and sp_id in('PROD','PROTO')
    		AND mp_cod IN('ADSL', 'ADSL2+')
    		order by MvtTest.pt_num, MvtTest.mt_testeur, me_libelle
    	END

    si j'ajoute l'option SET isolation level REPEATABLE READ + instruction begin transaction + instruction commit pour que le procédure deviens
    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
    57
    58
     
    SET isolation level  REPEATABLE READ
    Begin transaction;
    CREATE         PROCEDURE [dbo].[spSGM_GetDonneesCapabilite]
     
    @dateDebut	datetime,
    @dateFin 	datetime,
    @Transaction	varchar(30),
    @LpNum		varchar(2),
    @TypeProduit    varchar(20)=NULL
     
    AS
     
    IF (@TypeProduit IS NULL)
    	SELECT distinct mvttest.pt_num, vSGM_produit.pt_lib, mt_testeur, vSGM_Postes.pr_lib, me_libelle
    	FROM Mvttest
    	INNER JOIN Detailmesure ON DetailMesure.mt_id = mvttest.mt_id 
    	INNER JOIN Mesure on detailmesure.me_id = mesure.me_id
    	INNER JOIN vSGM_produit ON MvtTest.pt_num = vSGM_produit.pt_num
    	LEFT JOIN vSGM_Postes on Mvttest.mt_testeur COLLATE SQL_Latin1_General_CP1_CI_AS = vSGM_Postes.pr_IDreseau
    	WHERE MvtTest.mt_datedeb >= @datedebut
    	and mvttest.mt_datedeb <=@dateFin
    	and MvtTest.mt_test=@transaction
    	and vSGM_produit.lp_num=@LpNum
    	and sp_id in('PROD','PROTO')
    	order by MvtTest.pt_num, MvtTest.mt_testeur, me_libelle
    ELSE
    	IF (@TypeProduit <> 'Standard')
    		SELECT distinct mvttest.pt_num, vSGM_produit.pt_lib, mt_testeur, vSGM_Postes.pr_lib, me_libelle
    		FROM Mvttest
    		INNER JOIN Detailmesure ON DetailMesure.mt_id = mvttest.mt_id 
    		INNER JOIN Mesure on detailmesure.me_id = mesure.me_id
    		INNER JOIN vSGM_produit ON MvtTest.pt_num = vSGM_produit.pt_num
    		LEFT JOIN vSGM_Postes on Mvttest.mt_testeur COLLATE SQL_Latin1_General_CP1_CI_AS = vSGM_Postes.pr_IDreseau
    		WHERE MvtTest.mt_datedeb >= @datedebut
    		and mvttest.mt_datedeb <=@dateFin
    		and MvtTest.mt_test=@transaction
    		and vSGM_produit.lp_num=@LpNum
    		and sp_id in('PROD','PROTO')
    		AND mp_cod like '%' + @Typeproduit + '%'
    		order by MvtTest.pt_num, MvtTest.mt_testeur, me_libelle
    	ELSE
    	BEGIN
    		SELECT distinct mvttest.pt_num, vSGM_produit.pt_lib, mt_testeur, vSGM_Postes.pr_lib, me_libelle
    		FROM Mvttest
    		INNER JOIN Detailmesure ON DetailMesure.mt_id = mvttest.mt_id 
    		INNER JOIN Mesure on detailmesure.me_id = mesure.me_id
    		INNER JOIN vSGM_produit ON MvtTest.pt_num = vSGM_produit.pt_num
    		LEFT JOIN vSGM_Postes on Mvttest.mt_testeur COLLATE SQL_Latin1_General_CP1_CI_AS = vSGM_Postes.pr_IDreseau
    		WHERE MvtTest.mt_datedeb >= @datedebut
    		and mvttest.mt_datedeb <=@dateFin
    		and MvtTest.mt_test=@transaction
    		and vSGM_produit.lp_num=@LpNum
    		and sp_id in('PROD','PROTO')
    		AND mp_cod IN('ADSL', 'ADSL2+')
    		order by MvtTest.pt_num, MvtTest.mt_testeur, me_libelle
    	END
    commit transaction;
    Est ce que le problème se corrige ??

Discussions similaires

  1. blocage insertion sql
    Par joujousagem2006 dans le forum Administration
    Réponses: 5
    Dernier message: 18/07/2014, 10h48
  2. [Conception] insertion sql en php, dans une base de donnée ?
    Par artotal dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 24/10/2005, 04h34
  3. Lenteur lors d'une insertion (sql server)
    Par shiners300 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/09/2005, 09h09
  4. Réponses: 24
    Dernier message: 31/05/2005, 15h07
  5. Export sous forme d'INSERT SQL
    Par Kraken dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 04/09/2003, 11h40

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