Ce document explique comment examiner et optimiser une instance Cloud SQL pour SQL Server si cette instance est identifiée par l'outil de recommandation d'instances sous-provisionnées comme ayant une consommation élevée de mémoire.
Mémoire SQL Server
La mémoire SQL Server peut être divisée en plusieurs parties comme suit :
Il s'agit d'objets sur un disque qui peuvent être actualisés, tels que des pages de base de données et des procédures stockées. Par conséquent, SQL Server peut augmenter ou réduire ces objets en fonction de l'utilisation de la mémoire. Les caches incluent les pools de tampons et les caches de plans.
Mémoire fixe
La mémoire fixe peut augmenter ou diminuer. Elle ne diminue que lorsqu'elle n'est pas utilisée. Par exemple, lorsque le nombre de connexions ou le nombre de requêtes en cours d'exécution diminue.
Cela diffère des caches. Si la mémoire fixe est insuffisante, SQL Server peut manquer de mémoire.
La mémoire fixe inclut la mémoire de connexion et les allocations de mémoire.
Coûts SQL Server
Les coûts liés à SQL Server incluent les threads et les piles.
OLTP en mémoire
OLTP en mémoire inclut les tables et les groupes de fichiers en mémoire.
La consommation de mémoire par SQL Server est contrôlée en définissant maximum server memory et memory.memory.limitmb. Le paramètre memory.memory.limitmb est défini automatiquement par Cloud SQL.
Nous vous recommandons de laisser Cloud SQL gérer la valeur de cette option.
Si vous devez gérer manuellement cette valeur, utilisez la formule d'utilisation max_server_memory (mb) décrite dans les bonnes pratiques pour éviter que SQL Server ne consomme toute la mémoire.
Page life expectancy indique la durée, en secondes, pendant laquelle la page la plus ancienne reste dans le pool de mémoire tampon.
Cette valeur doit être supérieure à 300, comme recommandé par Microsoft. Si elle est systématiquement inférieure à 300, cela peut indiquer que l'instance est soumise à une utilisation intensive de la mémoire.
Exécutez la requête suivante pour surveiller Page life expectancy.
SELECT
[object_name],
[counter_name],
[cntr_value]FROM
sys.dm_os_performance_counters
WHERE
[object_name]LIKE
'%Manager%'AND
[counter_name]='Page life expectancy'
Vérifiez l'option Memory Grants Pending.
Memory Grants Pending spécifie le nombre total de processus en attente d'une allocation de mémoire d'espace de travail.
Exécutez la requête suivante pour vérifier Memory Grants Pending. Si cette requête affiche systématiquement les allocations en attente, cela indique une utilisation intensive de la mémoire. Vous pouvez la réduire en interrogeant les bases de données et en ajustant les instructions en attente de mémoire.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/09/04 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Difficile à comprendre","hardToUnderstand","thumb-down"],["Informations ou exemple de code incorrects","incorrectInformationOrSampleCode","thumb-down"],["Il n'y a pas l'information/les exemples dont j'ai besoin","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/09/04 (UTC)."],[],[],null,["# Optimize high memory usage in instances\n\n\u003cbr /\u003e\n\n[MySQL](/sql/docs/mysql/optimize-high-memory-usage \"View this page for the MySQL database engine\") \\| [PostgreSQL](/sql/docs/postgres/optimize-high-memory-usage \"View this page for the PostgreSQL database engine\") \\| SQL Server\n\n\u003cbr /\u003e\n\nThis document explains how to review and optimize a Cloud SQL for SQL Server instance if that instance is identified\nby the underprovisioned instance recommender as having high memory consumption.\n\nSQL Server memory\n-----------------\n\nSQL Server memory can be divided into the following:\n\n- [Caches](/sql/docs/sqlserver/optimize-high-memory-usage#cache)\n- [Fixed memory](/sql/docs/sqlserver/optimize-high-memory-usage#fixed-memory)\n- [SQL Server overhead](/sql/docs/sqlserver/optimize-high-memory-usage#sql-server-overhead)\n- [In-Memory online transactional processing (OLTP)](/sql/docs/sqlserver/optimize-high-memory-usage#oltp)\n\n### Caches\n\nThese are objects on a disk that can be reloaded, such as database pages and stored procedures. As a result,\nthe SQL Server can grow and shrink these objects based on memory utilization. Caches include buffer pools and plan caches.\n\n### Fixed memory\n\nFixed memory can grow and shrink. It only shrinks when not in use; for example, when the number of connections drops or the number of queries executing decreases.\nIt's different from caches. If there is not enough fixed memory, SQL Server can run out of memory.\nFixed memory includes connection memory and memory grants.\n\n### SQL Server overhead\n\nSQL Server overhead includes threads and stacks.\n\n### In-Memory OLTP\n\nIn-Memory OLTP includes In-Memory tables and In-Memory filegroups.\n\nThe memory consumption by SQL Server is controlled by setting `maximum server memory` and `memory.memory.limitmb`. The `memory.memory.limitmb` parameter is set by Cloud SQL automatically.\n\nTo learn more about `memory.memory.limitmb`, see the [Microsoft documentation](https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-configure-mssql-conf?view=sql-server-ver16#memorylimit).\n\nMemory optimization options\n---------------------------\n\nTo determine if an instance needs more memory tuning, do the following:\n\n- [Check the value of the `max server memory (mb)`](/sql/docs/sqlserver/flags#special-flags) flag.\n\n We recommend you let Cloud SQL manage the value of this flag.\n If you must manually manage this value, use the `max_server_memory (mb)`\n usage formula outlined on [Best practices](/sql/docs/sqlserver/best-practices#sqlserver_settings)\n to help prevent SQL Server from consuming all memory.\n\n For more information, see [Special flags](/sql/docs/sqlserver/flags#special-flags).\n- Monitor the `Page life expectancy` flag.\n\n `Page life expectancy` indicates the amount of time, in seconds, that the oldest page stays in the buffer pool.\n This value should be more than 300 as recommended by Microsoft. If it consistently falls under\n 300, it could be an indication that the instance is facing high memory utilization.\n Run the following query to monitor `Page life expectancy`. \n\n ```bash\n SELECT\n [object_name],\n [counter_name],\n [cntr_value]\n FROM\n sys.dm_os_performance_counters\n WHERE\n [object_name]\n LIKE\n '%Manager%'\n AND\n [counter_name] = 'Page life expectancy'\n \n ```\n- Check the `Memory Grants Pending` flag.\n\n `Memory Grants Pending` specifies the total number of processes waiting for a workspace memory grant.\n Run the following query to check `Memory Grants Pending`. If this query consistently shows grants pending,\n then it indicates high memory utilization. You can reduce it by querying the database\n waits and tuning any statement that's waiting on memory. \n\n ```bash\n SELECT\n @@SERVERNAME AS [Server Name],\n RTRIM([object_name]) AS [Object Name],\n cntr_value AS [Memory Grants Pending]\n FROM\n sys.dm_os_performance_counters WITH(NOLOCK)\n WHERE\n [object_name]\n LIKE\n N'%Memory Manager%' -- Handles named instances\n AND\n counter_name = N'Memory Grants Pending'\n \n ```\n\nWhat's next\n-----------\n\n- [Google Cloud recommenders](/recommender/docs/recommenders)"]]