Megosztás a következőn keresztül:


Kiszolgálókonfiguráció: maximális RPC-kérelemparamok (KB)

A következőkre vonatkozik:SQL ServerAzure SQL Managed Instance

A max RPC request params (KB) kiszolgálókonfigurációs beállítás korlátozza a távoli eljáráshívás (RPC) paraméterei által egy kötegelt RPC-híváshoz használt memória mennyiségét. A kötegelt RPC-hívások egy vagy több utasítást tartalmaznak, amelyeket a kiszolgáló egyetlen kötegként küld el a hozzá tartozó paraméterekkel együtt.

Alapértelmezés szerint a kötegelt RPC-hívások paramétereihez használt kiszolgálói memória korlátlan. Ha az RPC-paraméterek által felhasznált teljes memória túl nagy, az aktuális kiszolgálói folyamat leállhat a memória elégtelensége miatt.

Ha a max RPC request params (KB) konfiguráció nemzero értékre van állítva, az egyetlen kötegelt RPC-hívás által használt memória a megadott értékre korlátozódik. Ha az RPC-hívás túllépi a memóriakorlátot, a 701-es, 17-es súlyosságú, 21-es állapotú üzenettel végződik: There is insufficient system memory in resource pool 'resource-pool-name' to run this query. Az RPC-hívás leállítása felszabadítja az RPC-paraméterek által felhasznált memóriát, és elkerüli a kiszolgálói folyamat leállításának kockázatát. További információ: MSSQLSERVER_701.

Elérhetőség

Ez a konfigurációs lehetőség az alábbi SQL-platformokon és -verziókban érhető el:

  • SQL Server 2019 (15.x) CU 26 és újabb verziók
  • SQL Server 2022 (16.x) CU 13 és újabb verziók
  • SQL Server 2025 (17.x)
  • Azure SQL Managed Instance

Megjegyzések

A kiszolgáló teljes memóriahasználatát RPC-paraméterekkel figyelheti úgy, hogy sys.dm_os_memory_clerks használata esetén a memóriajegyző típusát, illetve USERSTORE_SXC használata esetén a memóriaobjektum típusát használja.

Ha azt tapasztalja, hogy a USERSTORE_SXC memóriajegyző vagy a MEMOBJ_PROCESSRPC memóriaobjektum aránytalanul nagy mennyiségű memóriát használ fel, vegye figyelembe a következő kockázatcsökkentéseket:

  • Módosítsa a kiszolgáló konfigurációját max RPC request params (KB) , hogy korlátozza az egyetlen köteg RPC-hívás által felhasznált memória mennyiségét. Az optimális érték az RPC-hívásokban használt paraméteradatok méretétől és az egyidejűleg végrehajtó RPC-hívások számától függ. Először állítson be egy nagyobb értéket, majd kezdje el csökkenteni az értéket a memóriahasználat monitorozása közben, valamint a memóriakihasználtsági hibák (701-s hiba, 21-s állapot) előfordulásának figyelése közben, miközben az RPC-hívások futnak. A cél a memóriafogyasztás szabályozása, az 'out-of-memory' hibák előfordulásának minimalizálása.
  • Ossza fel a nagy RPC-hívásokat kisebb kötegekre. Például ahelyett, hogy 100 000 INSERT utasítást használ egy RPC-hívásban, 10 RPC-hívást kell kiadni 10 000 utasítással minden hívásban.
  • Ne használjon RPC-hívásokat az adatok tömeges beszúrásához. Ehelyett használja az ügyfélillesztő tömeges másolási módszereit, például az SqlBulkCopyját a .NET-ben, vagy az SQLServerBulkCopyt JDBC-n Java-ban. További információ: Adatok tömeges importálása és exportálása (SQL Server).

Példák

Egy. Az RPC-hívásparaméter maximális memóriájának beállítása

Az alábbi példa egy RPC-hívás maximális RPC-paramétermemóriát állít be 1 MB-ra.

EXECUTE sp_configure 'show advanced options', 1;

RECONFIGURE;
GO

EXECUTE sp_configure 'max RPC request params (KB)', 1024;

RECONFIGURE;
GO

B. Az aktuális teljes és maximális RPC-paramétermemória monitorozása

Az alábbi példák az RPC-paraméterek által felhasznált aktuális teljes és maximális memóriát figyelik:

SELECT SUM(pages_kb) / 1024. AS userstore_sxc_memory_mb
FROM sys.dm_os_memory_clerks
WHERE type = 'USERSTORE_SXC';

SELECT SUM(pages_in_bytes) / 1024. / 1024 AS total_processrpc_memory_mb,
       MAX(max_pages_in_bytes) / 1024. / 1024 AS max_processrpc_memory_mb
FROM sys.dm_os_memory_objects
WHERE type = 'MEMOBJ_PROCESSRPC';