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 :

Test de montée de charge sous SQL 2K5/2K8


Sujet :

Administration SQL Server

  1. #21
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    La réponse est là:
    Citation Envoyé par mikedavem Voir le message
    Ton idée de départ n'est pas mauvaise mais il faudrait peut être changer la façon d'appeler les requêtes avec différents paramètres comme le suggère dbaffaleuf etc ... ce n'est qu'une piste évidemment ..
    Ce n'est pas une histoire de login, c'est une histoire de requêtes. Si tu as 3 connexions (avec le même login ou pas peu importe) qui exécutent chacune un UPDATE ou un DELETE sur la même table avec les mêmes critères, la première va obtenir le latch et les autres vont attendre. Et si tu as 150 connexions qui font la même chose c'est pareil. Tout est sérialisé, parce que toutes tes connexions sont en attente exactement sur la même ressource. Il faudrait que chaque connexion utilise des requêtes différentes avec des prédicats différents pour verrouiller des lignes différentes, et permettre à plusieurs connexions de travailler en même temps sur des jeux de données différents. C'est pour ça que faire un outil de charge en Transact est compliqué, il faut un jeu d'APIs plus riche pour pouvoir simuler une vraie activité.

    Le nombre maximum de requêtes simultanées est cappé par max worker threads de toutes façons. Et en général, on ne l'atteint pas.

    HTH. David B.

  2. #22
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Oui c'est exactement cela.
    Le problème de ton script c'est qu'il ne pas va "stresser" ton serveur de la bonne façon car il va se concentrer en un seul point qui sera certainement le point de contention avec des sessions en attente.
    Ton idée de départ n'est pas mauvaise mais il faudrait peut être changer la façon d'appeler les requêtes avec différents paramètres comme le suggère dbaffaleuf etc ... ce n'est qu'une piste évidemment ..
    ++
    Est ce que la mise en attente volontaire de l'exécution de la requête (voir script ci-dessous) peut participer à mieux stresser le système au-delà de la contention des sessions ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SET NOCOUNT ON
    DECLARE @START  INT, @STOP INT
    SET  @START=0 ;  SET @STOP = 1000 -- Nombre de transactions SELECT
    WAITFOR DELAY '00:00:05'   -- Mise en attente volontaire de requête 
    WHILE (@START < @STOP) 
    BEGIN
    BEGIN TRAN
    SELECT SUSER_NAME() + ' # ' + CONVERT(VARCHAR(12), GETDATE(), 114) 
    SELECT TOP 100 id_nom,nom FROM MaBase.dbo.MaTable
    SET @START = @START + 1
    COMMIT TRAN
    END
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #23
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    Non ce qui doit changer à chaque exécution c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 100 id_nom,nom FROM MaBase.dbo.MaTable
    Il faudrait par exemple une connexion qui fasse un UPDATE, une qui fasse un DELETE, une qui fasse un INSERT, plusieurs qui fassent des SELECT, + sur d'autres tables dans ton modèle. Il faut un référentiel de requêtes à exécuter, pour que chaque connexion vienne piocher la requête suivante et l'exécute, exactement comme dans SQL Server. Il faut un tableau de tâches à exécuter, un timer, un pool de threads, un objet de synchronisation... Et Transact ne peut pas t'apporter ça.

    David B.

  4. #24
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Alors là .. il faut que je regarde alors du côté .NET. (c'est ce que mikedavem a proposé au début)
    En tout merci pour toutes ces explications.
    Je vois mieux ce qu'il faut faire maintenant.
    Je vous tiens au courant de la suite...
    Thanks
    Etienne ZINZINDOHOUE
    Billets-Articles

  5. #25
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Rapidement j'ai trouvé ce lien : DBstressUtil
    Avec un exemple de script SQL préparé sous SQL 2000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    -- Sample of "test script" for DBstressUtil, to be submitted on the NORTHWIND database
    EXEC CustOrdersDetail @OrderID=10281
    EXEC CustOrdersDetail @OrderID=10282
    EXEC CustOrdersDetail @OrderID=11077
    SELECT * FROM Orders
    SELECT * FROM Orders ORDER BY CustomerID
    SELECT * FROM Orders ORDER BY CustomerID DESC
    EXEC CustOrderHist @CustomerID='ROMEY'
    EXEC CustOrderHist @CustomerID='OLDWO'
    EXEC CustOrderHist @CustomerID='HUNGO'
    Je pense l'utiliser avec mes script SQL 2005/2008

    Qu'en pensez-vous ?

    Merci
    Etienne ZINZINDOHOUE
    Billets-Articles

  6. #26
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    A première vue ça a l'air pas mal.

    David B.

  7. #27
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Hello Men
    Rapidement pour vous tenir au courant de la suite.

    Pour un test basic :

    0.) j'ai modifié le code source de DBstressUtil pour afficher les millisecondes pour le format date heure dans le fichier log.csv

    1.) J'ai préparé le fichier commands.txt qui contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM MaBase.dbo.MaTable
    UPDATE MaBase.dbo.MaTable SET Nom = 'SQLSERVER' WHERE ID >= 10 AND ID <= 100
    2.) J'ai fixé le nombre de "Client instances" = 2 (Deux threads)
    et gardé les autres valeurs (Interval et execution schift) par défaut

    Voici le résutat

    DateHeure | Instance |Nb commande |Durée (ms)
    -------------------------------------------------------------------
    08/10/2010 12:15:31.276 | 1 | 1 |1218,7578
    08/10/2010 12:15:31.948 | 2 | 1 |1578,1351
    08/10/2010 12:15:32.589 | 1 | 2 | 312,502
    08/10/2010 12:15:33.214 | 2 | 2 |265,6267
    Analyse
    =======
    Pour chaque requête (du fichier commands.txt) :
    - les Threads ne sont pas lancés au même moment [ heuresement ]
    - l'ordre de traitement est toujours Thread 1 puis Thread 2,

    Etape suivante
    ===========
    - Préparer mes series de requêtes pour le fichier d'entrée (commands.txt)
    - collecter les indicateurs de performances
    - puis analyse

    En tout cas merci à tous pour vos contributions pour ce post.
    Un grand MERCI aux deux David (dbaffaleuf et mikedavem)

    A+
    Etienne ZINZINDOHOUE
    Billets-Articles

Discussions similaires

  1. Outils de test de montée en charge
    Par shingo dans le forum Tests et Performance
    Réponses: 4
    Dernier message: 23/01/2012, 19h57
  2. [Test de montée en charge] Web Service
    Par tatemilio2 dans le forum Services Web
    Réponses: 3
    Dernier message: 11/05/2007, 15h10
  3. [OpenSTA] Test de montée en charge avec OpenSTA et plusieurs machines
    Par Rrominet dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 07/03/2007, 12h08
  4. Logiciel de test de montée en charge
    Par Avatar dans le forum Outils
    Réponses: 7
    Dernier message: 03/01/2007, 17h23
  5. Montée en charge quand sql tourne
    Par vvb dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/01/2006, 09h30

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