2009-06-05 5 views
1

Les rapports que j'utilise (et mettent à jour) prennent beaucoup de temps (certains prennent des heures). J'ai senti que c'était beaucoup trop long et j'ai demandé précédemment à ce sujet. Après avoir regardé longuement les différents sites Web qui traitent des performances SQL, ils prennent tous la position d'être DBA. Cependant, je ne le suis pas, et mes collègues non plus (je suppose que si nous avions un DBA, nous n'aurions pas ce problème).Mesures de performance simples pour SQL Server 2000

Ce que je veux est un moyen simple de retourner 10 ou plus si haut et exécuter des scripts les plus mauvais résultats. J'espérais qu'il y ait un bon réglage SET METRICS ON, mais je suppose que si c'était le cas, les sites ne continueraient pas à enregistrer des profils.

La dernière chose que je veux faire est de provoquer la performance de laisser tomber encore plus loin et l'enregistrement d'un profil ressemble à un tueur de performance.

+0

Dommage que vous ne puissiez pas passer à SQL Server 2008, ce qui vous dira ces choses. Le Moniteur d'activité affiche les principales requêtes selon plusieurs critères, ce qui vous permet de voir la requête et le plan d'exécution. Les rapports sont disponibles sur les requêtes, les tables et les index supérieurs selon divers critères, etc. –

Répondre

1

Vous avez au moins les options suivantes.

  • Examinez le plan d'une requête non performante dans SQL Analyzer et essayez de l'optimiser, requête par requête à partir de là.
  • ou utiliser un script (voir ci-dessous) pour vous donner des conseils en analysant les statistiques de SQLServer sur les index, vous pouvez créer.
  • ou utiliser le Database Engine Tuning Advisor pour suggérer et/ou créer des index pour vous accélérer vos requêtes
  • ou utilisez un outil comme redgate's SQL Response pour vous donner plus d'informations que vous pouvez digérer

En fin de compte, automatisé les outils vous mèneront loin. Cela peut même suffire dans votre cas mais gardez à l'esprit qu'il n'y a pas d'outil automatisé capable de surpasser un DBA qualifié pour le fait que les outils automatisés ne peuvent pas réécrire vos requêtes.


SET CONCAT_NULL_YIELDS_NULL OFF 
--Joining the views gives a nice picture of what indexes 
--would help and how much they would help 
SELECT 
    'CREATE INDEX IX_' + UPPER(REPLACE(REPLACE(COALESCE(equality_columns, inequality_columns), '[', ''), ']', '')) 
    + ' ON ' + d.statement + '(' + COALESCE(equality_columns, inequality_columns) 
    + CASE WHEN equality_columns IS NOT NULL THEN 
     CASE WHEN inequality_columns IS NOT NULL THEN ', ' + inequality_columns 
     END END 
    + ')' + CASE WHEN included_columns IS NOT NULL THEN ' INCLUDE (' + included_columns + ')' END 
    , object_name(object_id) 
    , d.* 
    , s.* 
FROM sys.dm_db_missing_index_details d 
     LEFT OUTER JOIN sys.dm_db_missing_index_groups g ON d.index_handle = g.index_handle 
     LEFT OUTER JOIN sys.dm_db_missing_index_group_stats s ON g.index_group_handle = s.group_handle 
WHERE database_id = db_id() 
ORDER BY avg_total_user_cost DESC 
+0

Cela donne 4 erreurs concernant les objets non valides. Par exemple: "Nom d'objet invalide 'sys.dm_db_missing_index_details'." –

+0

même que le mien ... dm_db_missing_index_groups est SQL2005 :( Je sens une occasion de mise à niveau;) –

+0

@ graham.reeds: désolé, il est en effet SQL2005 seulement. –

1

Vous devriez être en mesure de passer par la table sys.dm_exec_query_stats, qui conserve des informations sur toutes les requêtes sur une base de données.

SELECT creation_time 
    ,last_execution_time 
    ,total_physical_reads 
    ,total_logical_reads 
    ,total_logical_writes 
    , execution_count 
    , total_worker_time 
    , total_elapsed_time 
    , total_elapsed_time/execution_count avg_elapsed_time 
    ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, 
    ((CASE statement_end_offset 
     WHEN -1 THEN DATALENGTH(st.text) 
     ELSE qs.statement_end_offset END 
     - qs.statement_start_offset)/2) + 1) AS statement_text 
FROM sys.dm_exec_query_stats AS qs 
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st 
ORDER BY last_execution_time,total_elapsed_time/execution_count DESC; 

Vous donne des informations de base sur la durée de vie des requêtes.

+0

Cela ressemble à une autre question que j'ai vu lors de mes voyages - donne la même erreur de « Ligne 16: syntaxe incorrecte près de « POSTULER » » –

+0

ouais, mon mauvais ... CROSS APPLY est SQL2005. Je vais voir si je ne peux pas le réécrire avec un CROSS JOIN ... –

Questions connexes