- Error number
- 17890
- Severity
- 10 (informational)
- State
- Not documented by Microsoft (not reproduced here)
- Product
- Microsoft SQL Server Database Engine
- Versions
- SQL Server on Windows, all supported versions (2016 to 2025)
- Category
- Memory
- Last reviewed
- 24 October 2026
On this page
What it means
Error 17890 is an informational warning in the SQL Server error log: Windows has moved a large part of SQL Server's memory to the page file, so queries that touch that memory become slow.
SQL Server keeps an eye on its own process. When the working set (the part of its memory that is actually in RAM) falls below half of the memory it has committed, it writes 17890 to the error log and the Windows Application event log. Severity 10 means information only: no query fails because of it, but reading data that now sits in the page file costs disk I/O, so the whole instance can suddenly feel slow.
Read the numbers in the message: Working set and committed are in KB, and memory utilization is working set as a percentage of committed (in the example, about 3.2 GB of 8.7 GB, 37%). Duration is how long the condition has lasted. The cause lies outside SQL Server: Microsoft lists other applications exhausting physical memory, device drivers that make Windows trim every process, and operating system issues.
Common causes
- Other applications or services on the server suddenly needing a lot of memory, so Windows trims the working sets of running processes, SQL Server included.
- A large system file cache (for example from big file copies on the server) growing and pushing process memory out to the page file.
- A device driver that requests memory in a way that makes Windows page out the working set of all processes.
- Max server memory set so high that Windows and other processes have too little room.
Diagnose it
Read-only These queries only read metadata and dynamic management views. They do not change data, permissions or configuration, so they are safe to run first.
How much of the SQL Server process is in RAM?
SELECT physical_memory_in_use_kb / 1024 AS in_use_mb,
locked_page_allocations_kb / 1024 AS locked_mb,
memory_utilization_percentage,
page_fault_count,
process_physical_memory_low
FROM sys.dm_os_process_memory; A memory_utilization_percentage well below 100 means part of the committed memory is not in the working set. locked_mb above 0 shows locked pages are in use.
Is Windows short of physical memory, and is the file cache large?
SELECT total_physical_memory_kb / 1024 AS total_mb,
available_physical_memory_kb / 1024 AS available_mb,
system_cache_kb / 1024 AS system_cache_mb,
available_page_file_kb / 1024 AS available_page_file_mb,
system_memory_state_desc
FROM sys.dm_os_sys_memory; Low available memory or a very large system cache at the time of the message points to the competing demand that made Windows trim SQL Server.
Did SQL Server receive low physical memory notifications?
The resource monitor ring buffer keeps recent memory notifications. Its XML layout is internal and can change between versions, so treat the result as a pointer, not a report.
SELECT TOP (20)
DATEADD(MILLISECOND, rb.[timestamp] - si.ms_ticks, SYSDATETIME()) AS approx_event_time,
x.r.value('(Record/ResourceMonitor/Notification)[1]', 'varchar(60)') AS notification,
x.r.value('(Record/ResourceMonitor/IndicatorsProcess)[1]', 'int') AS indicators_process,
x.r.value('(Record/ResourceMonitor/IndicatorsSystem)[1]', 'int') AS indicators_system,
x.r.value('(Record/MemoryRecord/AvailablePhysicalMemory)[1]', 'bigint') / 1024 AS available_physical_mb
FROM sys.dm_os_ring_buffers AS rb
CROSS JOIN sys.dm_os_sys_info AS si
CROSS APPLY (SELECT CAST(rb.record AS XML)) AS x(r)
WHERE rb.ring_buffer_type = N'RING_BUFFER_RESOURCE_MONITOR'
AND rb.record LIKE N'%RESOURCE_MEMPHYSICAL_LOW%'
ORDER BY rb.[timestamp] DESC; Rows with a non-zero indicators_system around the time of the 17890 message mean Windows itself signalled low memory. Rows with only indicators_process set reflect the SQL Server process's own memory state rather than a shortage in Windows.
Which memory model is SQL Server using?
SELECT sql_memory_model_desc,
committed_kb / 1024 AS committed_mb,
committed_target_kb / 1024 AS target_mb
FROM sys.dm_os_sys_info;
SELECT name, value_in_use
FROM sys.configurations
WHERE name = N'max server memory (MB)'; CONVENTIONAL means Lock pages in memory is not in use; LOCK_PAGES or LARGE_PAGES means it is. A max server memory close to the total RAM leaves Windows little room.
How to fix it
Each fix is labelled with what it changes. Try read-only checks and the least invasive fix first, and test changes outside production.
Find and reduce the competing memory demand
Client or network sideMicrosoft suggests collecting Performance Monitor counters Process: Working Set for all processes and Memory: Available MBytes. If available memory drops towards zero while every working set falls, other applications are exhausting RAM: move, limit or schedule them away from the SQL Server machine. A growing system file cache from large file copies is another common trigger. If a driver is suspected, update it; Microsoft notes that drivers calling memory allocation functions incorrectly can cause working set trimming.
Leave Windows enough memory
Changes configurationIf max server memory is close to the total RAM, lower it to a value chosen from measurements, so Windows and other processes have room without trimming SQL Server. Microsoft names reducing max server memory as one way to balance memory between applications.
Caution: sp_configure and RECONFIGURE change the whole instance at once. Too low a value starves the buffer pool and slows every database. Record the old value so you can revert.
-- Only with a value chosen from measurements (example: 28 GB on a 32 GB server)
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 28672;
RECONFIGURE;
Consider Lock pages in memory, with care
Changes configurationGranting the Lock pages in memory user right to the SQL Server service account stops Windows from paging out the buffer pool. It is a Windows policy change (Local Security Policy, User Rights Assignment) followed by a service restart; the error log then says Using locked pages for buffer pool at startup. It does not protect thread stacks, DLLs, heap or CLR memory, and it treats the symptom: the memory shortage still exists and now lands on Windows and other processes instead.
Caution: With locked pages, SQL Server memory can no longer be paged out, so max server memory must be set to leave Windows enough RAM, or the operating system itself can run short. The change needs a service restart; review Microsoft's considerations before using it.
Examples
The warning in the SQL Server error log
Shown as documented by Microsoft (the numbers are Microsoft's example); not reproduced here, because it needs Windows to page out SQL Server memory. It appears in the error log and the Windows Application event log, not in a query window. The state was not observed, so no header is shown.
-- No statement raises 17890: it is logged when Windows trims the SQL Server working set
A significant part of SQL Server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 3383250, committed (KB): 9112480, memory utilization: 37%.
How to prevent it
Run SQL Server on a server where its memory needs are planned: set max server memory so Windows and any other services have headroom, avoid large file copies and memory-hungry tools on the database server during busy hours, and keep drivers up to date.
Alert on 17890 in the error log and on low available memory in Performance Monitor, so you can match each occurrence with what else was running at the time.
Common questions
Is 17890 an error I must fix immediately?
It is informational (severity 10) and nothing fails because of it, but it usually coincides with a sudden slowdown. One occurrence during an unusual event may need no action; repeated messages do.
Does Lock pages in memory solve it?
It stops Windows paging out the buffer pool, so the message stops for that memory. The shortage behind it remains, which is why Microsoft asks you to review the causes and considerations first.
What does memory utilization mean in the message?
The working set as a percentage of committed memory. SQL Server logs 17890 when it falls below 50%.
Learn more on CodeWithSQL
Official documentation
- MSSQLSERVER_17890 (Microsoft Learn)
- Enable the Lock pages in memory option
- sys.dm_os_process_memory
- Server memory configuration options
Last technically reviewed 24 October 2026; examples and diagnostics run on SQL Server 2025 (17.0.1145.4). Message text checked against the engine's sys.messages catalogue.