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

Développement SQL Server Discussion :

Graves problèmes de performances (delai attente dépassé)


Sujet :

Développement SQL Server

  1. #21
    Membre émérite

    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
    Points : 2 856
    Points
    2 856
    Par défaut
    SQL SERVER a besoin de suffisamment de mémoire RAM pour charger les données afin de répondre rapidement aux requêtes. Plus il y a de données en mémoire plus les temps de réponse sont réduits... Dans ton cas SQL Server n'utilise que 2Go RAM ce qui est à mon avis insuffisant pour un serveur de base de données de production...
    Tu as mis le doigt sur un point important qu'il va falloir donner plus de détails :

    1. Le serveur de base de données n'est pas un serveur dédié au SGBD, quelles sont les autres applications hébergées sur cette machine ?

    cette machine héberge-t-elle des applications web ? des applications clients lourds ou autres ? est ce que IIS tourbe sur cette machine ? l'application qui appelle les procédures stockées dynamiques est installées sur la même machine que la base de données ?

    2. est ce qu'il y a un anti-virus qui tourne sur le serveur SQL ? si oui est ce que les fichiers des bases de données sont exclus du scan de l'anti-virus ?

    3. est ce que des applications java (JDk,SDK,JRE) tournent sur le serveur SQL ?

    Citation Envoyé par franckgar Voir le message
    Je viens de constater que mon client se sert du serveur pour stocker les fichiers de tous ses salariés et que par conséquent il ne restait que 9.8Go de libre sur les 92 de départ
    Quels types de fichiers ? Word ? Excel ? PDF ? donne-nous plus de détails sur les fichiers des salariés.
    Est ce que les salariés peuvent aussi lancer des impressions à depuis le serveur de bases de données ?

    Citation Envoyé par franckgar Voir le message
    Au vu de tout ce que j'ai pû lire, mes tables ne contiennent pas énormément de données (max 120000 pour les plus grosses) par contre je fais beaucoup de jointure sur des champs date et des clés étrangères.
    Le plus important c'est le nombre de pages occupées par les données et les index. Il ne faut pas se fier aux nombres de lignes dans les tables. La table qui a plus de lignes n'est pas forcément la plus grosse !

    Tu peux nous dire la taille des bases de données ?

    Que donnent cette requête ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT TOP 20 
    wait_type AS [Type Attente] -- Nom du type d'attente 
    ,wait_time_ms / 1000 AS [Temps Attente Total (s)] -- Temps d'attente (en seconde) 
    ,waiting_tasks_count AS [Nombre d'attente] -- Nombre d'attentes sur ce type d'attente. Ce compteur est incrémenté au début de chaque attente 
    ,CONVERT(DECIMAL(12,2), wait_time_ms * 100.0 / SUM(wait_time_ms) OVER()) AS [% Temps Attente] 
    FROM sys.dm_os_wait_stats 
    ORDER BY [% Temps Attente] DESC;
    Et celle-ci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT TOP 20  
    SUM(total_logical_reads + total_logical_writes) AS [Total ES]  
    ,SUM(total_logical_reads + total_logical_writes)/SUM(qs.execution_count) AS [Moyenne ES] 
    ,DB_NAME(qt.dbid) AS [DatabaseName] 
    FROM sys.dm_exec_query_stats qs 
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt 
    GROUP BY DB_NAME(qt.dbid) 
    ORDER BY [Total ES] DESC;
    Et cette dernière ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT TOP 20 creation_time,  
    total_worker_time/execution_count AS [Avg CPU Time],  
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,((CASE qs.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) AS st  
    ORDER BY creation_time DESC;

  2. #22
    Nouveau membre du Club
    Profil pro
    frTRYER
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : frTRYER

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Bonjour,
    La machine sur laquelle se trouve SQL server comporte 2 disques: le C de 10Go avec 3Go de libre et le D: de 92Go avec 9.8Go de libre. SQL Server tourne sur le D. sur le disque D 70Go sont occupés par des fichiers de type doc, pdf, jpg.
    2 autres applis tournent sur le D, cobian backup et une autre petite appli mais n'occupent que très peu de mémoire dans gestionnaire des taches.
    Autre chose l'appli rtvscan.exe (antivirus symantec). Je vais voir si je peux accéder à son paramétrage. Pas de Serveur ISS, d'appli java ou appli web.

    Pour les requêtes, voici les résultats:
    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
    SELECT TOP 20 
    wait_type AS [Type Attente] -- Nom du type d'attente 
    ,wait_time_ms / 1000 AS [Temps Attente Total (s)] -- Temps d'attente (en seconde) 
    ,waiting_tasks_count AS [Nombre d attente] -- Nombre d'attentes sur ce type d'attente. Ce compteur est incrémenté au début de chaque attente 
    ,CONVERT(DECIMAL(12,2), wait_time_ms * 100.0 / SUM(wait_time_ms) OVER()) AS [% Temps Attente] 
    FROM sys.dm_os_wait_stats 
    ORDER BY [% Temps Attente] DESC; 
     
    LAZYWRITER_SLEEP	547	582	48.54
    SQLTRACE_BUFFER_FLUSH	544	137	48.21
    PAGEIOLATCH_SH	24	5955	2.15
    IO_COMPLETION	3	428	0.30
    PAGEIOLATCH_EX	2	404	0.22
    ASYNC_NETWORK_IO	2	1931	0.22
    SOS_SCHEDULER_YIELD	0	9366	0.08
    MISCELLANEOUS	0	4	0.05
    SLEEP_BPOOL_FLUSH	0	105	0.05
    ASYNC_IO_COMPLETION	0	1	0.03
    CHKPT	0	1	0.03
    SLEEP_SYSTEMTASK	0	1	0.03
    PAGEIOLATCH_UP	0	15	0.02
    WRITELOG	0	21	0.02
    MSQL_XP	0	43	0.02
    SLEEP_TASK	0	472	0.01
    LCK_M_RX_U	0	0	0.00
    LCK_M_RX_S	0	0	0.00
    LCK_M_RIn_X	0	0	0.00
    LCK_M_RIn_U	0	0	0.00
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT TOP 20  
    SUM(total_logical_reads + total_logical_writes) AS [Total ES]  
    ,SUM(total_logical_reads + total_logical_writes)/SUM(qs.execution_count) AS [Moyenne ES] 
    ,DB_NAME(qt.dbid) AS [DatabaseName] 
    FROM sys.dm_exec_query_stats qs 
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt 
    GROUP BY DB_NAME(qt.dbid) 
    ORDER BY [Total ES] DESC;
     
    2249322	158	Sociel
    1724854	629	NULL
    7	7	msdb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT TOP 20 creation_time,  
    total_worker_time/execution_count AS [Avg CPU Time],  
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,((CASE qs.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) AS st  
    ORDER BY creation_time DESC;
     
    2011-01-25 09:46:13.560	147
    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
    SELECT dtb.name AS [Name] FROM master.dbo.sysdatabases AS dtb ORDER BY [Name] ASC 
    2011-01-25 09:46:05.293	81468	SELECT  TOP 100 PersP.Nom,PersP.Prenom,S.DateDerniereVisiteMedicale,S.SurveillanceMedicale FROM dbo.SALARIE as S,dbo.PERSONNE_PHYSIQUE PersP WHERE S.Id=PersP.Id  AND S.Id IN (SELECT DISTINCT(SAL.Id) FROM dbo.SALARIE as SAL, dbo.PERSONNE P,dbo.CONTRAT_TRAVAIL CT  WHERE SAL.SurveillanceMedicale IS NOT NULL AND P.Utilisation = 1  AND SAL.GererRappelVisiteMedicale = 1  AND SAL.Id=P.Id  AND SAL.Id=CT.Salarie AND (CT.DateFin IS NULL OR CONVERT(CHAR(10),CT.DateFin,121)>'2011-01-25') AND (SAL.DomaineGestion is null OR  (SELECT COUNT(*) from dbo.R_DOMAINEGESTION_USERS WHERE UserId='DFDE0727-6ECA-468F-B6B7-9C3F011EFB36') =0 OR SAL.DomaineGestion IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='DFDE0727-6ECA-468F-B6B7-9C3F011EFB36'))) ORDER BY S.DateDerniereVisiteMedicale ASC, PersP.Nom ASC;
    2011-01-25 09:46:04.500	327780	SELECT  TOP 100 PersP.Nom, PersP.Prenom, S.DernierEntretienAnnuel  FROM dbo.SALARIE as S,dbo.PERSONNE_PHYSIQUE PersP WHERE S.Id=PersP.Id  AND S.Id IN (SELECT DISTINCT(SAL.Id) FROM dbo.SALARIE as SAL,dbo.PERSONNE P,dbo.CONTRAT_TRAVAIL CT  WHERE (SAL.DernierEntretienAnnuel IS NULL OR CONVERT(CHAR(10),SAL.DernierEntretienAnnuel,121) <'2011-02-25') AND P.Utilisation = 1  AND SAL.Id=P.Id  AND SAL.Id=CT.Salarie AND (CT.DateFin IS NULL OR CONVERT(CHAR(10),CT.DateFin,121)>'2011-01-25') AND (SAL.DomaineGestion is null OR  (SELECT COUNT(*) from dbo.R_DOMAINEGESTION_USERS WHERE UserId='DFDE0727-6ECA-468F-B6B7-9C3F011EFB36') =0 OR SAL.DomaineGestion IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='DFDE0727-6ECA-468F-B6B7-9C3F011EFB36'))) ORDER BY S.DernierEntretienAnnuel ASC, PersP.Nom ASC;
    2011-01-25 09:46:02.967	313	SELECT * FROM dbo.CODIFICATION T1, dbo.CODE_FONCTION T2  LEFT JOIN dbo.CODIFICATION_DADSU T3 ON T2.Id=T3.Id LEFT JOIN dbo.CODIFICATION_DDT T4 ON T2.Id=T4.Id WHERE T1.Id='588CCAB7-7551-4A01-B5B0-9CC500F34866' AND T1.Id=T2.Id;
    2011-01-25 09:46:00.937	399480	SELECT T2.*,T1.* FROM dbo.HEURE_PLANIFIEE T1,dbo.HEURE T2   LEFT JOIN dbo.SALARIE T3 on T2.Salarie=T3.Id LEFT JOIN dbo.USAGER T4 on T2.Usager=T4.Id  WHERE T1.Id=T2.Id  AND ((CONVERT(CHAR(19),T1.DateFinAvecTrajet,121) >='2011-01-24 00:00:00' AND CONVERT(CHAR(19),T1.DateDebutAvecTrajet,121) <='2011-01-30 23:59:59' AND T1.RecurrenceInfo IS NULL ) OR (CONVERT(CHAR(10),T1.DateFinAvecTrajet,121) >='2011-01-24' AND CONVERT(CHAR(10),T1.DateDebutAvecTrajet,121) <='2011-01-30' AND T1.RecurrenceInfo IS NOT NULL )) AND T2.Salarie= '6DED75DA-1A4D-4695-80FD-99900133819F' AND ((T3.DomaineGestion IS NULL  OR (SELECT COUNT(*) FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62') = 0 OR T3.DomaineGestion IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62')) OR (T4.DomaineGestion IS NULL  OR (SELECT COUNT(*) FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62') = 0 OR T4.DomaineGestion IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62')));
    2011-01-25 09:45:59.810	676	SELECT T1.* FROM dbo.ABSENCE T1, dbo.SALARIE T2  WHERE T1.Salarie=T2.Id  AND CONVERT(CHAR(19),T1.DateFin,121) >='2011-01-24 00:00:00' AND CONVERT(CHAR(19),T1.DateDebut,121) <='2011-01-30 23:59:59' AND T1.Salarie= '6DED75DA-1A4D-4695-80FD-99900133819F' AND T1.AFFICHERDANSPLANNING=1  AND (T2.DomaineGestion IS NULL  OR (SELECT COUNT(*) FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62') = 0 OR T2.DomaineGestion IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62')) ORDER BY T1.DateDebut DESC;
    2011-01-25 09:45:55.530	198324	SELECT TOP 99999 T1.*,T2.*,T3.* FROM dbo.PERSONNE T1, dbo.PERSONNE_PHYSIQUE T2, dbo.SALARIE T3 WHERE T1.Id=T2.Id and T2.Id=T3.Id  AND T1.Utilisation = 1 AND (T3.DomaineGestion IS NULL  OR (SELECT COUNT(*) FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62' ) = 0  OR T3.DomaineGestion IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62')) AND ( (UPPER(T2.Nom) LIKE UPPER('lamy%') OR UPPER(T2.Prenom) LIKE UPPER('lamy%') OR UPPER(T2.NomJeuneFille) LIKE UPPER('lamy%') OR T2.NumeroRegimeGeneral = 'lamy' OR CAST(T3.Matricule as NVARCHAR(6)) = 'lamy' OR T1.AP_Telephone = 'lamy' OR T2.TelephoneMobile = 'lamy' OR T1.AP_Fax = 'lamy')) ORDER BY T2.Nom , T2.Prenom ;
    2011-01-25 09:45:43.873	72570
     
    	SELECT  TOP 100 PersP.Nom,PersP.Prenom,S.DateDerniereVisiteMedicale,S.SurveillanceMedicale FROM dbo.SALARIE as S,dbo.PERSONNE_PHYSIQUE PersP WHERE S.Id=PersP.Id  AND S.Id IN (SELECT DISTINCT(SAL.Id) FROM dbo.SALARIE as SAL, dbo.PERSONNE P,dbo.CONTRAT_TRAVAIL CT  WHERE SAL.SurveillanceMedicale IS NOT NULL AND P.Utilisation = 1  AND SAL.GererRappelVisiteMedicale = 1  AND SAL.Id=P.Id  AND SAL.Id=CT.Salarie AND (CT.DateFin IS NULL OR CONVERT(CHAR(10),CT.DateFin,121)>'2011-01-25') AND (SAL.DomaineGestion is null OR  (SELECT COUNT(*) from dbo.R_DOMAINEGESTION_USERS WHERE UserId='2222ABED-A948-4913-9A24-99AF01170F80') =0 OR SAL.DomaineGestion IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='2222ABED-A948-4913-9A24-99AF01170F80'))) ORDER BY S.DateDerniereVisiteMedicale ASC, PersP.Nom ASC;
    2011-01-25 09:45:42.750	72048	SELECT  TOP 100 PersP.Nom,PersP.Prenom,S.DateDerniereVisiteMedicale,S.SurveillanceMedicale FROM dbo.SALARIE as S,dbo.PERSONNE_PHYSIQUE PersP WHERE S.Id=PersP.Id  AND S.Id IN (SELECT DISTINCT(SAL.Id) FROM dbo.SALARIE as SAL, dbo.PERSONNE P,dbo.CONTRAT_TRAVAIL CT  WHERE SAL.SurveillanceMedicale IS NOT NULL AND P.Utilisation = 1  AND SAL.GererRappelVisiteMedicale = 1  AND SAL.Id=P.Id  AND SAL.Id=CT.Salarie AND (CT.DateFin IS NULL OR CONVERT(CHAR(10),CT.DateFin,121)>'2011-01-25') AND (SAL.DomaineGestion is null OR  (SELECT COUNT(*) from dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62') =0 OR SAL.DomaineGestion IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62'))) ORDER BY S.DateDerniereVisiteMedicale ASC, PersP.Nom ASC;
    2011-01-25 09:45:42.733	172660	SELECT  TOP 100 PersP.Nom, PersP.Prenom, S.DernierEntretienAnnuel  FROM dbo.SALARIE as S,dbo.PERSONNE_PHYSIQUE PersP WHERE S.Id=PersP.Id  AND S.Id IN (SELECT DISTINCT(SAL.Id) FROM dbo.SALARIE as SAL,dbo.PERSONNE P,dbo.CONTRAT_TRAVAIL CT  WHERE (SAL.DernierEntretienAnnuel IS NULL OR CONVERT(CHAR(10),SAL.DernierEntretienAnnuel,121) <'2011-02-25') AND P.Utilisation = 1  AND SAL.Id=P.Id  AND SAL.Id=CT.Salarie AND (CT.DateFin IS NULL OR CONVERT(CHAR(10),CT.DateFin,121)>'2011-01-25') AND (SAL.DomaineGestion is null OR  (SELECT COUNT(*) from dbo.R_DOMAINEGESTION_USERS WHERE UserId='2222ABED-A948-4913-9A24-99AF01170F80') =0 OR SAL.DomaineGestion IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='2222ABED-A948-4913-9A24-99AF01170F80'))) ORDER BY S.DernierEntretienAnnuel ASC, PersP.Nom ASC;
    2011-01-25 09:45:42.187	209933	SELECT  TOP 100 PersP.Nom, PersP.Prenom, S.DernierEntretienAnnuel  FROM dbo.SALARIE as S,dbo.PERSONNE_PHYSIQUE PersP WHERE S.Id=PersP.Id  AND S.Id IN (SELECT DISTINCT(SAL.Id) FROM dbo.SALARIE as SAL,dbo.PERSONNE P,dbo.CONTRAT_TRAVAIL CT  WHERE (SAL.DernierEntretienAnnuel IS NULL OR CONVERT(CHAR(10),SAL.DernierEntretienAnnuel,121) <'2011-02-25') AND P.Utilisation = 1  AND SAL.Id=P.Id  AND SAL.Id=CT.Salarie AND (CT.DateFin IS NULL OR CONVERT(CHAR(10),CT.DateFin,121)>'2011-01-25') AND (SAL.DomaineGestion is null OR  (SELECT COUNT(*) from dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62') =0 OR SAL.DomaineGestion IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62'))) ORDER BY S.DernierEntretienAnnuel ASC, PersP.Nom ASC;
    2011-01-25 09:44:23.483	2737	SELECT TOP 20   wait_type AS [Type Attente] -- Nom du type d'attente   ,wait_time_ms / 1000 AS [Temps Attente Total (s)] -- Temps d'attente (en seconde)   ,waiting_tasks_count AS [Nombre d'attente] -- Nombre d'attentes sur ce type d'attente. Ce compteur est incrémenté au début de chaque attente   ,CONVERT(DECIMAL(12,2), wait_time_ms * 100.0 / SUM(wait_time_ms) OVER()) AS [% Temps Attente]   FROM sys.dm_os_wait_stats   ORDER BY [% Temps Attente] DESC;   
    2011-01-25 09:44:16.700	173	SELECT CONVERT([bit],has_dbaccess([dtb].[name]),0) [IsAccessible] FROM [master].[sys].[databases] [dtb] WHERE [dtb].[name]=@1
    2011-01-25 09:44:14.920	548	SELECT dtb.name AS [Database_Name], 'Server[@Name=' + quotename(CAST(serverproperty(N'Servername') AS sysname),'''') + ']' + '/Database[@Name=' + quotename(dtb.name,'''') + ']' AS [Database_Urn],   case       when DATABASEPROPERTY(dtb.name,'IsShutDown') is null then 0x200       else 0   end |  case       when 1 = dtb.is_in_standby then 0x40       else 0   end |  case       when 1 = dtb.is_cleanly_shutdown then 0x80       else 0   end |  case dtb.state       when 1 then 0x2         when 2 then 0x8       when 3 then 0x4       when 4 then 0x10       when 5 then 0x100       when 6 then 0x20       else 1  end               AS [Database_Status], dtb.compatibility_level AS [Database_CompatibilityLevel], dmi.mirroring_role AS [Database_MirroringRole], coalesce(dmi.mirroring_state + 1, 0) AS [Database_MirroringStatus], dtb.recovery_model AS [RecoveryModel], dtb.user_access AS [UserAccess], dtb.is_read_only AS [ReadOnly], dtb.name AS [Database_DatabaseName2] FROM master.sys.databases AS dtb LEFT OUTER JOIN sys.database_mirroring AS dmi ON dmi.database_id = dtb.database_id  WHERE (CAST(case when dtb.name in ('master','model','msdb','tempdb') then 1 else dtb.is_distributor end AS bit)=0 and CAST(isnull(dtb.source_database_id, 0) AS bit)=0) ORDER BY [Database_Name] ASC
    2011-01-25 09:43:50.857	215	SELECT CAST(serverproperty(N'Servername') AS sysname) AS [Name], ISNULL(tsgsp.msx_server_name,N'') AS [MsxServerName], tsgsp.sqlagent_type AS [JobServerType], CAST(tsgsp.sqlserver_restart AS bit) AS [SqlServerRestart], CAST(tsgsp.monitor_autostart AS bit) AS [SqlAgentRestart], tsgsp.jobhistory_max_rows AS [MaximumHistoryRows], tsgsp.jobhistory_max_rows_per_job AS [MaximumJobHistoryRows], tsgsp.errorlog_file AS [ErrorLogFile], tsgsp.errorlogging_level AS [AgentLogLevel], ISNULL(tsgsp.error_recipient,N'') AS [NetSendRecipient], tsgsp.job_shutdown_timeout AS [AgentShutdownWaitTime], ISNULL(tsgsp.email_profile,N'') AS [SqlAgentMailProfile], CAST(tsgsp.email_save_in_sent_folder AS bit) AS [SaveInSentFolder], CAST(tsgsp.oem_errorlog AS bit) AS [WriteOemErrorLog], CAST(tsgsp.cpu_poller_enabled AS bit) AS [IsCpuPollingEnabled], tsgsp.idle_cpu_percent AS [IdleCpuPercentage], tsgsp.idle_cpu_duration AS [IdleCpuDuration], tsgsp.login_timeout AS [LoginTimeout], ISNULL(tsgsp.host_login_name,N'') AS [HostLoginName], ISNULL(tsgsp.local_host_server,N'') AS [LocalHostAlias], CAST(tsgsp.auto_start AS bit) AS [SqlAgentAutoStart], CAST(tsgsp.replace_alert_tokens_enabled AS bit) AS [ReplaceAlertTokensEnabled], ISNULL(@DatabaseMailProfile,N'') AS [DatabaseMailProfile], ISNULL(@AgentMailType, 0) AS [AgentMailType], CAST(1 AS bit) AS [SysAdminOnly] FROM #tmp_sp_get_sqlagent_properties AS tsgsp   
    2011-01-25 09:43:50.793	265	SELECT auto_start = CASE @auto_start                          WHEN 2 THEN 1 -- 2 means auto-start                          WHEN 3 THEN 0 -- 3 means don't auto-start                          ELSE 0        -- Safety net                        END,           msx_server_name = @msx_server_name,           sqlagent_type = (SELECT CASE                                      WHEN (COUNT(*) = 0) AND (ISNULL(DATALENGTH(@msx_server_name), 0) = 0) THEN 1 -- Standalone                                      WHEN (COUNT(*) = 0) AND (ISNULL(DATALENGTH(@msx_server_name), 0) > 0) THEN 2 -- TSX                                      WHEN (COUNT(*) > 0) AND (ISNULL(DATALENGTH(@msx_server_name), 0) = 0) THEN 3 -- MSX                                      WHEN (COUNT(*) > 0) AND (ISNULL(DATALENGTH(@msx_server_name), 0) > 0) THEN 0 -- Multi-Level MSX (currently invalid)                                      ELSE 0 -- Invalid                                    END                             FROM msdb.dbo.systargetservers),           startup_account = @startup_account,             -- Non-SQLDMO exposed properties           sqlserver_restart = ISNULL(@sqlserver_restart, 1),           jobhistory_max_rows = @jobhistory_max_rows,           jobhistory_max_rows_per_job = @jobhistory_max_rows_per_job,           errorlog_file = @errorlog_file,           errorlogging_level = ISNULL(@errorlogging_level, 7),           error_recipient = @error_recipient,           monitor_autostart = ISNULL(@monitor_autostart, 0),           local_host_server = @local_host_server,           job_shutdown_timeout = ISNULL(@job_shutdown_timeout, 15),           cmdexec_account = @cmdexec_account,           regular_connections = ISNULL(@regular_connections, 0),           host_login_name = @host_login_name,           host_login_password = @host_login_password,           login_timeout = ISNULL(@login_timeout, 30),           idle_cpu_percent = ISNULL(@idle_cpu_percent, 10),           idle_cpu_duration = ISNULL(@idle_cpu_duration, 600),           oem_errorlog = ISNULL(@oem_errorlog, 0),           sysadmin_only = NULL,           email_profile = @email_profile,           email_save_in_sent_folder = ISNULL(@email_save_in_sent_folder, 0),           cpu_poller_enabled = ISNULL(@cpu_poller_enabled, 0),           alert_replace_runtime_tokens = ISNULL(@alert_replace_runtime_tokens, 0)  
    2011-01-25 09:43:50.700	34677	insert into #tmp_sp_get_sqlagent_properties(auto_start, msx_server_name, sqlagent_type, startup_account, sqlserver_restart, jobhistory_max_rows, jobhistory_max_rows_per_job, errorlog_file, errorlogging_level, error_recipient, monitor_autostart, local_host_server, job_shutdown_timeout, cmdexec_account, regular_connections, host_login_name, host_login_password, login_timeout, idle_cpu_percent, idle_cpu_duration, oem_errorlog, sysadmin_only, email_profile, email_save_in_sent_folder, cpu_poller_enabled, replace_alert_tokens_enabled)    exec msdb.dbo.sp_get_sqlagent_properties                      
    2011-01-25 09:43:50.623	180	SELECT dtb.collation_name AS [Collation], dtb.name AS [DatabaseName2] FROM master.sys.databases AS dtb WHERE (dtb.name=N'msdb')
    2011-01-25 09:43:50.607	139	SELECT [dtb].[name] [Name] FROM [master].[sys].[databases] [dtb] WHERE [dtb].[name]=@1
    2011-01-25 09:43:50.543	14628	SELECT CAST(COLLATIONPROPERTY(name, 'LCID') AS int) AS [LocaleID] FROM sys.fn_helpcollations() cl WHERE (cl.name=N'French_CI_AS')

  3. #23
    Membre émérite

    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
    Points : 2 856
    Points
    2 856
    Par défaut
    Montre aussi le résultat de cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT databasepropertyex('Sociel','recovery')

  4. #24
    Membre émérite

    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
    Points : 2 856
    Points
    2 856
    Par défaut
    Affiche les résultats des 2 requêtes suivantes :

    1.
    --===========================================
    --> Afficher les 20 dernières requêtes les plus consommatrices de CPU
    --==============================================*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TOP 20 total_worker_time/execution_count AS [Avg CPU Time],  
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,((CASE qs.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) AS st  
    ORDER BY total_worker_time/execution_count DESC;

    2.
    --===============================
    --> Afficher les 20 requêtes les + fréquemment exécutées
    --=================================

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT TOP 20 creation_time,  
    execution_count,  
    total_worker_time/execution_count AS [Avg CPU Time],  
    total_logical_reads,  
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,((CASE qs.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) AS st  
    ORDER BY execution_count DESC;

  5. #25
    Nouveau membre du Club
    Profil pro
    frTRYER
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : frTRYER

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Voici les réponses des requêtes (j'ai tronqué les libellés des rquêtes pour que ça puisse être lisible)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT databasepropertyex('Sociel','recovery')
     
    SIMPLE

    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
    SELECT TOP 20 total_worker_time/execution_count AS [Avg CPU Time],  
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,((CASE qs.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) AS st  
    ORDER BY total_worker_time/execution_count DESC;
     
     
    1040588	SELECT *From dbo.PERSONNE ....
    659905	SELECT T2.*,T1.* FROM .... 
    651015	SELECT T2.*,T1.* FROM ....
    624882	SELECT T2.*,T1.* FROM ....  
    612892	SELECT T2.*,T1.* FROM ....
    575869	SELECT *From dbo.PERSONNE ....           
    551202	SELECT T2.*,T1.* FROM .... 
    543670	SELECT T2.*,T1.* FROM .... 
    520626	SELECT T2.*,T1.* FROM .... 
    514253	SELECT T2.*,T1.* FROM .... 
    466515	SELECT T2.*,T1.* FROM .... 
    445365	SELECT T2.*,T1.* FROM ....   
    430460	SELECT CTD.Id,CTD.TypeSaisie,CTD.Visible,....
    416036	SELECT T2.*,T1.* FROM ...
    412237	SELECT TOP 5 T1.*,T2.*,T3.* ....
    410888	SELECT TOP 5 T1.*,T2.*,T3.* ....  
    409726	SELECT T2.*,T1.* FROM .... 
    409619	SELECT TOP 50 T1.*,T2.*,T3.* ....   
    408440	SELECT TOP 5 T1.*,T2.*,T3.* .... 
    407484	SELECT T2.*,T1.* FROM ....

    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
    SELECT TOP 20 creation_time,  
    execution_count,  
    total_worker_time/execution_count AS [Avg CPU Time],  
    total_logical_reads,  
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1,((CASE qs.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) AS st  
    ORDER BY execution_count DESC;
     
    2011-01-25 10:37:19.293	17360	45	34720	SELECT *   FROM dbo.ARTICLE .... 
    2011-01-25 10:37:19.280	15043	45	30086	SELECT *   FROM dbo.ARTICLE_....   
    2011-01-25 10:37:01.233	12358	214	156225	SELECT T3.*,T2.*,T1.*   FROM ....   
    2011-01-25 10:37:19.327	10098	212	129657	SELECT T3.*,T2.*,T1.*   FROM ....    
    2011-01-25 11:17:59.793	9240	786	104552	SELECT *   FROM .... 
    2011-01-25 10:37:34.170	5995	222	66854	SELECT T3.*,T2.*,T1.*   FROM ....   
    2011-01-25 10:37:19.263	5551	42	11102	SELECT @iNb=COUNT(*)   FROM ....      
    2011-01-25 10:37:19.577	4456	90	13358	SELECT *   FROM dbo.ACCORD T1 ....  
    2011-01-25 10:37:19.467	4355	150	39215	SELECT 0 as TypePEC,T2.*,T1.* FROM .... 
    2011-01-25 10:36:43.107	2922	46	8766	SELECT *   FROM dbo.VILLE T1 ....   
    2011-01-25 10:37:19.263	2800	181	64108	SELECT 0 as TypeDossier, T2.*,T1.*  ....   
    2011-01-25 10:37:19.263	2751	199	58839	SELECT 1 as TypeDossier, T2.*,T1.*  ....  
    2011-01-25 10:46:45.107	2345	101	18760	SELECT * FROM dbo.CODIFICATION T1,.... 
    2011-01-25 10:37:19.670	2106	27955	15891983	SELECT ISNULL(SUM(CASE T4.TEFacturable .... 
    2011-01-25 10:37:02.310	1631	153	13965	SELECT 0 as TypeContrat,T1.*,T3.*,T2.* ....  
    2011-01-25 10:37:02.373	1631	75	6766	SELECT 1 as TypeContrat,T1.*,T3.*,T2.*  ....   
    2011-01-25 10:37:02.187	1622	55	3320	SELECT * FROM dbo.ABSENCE_MENSUELLE .... 
    2011-01-25 10:36:43.200	1586	220	24462	SELECT T3.*,T2.*,T1.*   .... 
    2011-01-25 10:37:19.763	1450	98	11600	SELECT * FROM dbo.CODIFICATION T1.... 
    2011-01-25 10:36:22.857	1440	79	11528	SELECT * FROM dbo.CODIFICATION T1....

    Est ce que les temps du CPU sont exorbitants? Ce matin c'est la catastrophe, le client m'a appelé déjà 3 fois depuis 8h ce matin pour me dire qu'ils sont bloqués. J'ai arrêté et redémarrer le service SQL mais au bout d'une heure, boum c'est reparti les messages ressurgissent.

  6. #26
    Membre émérite

    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
    Points : 2 856
    Points
    2 856
    Par défaut
    --> Il faut expliquer au client qu'il faut un serveur de base de données dédié :
    séparer les 70 Go de fichiers .doc, .pdf, .jpg du serveur SQL.

    --> Penser à avoir une machine plus performante, là on est sur du SQL SERVER 2005 qui tourne sur WINDOWS 2000

    --> Exclure du scan de l'antivirus, les fichiers de la base "Sociel"

    --> Presque toutes les requêtes sont des SELECT * ! donc va ramener toutes les colonnes des tables concernées !? a-t-on besoin de toutes les colonnes pour les traitements ? enfin bref

    --> il faut optimiser (réécrire) les requêtes suivantes :

    1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT T2.*,T1.* 
    FROM dbo.HEURE_PLANIFIEE T1,dbo.HEURE T2 LEFT JOIN dbo.SALARIE T3 on T2.Salarie=T3.Id LEFT JOIN dbo.USAGER T4 on T2.Usager=T4.Id 
    WHERE T1.Id=T2.Id AND ((CONVERT(CHAR(19),T1.DateFinAvecTrajet,121) >='2011-01-24 00:00:00' 
    AND CONVERT(CHAR(19),T1.DateDebutAvecTrajet,121) <='2011-01-30 23:59:59' AND T1.RecurrenceInfo IS NULL ) 
    OR (CONVERT(CHAR(10),T1.DateFinAvecTrajet,121) >='2011-01-24' AND CONVERT(CHAR(10),T1.DateDebutAvecTrajet,121) <='2011-01-30' 
    AND T1.RecurrenceInfo IS NOT NULL )) AND T2.Salarie= '6DED75DA-1A4D-4695-80FD-99900133819F' AND ((T3.DomaineGestion IS NULL 
    OR (SELECT COUNT(*) FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62') = 0 
    OR T3.DomaineGestion 
    IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62')) 
    OR (T4.DomaineGestion IS NULL OR (SELECT COUNT(*) FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62') = 0 
    OR T4.DomaineGestion 
    IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62')));
    2.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT TOP 99999 T1.*,T2.*,T3.* FROM dbo.PERSONNE T1, dbo.PERSONNE_PHYSIQUE T2, dbo.SALARIE T3 
    WHERE T1.Id=T2.Id and T2.Id=T3.Id AND T1.Utilisation = 1 AND (T3.DomaineGestion IS NULL 
    OR (SELECT COUNT(*) FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62' ) = 0 
    OR T3.DomaineGestion IN (SELECT DomaineGestion FROM dbo.R_DOMAINEGESTION_USERS WHERE UserId='74558278-87CB-46B2-B90A-9B1100E1CE62')) 
    AND ( (UPPER(T2.Nom) LIKE UPPER('lamy%') 
    OR UPPER(T2.Prenom) LIKE UPPER('lamy%') 
    OR UPPER(T2.NomJeuneFille) LIKE UPPER('lamy%') 
    OR T2.NumeroRegimeGeneral = 'lamy' 
    OR CAST(T3.Matricule as NVARCHAR(6)) = 'lamy' 
    OR T1.AP_Telephone = 'lamy' 
    OR T2.TelephoneMobile = 'lamy' 
    OR T1.AP_Fax = 'lamy')) 
    ORDER BY T2.Nom , T2.Prenom ;

    3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *FROM dbo.PERSONNE ....

  7. #27
    Nouveau membre du Club
    Profil pro
    frTRYER
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : frTRYER

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Encore merci de ton aide et de tes réponses. J'ai déjà annoncé au client qu'il faudrait déplacer le répertoire des fichiers sur un autre poste. Pour ce qui est des requêtes SQL, je vais les revoir pour tenter d'optimiser tout ça.

    Pour l'instant les index et les données sont dans le même groupe de fichier (Primary). Est ce que ça pourrait arranger les choses de mettre les index dans un autre groupe de fichiers?

  8. #28
    Membre émérite

    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
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par franckgar Voir le message
    Encore merci de ton aide et de tes réponses. J'ai déjà annoncé au client qu'il faudrait déplacer le répertoire des fichiers sur un autre poste. Pour ce qui est des requêtes SQL, je vais les revoir pour tenter d'optimiser tout ça.

    Pour l'instant les index et les données sont dans le même groupe de fichier (Primary). Est ce que ça pourrait arranger les choses de mettre les index dans un autre groupe de fichiers?
    De loin ça va être difficile de trancher. Par contre s'il y a vraiment urgence, histoire de ne pas trop pénaliser le client, tu peux solliciter l'expertise de SQLPro ou dbaffaleuf (pour ne pas les citer, mais c'est parce que je connais la force de frappe de ces experts que je peux les citer). Tu peux leur envoyer via ce forum un message privé MP afin de voir avec eux les conditions de faisabilité.
    Du courage
    A+

  9. #29
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    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 : 21 849
    Points : 52 982
    Points
    52 982
    Billets dans le blog
    6
    Par défaut
    1) SQL Server a besoin d'un serveur dédié pour fonctionner correctement. Si le serveur n'est pas dédié, alors SQL fonctionnera mal et les autres application aussi. En fait SQL Server vampirise toutes les ressources (comme tous les bons SGBDR).
    2) aucun service, application ni utilitaire ne doit tourner en // à SQL Server. Donc pas d'antivirus (il ne sert à tien dans ce cas) par d'anti spyware, pas de firewall....
    3) un taux de remplissage de disque de 90 % est très mauvais. Il est bon de ne pas ,dépasser des taux de remplissage de 70% en production
    4) vous obtiendrez de meilleurs performances avec la version 2008 de Windows notamment du fait de l'alignement des partitions au niveau du file system.
    5) exclure totalement le SELECT * de toutes les requêtes
    6) faire une maintenance d'index et de statistiques
    7) auditer les index à créer
    ...

    A +

  10. #30
    Nouveau membre du Club
    Profil pro
    frTRYER
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : frTRYER

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Merci de tous ces conseils., que je vais essayer de mettre en oeuvre. Comme le problème est survenu brutalement après plusieurs mois de fonctionnement normal, le client a dû mal à comprendre qu'on lui dise maintenant que son OS n'est pas le plus approprié. Une chose est sûr il faut faire de la place sur ce disque. Je vais revoir les PS mais c'est vrai que c'est pratique un select * car lorsque l'on ajoute un champ dans un table, on est pas obligé de repasser derrière toutes les PS. Est ce que défragmenter le fichier de la base en le détachant puis utilisant la défragmentation Windows, pourrait améliorer les choses? Est il conseillé de mettre les index dans un fichier différent de celui des données ?

  11. #31
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    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 : 21 849
    Points : 52 982
    Points
    52 982
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par franckgar Voir le message
    Merci de tous ces conseils., que je vais essayer de mettre en oeuvre. Comme le problème est survenu brutalement après plusieurs mois de fonctionnement normal, le client a dû mal à comprendre qu'on lui dise maintenant que son OS n'est pas le plus approprié. Une chose est sûr il faut faire de la place sur ce disque. Je vais revoir les PS mais c'est vrai que c'est pratique un select * car lorsque l'on ajoute un champ dans un table, on est pas obligé de repasser derrière toutes les PS. Est ce que défragmenter le fichier de la base en le détachant puis utilisant la défragmentation Windows, pourrait améliorer les choses? Est il conseillé de mettre les index dans un fichier différent de celui des données ?
    La défragmentation physique des fichiers des bases est à déconseillé. Ceci n'améliorera pas forcément a chose, mais le risque de destruction irrémédiable est important.

    1) comme je l'indique dans cette série d'article http://sqlpro.developpez.com/optimisation/, les performances des SGBDR ne sont pas linéaires lorsqu'ils sont
    a) mal modélisées (pas de respect des formes normales par exemple)
    b) mal administrés.

    Par exemple avez vous mis en place un plan de maintenance des index et de recalcul des statistiques ?

  12. #32
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    1) 2) aucun service, application ni utilitaire ne doit tourner en // à SQL Server. Donc pas d'antivirus (il ne sert à tien dans ce cas) par d'anti spyware, pas de firewall....
    A +
    Pourquoi l'antivirus ne servirait à rien ?

  13. #33
    Nouveau membre du Club
    Profil pro
    frTRYER
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : frTRYER

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Il n'y a pas à l'heure actuelle de plan de maintenance sur les index et les statistiques mais je vais la mettre en place très prochainement.
    J'ai trouvé ce script SQL sur le net et je pense le faire executer via un agent
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    CREATE PROCEDURE [dbo].[SP_System_DefragdAllIndexes]
     /*
     Permet de défragmentation des Indexes
     de toutes les bases du serveur SQL Server
     */
     
     AS
    begin
     DECLARE @name sysname
     DECLARE @Objectname sysname
     DECLARE @Username sysname
     DECLARE @IndexName sysname
     DECLARE @LaRequette varchar(8000)
     DECLARE @DateJour varchar(20)
     
     SET @DateJour = REPLACE(CONVERT(VARCHAR, GetDate(), 102), '.', '_')
     PRINT '---------------------------------------------------------------------'
     PRINT ' DATE DE LA MISE A JOUR DES INDEXES LANCEE : '+ @DateJour
     PRINT '---------------------------------------------------------------------'
     
     DECLARE TESTCURSEUR CURSOR
     FOR SELECT Master.dbo.sysdatabases.name FROM Master.dbo.sysdatabases
     WHERE Master.dbo.sysdatabases.name NOT IN ('tempdb', 'model', 'pubs', 'master', 'msdb', 'LVM')
     ORDER BY Master.dbo.sysdatabases.name
     
     OPEN TESTCURSEUR
     FETCH NEXT FROM TESTCURSEUR
     INTO @name
     
     WHILE @@FETCH_STATUS = 0
     
     BEGIN
     PRINT ''
     PRINT '---------------------------------------------------------------------'
     PRINT ' DEFRAGMENTATION DES INDEXES DE LA BASE : '+ @name
     PRINT '---------------------------------------------------------------------'
     
     SET @LaRequette = 'SELECT USR.name AS UserName, O.name AS Objectname, IDX.name IndexName
     FROM '+ @name +'.dbo.sysobjects O INNER JOIN '+ @name +'.dbo.sysusers USR
     ON O.uid = USR.uid INNER JOIN '+ @name +'.dbo.sysindexes IDX
     ON O.id = IDX.id WHERE (O.xtype= ''U'' OR O.xtype= ''V'')
     AND NOT (IDX.keys IS NULL) AND NOT (IDX.status & 64 = 64);'
     
     PRINT 'Changement de base : '+ @LaRequette
     PRINT '---------------------------------------------------------------------'
     
     EXEC('DECLARE TESTCURSEURTABLE CURSOR FOR '+ @LaRequette)
     OPEN TESTCURSEURTABLE
     FETCH NEXT FROM TESTCURSEURTABLE
     INTO @Username, @Objectname, @IndexName
     
     WHILE @@FETCH_STATUS = 0
     BEGIN
     SET @LaRequette = 'DBCC INDEXDEFRAG ('''+ @name +''', '''+ @Username+'.'+ @Objectname +''', '''+ @IndexName +''')'
     PRINT 'Requette : '+ @LaRequette
     EXECUTE (@LaRequette)
     PRINT '---------------------------------------------------------------------'
     FETCH NEXT FROM TESTCURSEURTABLE
     INTO @Username, @Objectname, @IndexName
     END
     
     CLOSE TESTCURSEURTABLE
     DEALLOCATE TESTCURSEURTABLE
     
     SET @LaRequette = 'USE '+ @name +' exec sp_updatestats'
     PRINT 'Requette : '+ @LaRequette
     EXECUTE (@LaRequette)
     
     FETCH NEXT FROM TESTCURSEUR
     INTO @name
     END
     
     PRINT '---------------------------------------------------------------------'
     PRINT ' FIN DE LA DEFRAGMENTATION
     PRINT '---------------------------------------------------------------------'
     
     CLOSE TESTCURSEUR
     DEALLOCATE TESTCURSEUR
    end

  14. #34
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    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 : 21 849
    Points : 52 982
    Points
    52 982
    Billets dans le blog
    6
    Par défaut
    Cette procédure utilise des appels de table système de la version 2000 !
    Elle n'est donc pas adaptée et risque de ne pas fonctionner correctement avec votre version 2005.

    Voici quelques unes des procédures que j'ai écrit à ce sujet :

    finement :
    http://blog.developpez.com/sqlpro/p8...es-index-et-s/

    grossièrement :
    http://blog.developpez.com/sqlpro/p8...-des-statisti/

    A planifier TOUS LES JOURS !

    A +

Discussions similaires

  1. Delai d'Attente Dépasse
    Par CBASE dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/11/2011, 12h02
  2. [SSL] Https "delai d'attente dépassée" / Http ok
    Par Darkroro dans le forum Apache
    Réponses: 5
    Dernier message: 20/10/2011, 14h55
  3. FF->Delai d'attente dépassé; IE-> OK
    Par fredeau dans le forum Firefox
    Réponses: 3
    Dernier message: 24/09/2007, 10h42
  4. message << Delais d'attente dépassé>> à l'execution de requête
    Par obydissonn dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/07/2007, 20h07
  5. Grave problème de performance access
    Par sohm dans le forum Access
    Réponses: 13
    Dernier message: 14/11/2005, 23h22

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