Przypisanie użytkownika na którym działa usługa SQL Server do tego uprawnienia powoduje, że pamięć używana przez SQL Server nie trafi do pliku stronicowania.
Funkcjonalność wspierana przez SQL Server od wersji 2005. Nie wspierana w edycji Express.
Zagrożenia
Może powodować niestabilność systemu Windows. Opisane dokładnie tu: https://blogs.msdn.microsoft.com/psssql/2012/03/20/setfileiooverlappedrange-can-lead-to-unexpected-behavior-for-sql-server-2008-r2-or-sql-server-2012-denali/
LPiM vs. Task Manager
Po włączeniu uprawnień, Task Manager przestanie pokazywać prawidłowo ilości pamięci używanej przez SQL Server. Wartości pokazywane przez Perfmon są prawidłowe.
Jeśli nie mamy włączonego LPiM, SQL Server do alokowania pamięci używa wywołań VirtualAlloc API. To pozwala na alokowanie pamięci, która może być stronicowana. Włączenie LPiM powoduje, że SQL Server zaczyna używać wywołań AllocateUserPhysicalPages. Pamięć alokowana w ten sposób nie jest stronicowana. Liczniki używane przez Task Manager'a pokazują wyłącznie pamięć alokowaną przez wywołania VirtualAlloc. Informacja znaleziona na http://sqlinthewild.co.za/index.php/2016/01/19/stop-using-task-manager-to-check-sqls-memory-usage/
Włączenie
Sposób włączenia różni się w zależności od edycji i wersji SQL Server. Krok wymagany zawsze, to samo przypisanie użytkownika, na którym działa usługa SQL Server do grupy uprawnień:
Jeśli mamy wersję 2012 lub nowszą, nie trzeba robić nic więcej (poza restartem usługi). Jeśli nie mamy tej wersji, to musimy wykonać dodatkowe czynności (różne w zależności od edycji):
Enterprise / Data Center
|
Standard / Business Intelligence
|
|
SQL Server 2005/2008/2008R2 (64bit)
|
-
|
Zainstalować
SQL Hotfix KBA 970070.
Włączyć
trace flag 845
|
SQL Server 2005/2008/2008R2 (32bit)
|
Włączyć
opcję
„AWE enabled” |
Włączyć
opcję „AWE enabled”
|
Sprawdzenie, czy działa
1. W czasie uruchamiania SQL Server w errorlogu powinien pojawić się wpis "Using locked pages in the memory manager"
2. Zapytanie:
select
osn.node_id,
osn.memory_node_id,
osn.node_state_desc,
omn.locked_page_allocations_kb
from sys.dm_os_memory_nodes omn
inner join sys.dm_os_nodes osn
on (omn.memory_node_id = osn.memory_node_id)
where osn.node_state_desc <> 'ONLINE DAC'
zwraca w kolumnie locked_page_allocations_kb wartości większe od zera.Dodatkowe informacje
1. https://www.brentozar.com/archive/2009/11/christian-bolton-on-sql-server-memory/
2. https://support.microsoft.com/en-us/kb/2659143
Powiązany z:
1. Min & Max Server Memory