{"id":3190,"date":"2024-05-13T19:22:18","date_gmt":"2024-05-13T18:22:18","guid":{"rendered":"https:\/\/www.jmarior.net\/itank\/?p=3190"},"modified":"2024-05-13T19:38:46","modified_gmt":"2024-05-13T18:38:46","slug":"gestionar-en-caliente-la-memoria-ram-ocupada-por-sqlserver","status":"publish","type":"post","link":"https:\/\/www.jmarior.net\/itank\/gestionar-en-caliente-la-memoria-ram-ocupada-por-sqlserver\/","title":{"rendered":"Gestionar en caliente la memoria RAM ocupada por SQLServer"},"content":{"rendered":"<p>Antes de nada, vamos a averiguar la RAM m\u00e1xima del sistema, la disponible y la utilizada por la instancia de SQL Server mediante Transact SQL:<\/p>\n<pre><code class=\"language-sql line-numbers\">SELECT (total_physical_memory_kb \/ 1024) AS Max_RAM_MB\nFROM sys.dm_os_sys_memory\n\nSELECT (available_physical_memory_kb \/ 1024) AS Free_RAM_MB\nFROM sys.dm_os_sys_memory;\n\nSELECT \n    (physical_memory_in_use_kb \/ 1024) AS Memory_usedby_Sqlserver_MB,\n    (locked_page_allocations_kb \/ 1024) AS Locked_pages_used_Sqlserver_MB,\n    (total_virtual_address_space_kb \/ 1024) AS Total_VAS_in_MB,\n    process_physical_memory_low AS Physical_memory_low\nFROM sys.dm_os_process_memory;\n<\/code><\/pre>\n<p>d\u00f3nde en esta \u00faltima:<\/p>\n<ol>\n<li><strong>Memory_usedby_Sqlserver_MB<\/strong>: Este par\u00e1metro muestra la cantidad de memoria f\u00edsica utilizada por SQL Server en megabytes (MB). Indica cu\u00e1nta memoria est\u00e1 siendo ocupada por SQL Server para diversas operaciones, como el almacenamiento en b\u00fafer de datos, la ejecuci\u00f3n de consultas, la cach\u00e9 de planos de ejecuci\u00f3n, entre otros.<\/p>\n<\/li>\n<li>\n<p><strong>Locked_pages_used_Sqlserver_MB<\/strong>: Este par\u00e1metro muestra la cantidad de p\u00e1ginas bloqueadas en la memoria, tambi\u00e9n en megabytes (MB). Las p\u00e1ginas bloqueadas en la memoria son aquellas que no se pueden desalojar de la memoria f\u00edsica por el administrador de memoria de SQL Server. Este valor puede indicar una posible fragmentaci\u00f3n de la memoria o una asignaci\u00f3n ineficiente de recursos.<\/p>\n<\/li>\n<li>\n<p><strong>Total_VAS_in_MB<\/strong>: Este par\u00e1metro muestra el tama\u00f1o total del espacio de direcci\u00f3n virtual (VAS) en megabytes (MB). El espacio de direcci\u00f3n virtual es el rango de direcciones de memoria que un proceso puede utilizar. Este valor proporciona una indicaci\u00f3n de la cantidad total de memoria virtual disponible para el proceso de SQL Server.<\/p>\n<\/li>\n<li>\n<p><strong>Physical_memory_low<\/strong>: Este par\u00e1metro proporciona una indicaci\u00f3n de si SQL Server ha detectado una condici\u00f3n de memoria f\u00edsica baja. Si este valor es 1, significa que SQL Server ha detectado que el sistema tiene poca memoria f\u00edsica disponible. Esto puede indicar una necesidad de ajustar la configuraci\u00f3n de memoria de SQL Server o de agregar m\u00e1s memoria al sistema.<\/p>\n<\/li>\n<\/ol>\n<p>As\u00ed reconfiguramos la RAM m\u00e1xima asignada a SQLServer mediante TSQL<\/p>\n<pre><code class=\"language-sql line-numbers\">sp_configure 'show advanced options', 1;  \nGO  \nRECONFIGURE;  \nGO  \nsp_configure 'max server memory', 32768;   -- for 32 GB\nGO  \nRECONFIGURE;  \nGO\n<\/code><\/pre>\n<p>Ahora podemos, liberar la memoria cach\u00e9 de planos de ejecuci\u00f3n (procedimientos almacenados, consultas ad hoc&#8230;) y las p\u00e1ginas de datos de la memoria cach\u00e9. Esto no librar\u00e1 RAM f\u00edsica sino las p\u00e1ginas internas de cach\u00e9 sin tener que reiniciar el servicio de SQLServer.  Puede afectar el rendimiento de las nuevas consultas, puesto el motor SQLServer deber\u00e1 recopilar de nuevo esta informaci\u00f3n cach\u00e9, pero dejar\u00e1 espacio interno para reorganizarse.<\/p>\n<pre><code class=\"language-sql line-numbers\">DBCC FREEPROCCACHE;\nDBCC DROPCLEANBUFFERS;\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Antes de nada, vamos a averiguar la RAM m\u00e1xima del sistema, la disponible y la utilizada por la instancia de SQL Server mediante Transact SQL: SELECT (total_physical_memory_kb \/ 1024) AS Max_RAM_MB FROM sys.dm_os_sys_memory SELECT (available_physical_memory_kb \/ 1024) AS Free_RAM_MB FROM sys.dm_os_sys_memory; SELECT (physical_memory_in_use_kb \/ 1024) AS Memory_usedby_Sqlserver_MB, (locked_page_allocations_kb \/ 1024) AS Locked_pages_used_Sqlserver_MB, (total_virtual_address_space_kb \/ 1024) [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":3191,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[2061,2062],"class_list":["post-3190","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-itank-ideas","tag-sqlserver","tag-tsql"],"views":181,"_links":{"self":[{"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/posts\/3190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/comments?post=3190"}],"version-history":[{"count":0,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/posts\/3190\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/media\/3191"}],"wp:attachment":[{"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/media?parent=3190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/categories?post=3190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/tags?post=3190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}