Bonjour,
Depuis quelques jours, le serveur qui sert aux développements et aux tests de l'application vendue par mon entreprise connaît quelques pressions mémoires que nous n'avons pas encore eu le temps de diagnostiquer proprement.
L'erreur la plus souvent obtenue est :
Mais il arrive parfois aussi que les clients applicatifs ne parviennent pas à se connecter au serveur :There is insufficient system memory in resource pool 'default' to run this query.
Enfin, il arrive parfois que nous ne puissions pas prendre le contrôle du serveur à l'aide d'une connexion bureau à distance.A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 - The specified network name is no longer available.)
Le serveur est un Dell PE6850 (dépasse la période de garantie du constructeur) avec Windows Server 2003 32 bits (à jour), et 64GB de RAM, avec SQL Server 2008 Enterprise.
Je viens de jeter un œil aux tailles occupées par les bases de données dans le cache à l'aide de la requête suivante :
qui me retourne 11GB pour TempDB.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT D.name AS database_name , CAST(COUNT_BIG(*) * 8192.0 / 1024 / 1024 AS decimal(10,2)) AS cached_size_MB FROM sys.dm_os_buffer_descriptors AS OSBD INNER JOIN sys.databases AS D ON OSBD.database_id = D.database_id GROUP BY D.name WITH ROLLUP ORDER BY cached_size_MB DESC
A l'aide de la requête suivante :
J'obtiens :
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 USE TempDB GO ;WITH CTE AS ( SELECT name AS logicial_name , physical_name AS physical_name , CASE is_percent_growth WHEN 0 THEN CAST(growth * 8 / 1024 AS VARCHAR(8)) + ' MB' ELSE CAST(growth AS VARCHAR(3)) + ' %' END AS growth , CAST((size * 8) / CAST(1024 AS numeric(14, 2)) AS numeric(14, 2)) AS file_size_MB , CAST((FILEPROPERTY(name, 'SpaceUsed') * 8) / CAST(1024 AS numeric(14, 2)) AS numeric(14, 2)) AS occupied_space_MB FROM sys.database_files ) SELECT logicial_name , physical_name , file_size_MB , growth , occupied_space_MB , file_size_MB - occupied_space_MB AS free_space_MB , CAST((CAST(occupied_space_MB AS numeric(14, 2)) / file_size_MB) * 100 AS numeric(14, 2)) AS [%occupe] , CAST((CAST(file_size_MB - occupied_space_MB AS numeric(14, 2)) / file_size_MB) * 100 AS numeric(14, 2)) AS [%libre] FROM CTE
Je subodore que cette requête soit incorrecte, mais je trouve le résultat assez bizarre ...tempdev Z:\MSSQL\data\tempdb.mdf 17028.00 100 MB 4.31 17023.69 0.03 99.97
templog Y:\MSSQL\data\templog.ldf 1200.00 100 MB 406.56 793.44 33.88 66.12
tempdev1 V:\MSSQL\Data\tempdb1.ndf 16928.00 100 MB 3.38 16924.62 0.02 99.98
tempdev2 W:\MSSQL\Data\tempdb2.ndf 17028.00 100 MB 11.75 17016.25 0.07 99.93
tempdev3 Y:\MSSQL\Data\tempdb3.ndf 13928.94 100 MB 25.75 13903.19 0.18 99.82
Qu'en pensez-vous ?
@++![]()
Partager