Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
s’applique à :SQL Server
Azure SQL Managed Instance
L’option max RPC request params (KB) de configuration du serveur limite la quantité de mémoire utilisée par les paramètres d’appel de procédure distante (RPC) pour un appel RPC par lot unique. Un appel RPC par lots contient une ou plusieurs instructions envoyées au serveur en tant que lot unique avec son ensemble de paramètres associé.
Par défaut, la mémoire du serveur utilisée pour les paramètres des appels RPC par lots est illimitée. Lorsque la mémoire totale consommée par les paramètres RPC est excessivement importante, le processus de serveur actuel peut être arrêté en raison d’une mémoire insuffisante.
Lorsque la max RPC request params (KB) configuration est définie sur une valeur différente de zéro, la mémoire utilisée par un seul appel RPC par lot est limitée à la valeur spécifiée. Si l’appel RPC dépasse la limite de mémoire, il est arrêté avec l’erreur 701, la gravité 17, l’état 21, message : There is insufficient system memory in resource pool 'resource-pool-name' to run this query. Mettre fin à l’appel RPC libère la mémoire consommée par les paramètres RPC et évite le risque d’arrêt du processus serveur. Pour plus d’informations, consultez MSSQLSERVER_701.
Disponibilité
Cette option de configuration est disponible dans les plateformes et versions SQL suivantes :
- SQL Server 2019 (15.x) CU 26 et versions ultérieures
- SQL Server 2022 (16.x) CU 13 et versions ultérieures
- SQL Server 2025 (17.x)
- Azure SQL Managed Instance (Instance gérée Azure SQL)
Remarques
Vous pouvez surveiller la consommation totale de mémoire du serveur par les paramètres RPC à l’aide de sys.dm_os_memory_clerks, avec USERSTORE_SXC comme type de commis de mémoire et à l’aide de sys.dm_os_memory_objects, avec MEMOBJ_PROCESSRPC comme type d’objet mémoire.
Si vous observez que le USERSTORE_SXC commis de mémoire ou les MEMOBJ_PROCESSRPC objets mémoire consomment disproportionnéement de grandes quantités de mémoire, tenez compte des atténuations suivantes :
- Modifiez la configuration du
max RPC request params (KB)serveur pour limiter la quantité de mémoire consommée par un seul appel RPC par lot. La valeur optimale dépend de la taille des données de paramètre utilisées dans les appels RPC et du nombre d’appels RPC en cours d’exécution simultanément. Définissez une valeur supérieure initialement, puis commencez à réduire la valeur lors de la surveillance de la consommation de mémoire et de l’occurrence d’erreurs hors mémoire (erreur 701, état 21) pendant l’exécution des appels RPC. L’objectif est de maintenir la consommation de mémoire sous contrôle tout en minimisant la fréquence des erreurs de mémoire insuffisante. - Fractionnez les appels RPC volumineux en lots plus petits. Par exemple, au lieu d’utiliser 100 000
INSERTinstructions dans un seul appel RPC, émettez 10 appels RPC avec 10 000 instructions dans chaque appel. - Évitez d’utiliser des appels RPC pour insérer des données en bloc. Utilisez plutôt les méthodes de copie en bloc du pilote client, telles que SqlBulkCopy pour SqlClient dans .NET ou SQLServerBulkCopy pour JDBC en Java. Pour plus d’informations, consultez Importation et exportation en bloc de données (SQL Server).
Exemples
Un. Définir la mémoire maximale du paramètre d’appel RPC
L’exemple suivant définit la mémoire maximale du paramètre RPC qu’un seul appel RPC peut consommer sur 1 Mo.
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXECUTE sp_configure 'max RPC request params (KB)', 1024;
RECONFIGURE;
GO
B. Surveiller le total actuel et la mémoire maximale des paramètres RPC
Les exemples suivants surveillent le total actuel et la mémoire maximale consommée par les paramètres RPC :
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';