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

Outils SQL Server Discussion :

Bufferisation des écritures


Sujet :

Outils SQL Server

  1. #41
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 197
    Billets dans le blog
    1
    Par défaut
    Pourquoi le hint d'index ?
    La colonne TIME est-elle indexée ? Comment est déclaré l'index ?
    Quel volume de données est retourné ?
    Quel outil utilise la requête ? Un curseur est-il ouvert dessus ? READONLY FAST_FORWARD ou d'autres options (genre RANDOM ACCESS READWRITE) ?
    Enlève cet affreux "*" et indique la liste des colonnes dont tu as réellement besoin à la place.

  2. #42
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    On peut voir à ce niveau de volume des tables, que les dégâts ne sont pas énormes.
    Mais je ne comprends pas pourquoi le mode SNAPSHOT n'empèche pas le blocage des écritures.

  3. #43
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Pourquoi le hint d'index ?
    J'ai créé un index sur les 2 premiers champs, ce qui a grandement optimisé la requête. Sans le hint d'index, il semble ne pas l'utiliser car on passe de 10 à 50 secondes d temps d'exécution.

    Citation Envoyé par StringBuilder Voir le message
    La colonne TIME est-elle indexée ? Comment est déclaré l'index ?
    (La clé primaire est sur le champ "id")
    CREATE UNIQUE NONCLUSTERED INDEX [Index_TABLE_NAME_Id_TIME] ON [dbo].[TABLE_NAME]
    (
    [id] ASC,
    [TIME] ASC
    )
    Citation Envoyé par StringBuilder Voir le message
    Quel volume de données est retourné ?
    3600 x 24 environ = 86400 lignes

    Citation Envoyé par StringBuilder Voir le message
    Quel outil utilise la requête ? Un curseur est-il ouvert dessus ? READONLY FAST_FORWARD ou d'autres options (genre RANDOM ACCESS READWRITE) ?
    Microsoft SQLServer Management Studio

    Citation Envoyé par StringBuilder Voir le message
    Enlève cet affreux "*" et indique la liste des colonnes dont tu as réellement besoin à la place.
    C'est pareil, dixit un spécialiste (s'il en est) de SQL. De plus au niveau du soft, on doit garder une liste dynamique des champs à retourner.

  4. #44
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    non, ce n'est pas pareil !

    essayez avec vote requête, de remplacer le "*" par les deux colonnes id et time uniquement, vous verrez que la requête ira beaucoup plus vite, car elle n'aura alors plus besoin d'accéder à la table : l'index deviendra couvrant pour cette nouvelle requête.

    Concernant l'index, pourquoi un index nonclustered ? y a-t-il déjà un index cluster sur la table ?

    enfin, et surtout, il conviendrait d'inverser les deux colonnes dans l'index, pour mieux répondre à la requête en question (attention toutefois s'il y a d'autres requêtes).

    Avec un index cluster sur (time, id), la requête devrait être bien pus rapide.

  5. #45
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 010
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par cestpasmoinonplus Voir le message
    Oui, mais ils n'ont pas la contrainte d'écrire 1 ligne chaque seconde.
    Pour information... 1/1/2017, Microsoft SQL Server 2017 Enterprise Edition :
    http://www.tpc.org/tpce/results/tpce...ric_results=no

    11 357 transactions par seconde... Ces transactions écrivant beaucoup plus d'une ligne par seconde....

    Exemple :

    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
    start transaction
     
    Declare t_id TRADE_T
    Declare tr_t_id TRADE_T
    Declare now_dts DATETIME
     
    declare pending_list forselect TR_T_ID from TRADE_REQUESTorder by TR_T_ID
     
    open pending_list
    do until (end_of_pending_list) 
       fetch from pending_listintotr_t_idget_current_dts ( now_dts )
       insert into TRADE_HISTORY (TH_T_ID, TH_DTS, TH_ST_ID) 
          values (tr_t_id, TH_T_IDnow_dts, TH_DTSst_submitted_id, TH_ST_ID)
       update TRADE set T_ST_ID = st_canceled_id,T_DTS = now_dts 
          where T_ID = tr_t_id
       insert into TRADE_HISTORY (TH_T_ID, TH_DTS, TH_ST_ID
          values (tr_t_id, now_dts, st_canceled_id)} 
    end of pending_list
     
    delete from TRADE_REQUEST
    declare submit_list 
       for
          select T_ID from TRADE where T_ID >= trade_id and T_ST_ID = st_submitted_id
     
    open submit_list
    do until (end_of_submit_list) 
       fetch from submit_list into t_id
       get_current_dts ( now_dts 
       update TRADE set T_ST_ID = st_canceled_id, T_DTS = now_dts 
          whereT_ID =t_id
       insert into TRADE_HISTORY (TH_T_ID, TH_DTS, TH_ST_ID) 
       values ( TH_T_ID, TH_DTS, TH_ST_ID
    end of submit_list
     
    commit transaction
    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/ * * * * *

  6. #46
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    non, ce n'est pas pareil !
    essayez avec vote requête, de remplacer le "*" par les deux colonnes id et time uniquement, vous verrez que la requête ira beaucoup plus vite, car elle n'aura alors plus besoin d'accéder à la table : l'index deviendra couvrant pour cette nouvelle requête.
    Ok, mais je veux tous les champs.

    Citation Envoyé par aieeeuuuuu Voir le message
    Concernant l'index, pourquoi un index nonclustered ? y a-t-il déjà un index cluster sur la table ?
    Oui. Sur id.

    Citation Envoyé par aieeeuuuuu Voir le message
    enfin, et surtout, il conviendrait d'inverser les deux colonnes dans l'index, pour mieux répondre à la requête en question (attention toutefois s'il y a d'autres requêtes).
    Avec un index cluster sur (time, id), la requête devrait être bien pus rapide.
    Ok, mais on ne peut en avoir qu'un seul. Il existe sur id (sous-entendu : on ne peut pas y toucher) . Par contre, je ne vois pas l'intérêt d'inverser les deux colonnes ?

  7. #47
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Ah ouai, au temps pour moi, la capture n'est pas très explicite.
    Les premiers champs ramenés sont les id.

    Finalement, pour résoudre le problème, on va bufferiser les écritures. la boucle qui les envoie à SQLServer aura tout son temps pour le faire.
    Du coup, on s'affranchi des performances du SGBD et du hardware qui sont forcément aléatoires.
    En tout cas merci à tous de m'avoir permis de faire le tour du problème et bon WE.



    Juste pour finir, je viens de repasser la base en "non SNAPSHOT", la différence de freeze est énooooorme.

  8. #48
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par cestpasmoinonplus Voir le message
    Oui. Sur id.
    ??? s'il y a un index sur id, que l'on peut supposer unique, alors l'index non cluster sur (id, time) est redondant, et fort peu utile.
    Il n'est pas étonnant que le moteur ne l'utilise pas sans l'indicateur. Il est en revanche étrange que la requête mette plus de temps sans...
    Quelle est la structure de la table ?



    Citation Envoyé par cestpasmoinonplus Voir le message
    Ok, mais on ne peut en avoir qu'un seul. Il existe sur id (sous-entendu : on ne peut pas y toucher) . Par contre, je ne vois pas l'intérêt d'inverser les deux colonnes ?
    En inversant les deux colonnes, les lignes seront triées sur la colonne time, et le scan d'index deviendra une recherche d'index, bien plus performante.

    De fait, vous pouvez créer un index non cluster avec colonnes incluses afin d'éviter les accès table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE [UNIQUE ?] NONCLUSTERED INDEX CUIX_LaTable on LaTable(time) INCLUDE(les autres colonnes)
    ou, simplement indexer la colonne time, (ce qui fera un index plus léger, mais obligera à des accès table)

  9. #49
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    De fait, vous pouvez créer un index non cluster avec colonnes incluses afin d'éviter les accès table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE [UNIQUE ?] NONCLUSTERED INDEX CUIX_LaTable on LaTable(time) INCLUDE(les autres colonnes)
    ou, simplement indexer la colonne time, (ce qui fera un index plus léger, mais obligera à des accès table)
    Je pense que l'ID est totalement inutile (ou presque) car, sauf cas exceptionnel lié à un problème dans la procédure d'insertion, les ID et les TIME sont croissants tous deux dans le même ordre.

    Par conséquent, un index sur TIME uniquement ne devrait pas changer grand chose à TIME include (toutes les colonnes) car au final un BETWEEN sur TIME va retourner des lignes contigües dans des pages contigües, ce qui ne devrait pas être bien gênant par rapport à la lecture directe dans un index.

  10. #50
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Merci aieeeuuuuu , ça vaut le coup que je vérifie tout ça lundi.

  11. #51
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Je pense que l'ID est totalement inutile (ou presque) car, sauf cas exceptionnel lié à un problème dans la procédure d'insertion, les ID et les TIME sont croissants tous deux dans le même ordre.
    Tout juste StringBuilder. C'est tout à fait ça.
    Le problème est que je dois faire avec.

    Citation Envoyé par StringBuilder Voir le message
    Par conséquent, un index sur TIME uniquement ne devrait pas changer grand chose à TIME include (toutes les colonnes) car au final un BETWEEN sur TIME va retourner des lignes contigües dans des pages contigües, ce qui ne devrait pas être bien gênant par rapport à la lecture directe dans un index.
    Absolument.
    Mais en l'état actuel des tables, j'ai constaté qu'un select sur un index créé sur les deux champs id et TIME appelé avec le hint, était beaucoup plus rapide qu'un select par défaut. Ce qui n'est pas très logique à priori.

    Bon WE, moi je vais me saouler .

  12. #52
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 197
    Billets dans le blog
    1
    Par défaut
    Ce serait quand même bien de tester sans hint après avoir créé cet index :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    create index ix_time on matable (time);

    Si time est garanti unique, alors tu peux aussi tenter avec "create unique index" ça passe pas, tenter sans unique. Ca devrait pas changer grand chose de toute façon.

  13. #53
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 197
    Billets dans le blog
    1
    Par défaut
    Pour information, j'ai créé la table suivante, et je l'ai peuplée avec 100 millions de lignes.

    Code sql : 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
     
    create table t_time
    (
    	id int not null primary key identity,
    	[time] datetime not null,
    	col_a char(8) not null,
    	col_b int not null,
    	col_c decimal(10,2) not null,
    	col_d varbinary(8) not null
    );
    go
     
    declare @i int;
    declare @dte datetime;
     
    select @i = 100000, @dte = getdate();
     
    while @i > 0
    begin
    	with tmp ([time])
    	as
    	(
    		select dateadd(second, @i * -1000, @dte)
    		union all
    		select dateadd(second, 1, tmp.[time])
    		from tmp
    		where tmp.time < dateadd(second, ((@i - 1) * -1000) - 1, @dte)
     
    	)
    	insert into t_time ([time], col_a, col_b, col_c, col_d)
    	select [time], DATENAME(weekday, [time]), DATEPART(month, [time]), DATEPART(minute, [time]) + cast(DATEPART(second, [time]) as decimal) / 100, cast(DATEPART(nanosecond, [time]) as varbinary(8))
    	from tmp
    	option (maxrecursion 0);
     
    	set @i = @i - 1;
    end;
    go
     
     
    create index ix_time on t_time ([time]);
    go

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select count(*) from t_time
    -----------
    100000000

    (1 ligne affectée)
    La création, alimentation de la table et création de l'index ont duré 28 minutes en tout sur mon PC perso qui est un vieux Core i5-4750 (3,2 Ghz).

    Version de SQL Server :
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64)
    Jul 21 2018 07:47:45
    Copyright (C) 2017 Microsoft Corporation
    Developer Edition (64-bit) on Windows 10 Home 10.0 <X64> (Build 18342: )


    (1 ligne affectée)
    La base + log sont sur un vieux disque de portable de 500 Go d'une lenteur abominable.

    La requête suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select count(*)
    from t_time
    where [time] between '2018-01-01 12:34:56.798' and '2018-02-01 23:38:51.098'
    Est instantanée. (moins de 1 seconde)
    -----------
    126234

    (1 ligne affectée)
    La requête suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select *
    from t_time
    where [time] between '2018-01-01 12:34:56.798' and '2018-06-01 23:38:51.098'
    and id % 8 = 5 and col_c % 1 between .5 and .6
    Est aussi instantanée. (toujours moins de 1 seconde)
    id time col_a col_b col_c col_d
    ----------- ----------------------- -------- ----------- --------------------------------------- ------------------
    64006957 2018-01-02 03:56:54.320 mardi 1 56.54 0x1312D000
    64007013 2018-01-02 03:57:50.320 mardi 1 57.50 0x1312D000
    64007021 2018-01-02 03:57:58.320 mardi 1 57.58 0x1312D000
    64007077 2018-01-02 03:58:54.320 mardi 1 58.54 0x1312D000
    64007133 2018-01-02 03:59:50.320 mardi 1 59.50 0x1312D000
    64007141 2018-01-02 03:59:58.320 mardi 1 59.58 0x1312D000

    […]

    64421253 2018-01-06 23:01:50.320 samedi 1 1.50 0x1312D000
    64421261 2018-01-06 23:01:58.320 samedi 1 1.58 0x1312D000
    64423357 2018-01-06 23:36:54.320 samedi 1 36.54 0x1312D000
    64423413 2018-01-06 23:37:50.320 samedi 1 37.50 0x1312D000
    64423421 2018-01-06 23:37:58.320 samedi 1 37.58 0x1312D000
    64423237 2018-01-06 23:34:54.320 samedi 1 34.54 0x1312D000

    (11795*lignes affectées)
    J'oubliais : ça fait quelques mois que le ventilateur de mon CPU est grillé et que donc le CPU est fortement downclocké dès qu'il est un peu sollicité.

    Donc avec les éléments que tu donnes, y'a clairement un souci avec ta base ou ta requête...

  14. #54
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Pourquoi le hint d'index ?
    La colonne TIME est-elle indexée ? Comment est déclaré l'index ?
    Pour revenir sur l'index : finalement, ça marche aussi bien sur l'index TIME, mais en l'appelant explicitement : ... FROM NomTable WITH(INDEX(Index_NomTable_TIME)) .
    Bien qu'il existe, si je fais ... FROM NomTable , c'est beaucoup plus long.

  15. #55
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Pour information, j'ai créé la table suivante, et je l'ai peuplée avec 100 millions de lignes.
    Désolé si je dis une conn.... mais il ne te reste plus qu'à créer une appli qui écrit une ligne dans cette table avec une régularité de 1 seconde.
    Et, une fois cette appli démarrée, lancer ta requête, après avoir effacé le cache pour être sûr qu'elle ne bénéficie pas, ponctuellement, de l'optimisation du SGBD.

  16. #56
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 197
    Billets dans le blog
    1
    Par défaut
    Qu'est-ce que ça donne si tu fais un REBUILD de ton index ?
    Une mise à jour de statistiques ?

    C'est pas normal de devoir indiquer explicitement un HINT d'index, surtout sur une requête aussi triviale.
    Ca cache quelque chose d'autre.

  17. #57
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 010
    Billets dans le blog
    6
    Par défaut
    Quels sont les paramétrages de la base au sujet des stats ?
    Est-ce que le TF 2371 est actif ?

    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/ * * * * *

  18. #58
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Qu'est-ce que ça donne si tu fais un REBUILD de ton index ?
    Une mise à jour de statistiques ?

    C'est pas normal de devoir indiquer explicitement un HINT d'index, surtout sur une requête aussi triviale.
    Ca cache quelque chose d'autre.
    Ben, en fait j'ai essayé sur plusieurs tables, j'ai créé deux index juste pour essayer sur une table que je venais de créer, et il n'y a pas photo, la même requête lancée avec ou sans le hint c'est du simple au double pour la durée d"exécution.
    Pour la mise à jour de statistiques, je ne sais pas faire, je ne sais même pas de quoi ça parle . Je vais voir ce qu'il en est, ça ne me fera pas de mal, de toute façon.

  19. #59
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Quels sont les paramétrages de la base au sujet des stats ?
    Est-ce que le TF 2371 est actif ?

    A +
    Merci, je regarde cette histoire de stats.

  20. #60
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Ok pour les statistiques. J'ai à peu près compris,. Mais je n'ai trouvé aucune allusion à TF 2371.

    Question : Avez-vous touché à quelque chose sur ma base par la pensée ?
    Parce que depuis ce matin ma requête avec le hint d'index est plus lente que sans le hint. Je n'en puis plus

    Dois-je continuer à essayer d'y comprendre quelque chose ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Erreur de connexion, Bufferisation des rêquetes ?
    Par Bob7554 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/11/2007, 21h25
  2. Réponses: 3
    Dernier message: 20/05/2007, 21h35
  3. Quelques questions sur des écritures en perl
    Par Premium dans le forum Langage
    Réponses: 4
    Dernier message: 05/12/2006, 23h44
  4. [winpcap] Bufferisation des données capturées
    Par funtix dans le forum Développement
    Réponses: 4
    Dernier message: 07/09/2006, 20h24
  5. [CSS] Explication des écriture
    Par Yoshio dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/08/2006, 19h17

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