Neste documento, explicamos como analisar e otimizar uma instância do Cloud SQL para SQL Server quando é identificada pelo recomendador de instâncias subprovisionadas como tendo alto consumo de memória.
Memória do SQL Server
A memória do SQL Server pode ser dividida da seguinte forma:
Esses são objetos em um disco que podem ser recarregados, como páginas de bancos de dados e procedimentos armazenados. Como resultado,
o SQL Server pode aumentar e diminuir esses objetos com base na utilização da memória. Os caches incluem pools de buffer e planos de cache.
Memória fixa
A memória fixa pode aumentar e diminuir. Só é reduzida quando não está em uso. Por exemplo, quando o número de conexões cai ou o número de consultas em execução diminui.
Ela é diferente dos caches. Se não houver memória fixa suficiente, o SQL Server poderá ficar sem memória.
A memória fixa inclui memória de conexão e concessões de memória.
Overhead do SQL Server
O overhead do SQL Server inclui linhas de execução e pilhas.
OLTP na memória
O OLTP na memória inclui tabelas e grupos de arquivos na memória.
O consumo de memória pelo SQL Server é controlado pela configuração de maximum server memory e memory.memory.limitmb. O parâmetro memory.memory.limitmb é definido automaticamente pelo Cloud SQL.
Recomendamos que você deixe o Cloud SQL gerenciar o valor dessa flag.
Se você precisar gerenciar esse valor manualmente, use a fórmula de uso de max_server_memory (mb) descrita em Práticas recomendadas para evitar que o SQL Server consuma toda a memória.
Page life expectancy indica o tempo, em segundos, que a página mais antiga permanece no pool de buffers.
Esse valor precisa ser maior que 300, conforme recomendado pela Microsoft. Se ela ficar abaixo de
300 de modo consistente, isso pode indicar que a instância está enfrentando uma alta utilização de memória.
Execute a consulta a seguir para monitorar 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'
Verifique a flag Memory Grants Pending.
Memory Grants Pending especifica o número total de processos aguardando uma concessão de memória do espaço de trabalho.
Execute a consulta a seguir para verificar Memory Grants Pending. Se essa consulta mostrar de forma consistente concessões pendentes,
ela indica alta utilização da memória. É possível reduzir a consulta consultando as esperas do banco de dados
e o ajuste de qualquer instrução que esteja aguardando na memória.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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)"]]