广告
返回顶部
首页 > 资讯 > 数据库 >SQL Server内存故障排除
  • 174
分享到

SQL Server内存故障排除

2024-04-02 19:04:59 174人浏览 安东尼
摘要

SQLServer内存故障排除 翻译自:https://blogs.msdn.microsoft.com/karthick_pk/2012/06/15/troubleshooting-sql-se

SQLServer内存故障排除

 

翻译自:https://blogs.msdn.microsoft.com/karthick_pk/2012/06/15/troubleshooting-sql-server-memory/

 

SQL Server内存故障排除的第一步,是识别是否低内存条件出现在了MemToLeave或BPool或者因为外部内存压力。

 

注意:如果你不知道什么是BPOOL或者MemToLeave。在排除SQLServer内存故障之前,请阅读SQLServer内存架构基础。

 

如果你通过这篇博文不能找到原因,或者如果你想说明在SQL Server错误日志里dbcc memorystatus打印输出的错误,在这篇博文的评论部分或者在facebook用户组贴出来。我们将尝试协助你。

 

MemToLeave errors:

 

SQL Server 2000
WARNING: Failed to reserve contiguousmemory of Size= 65536.
WARNING: Clearing procedure cache to freecontiguous memory.
Error: 17802 “Could not create server eventthread.”
SQL Server could not spawn process_loginreadthread.

 

SQL Server 2005/2008
                Failed Virtual Allocate Bytes:FAIL_VIRTUAL_RESERVE 122880
 
                Failed to initialize the CommonLanguage Runtime (CLR) v2.0.50727 due to memory pressure. This is probably dueto memory pressure in the MemToLeave region of memory

 

Buffer Pool errors:

                BPool::Map: no remappableaddress found.
 
                BufferPool out of memorycondition
 
                LazyWriter: warning, no freebuffers found.

 

Either BPool (or) MemToLeave errors:

                

 

         Error: 17803 “Insufficient memory available..”
Buffer Distribution:  Stolen=7901 Free=0 Procedures=1 Inram=201842Dirty=0 Kept=572…
 
                Error: 701, Severity: 17,State: 123.
There is insufficient system memory to runthis query.
There is insufficient system memory inresource pool ‘default’ to run this query

 

Working set trim and page out errors(external memory pressure) 

 

A significant part of SQL Server proceSSMemory has been paged out. This may result in perfORMance degradation.
 
A significant part of sql server processmemory has been paged out. This may result in a performance degradation.Duration: 0 seconds. Working set (KB): 2007640, committed (KB): 4594040, memoryutilization: 43%.

 

如果你看到以上错误,请跳转到SQLServer进程内存的重要部分被页交换出。

 

 

第1部分(MTL错误):

 

如果问题是使用MTL,我们需要要确定SQL Server或者一些Non-SQL组件使用了大多数MemToLeave内存(记得MTL是什么吗?请参阅SQLServer内存架构)。

 

SQL Server 2000:在DBCCmemorystatus输出中,OS Reserved和OS Committed计数器将会告诉你SQL Server自己在MTL中使用了多少页。

注意:每页是8192字节,因此,MultipyOS Committed * 8192字节/1024 得到MB。

 

SQL Server 2005/2008:在SQL Server错误日志中OOM错误之后,立即打印的DBCCmemorystatus输出中,捕获所有节点(内存节点Id = 0,1..n)的MultiPage Allocator总和。这将告诉你SQL Server自己在MTL使用了多少KB。

 

你也可以从sys.dm_os_memory_clerks求multi_pages_kb的总和:

 

select sum(multi_pages_kb)  fromsys.dm_os_memory_clerks

 

如果SQL Server自身使用了MemToLeave内存的大部分,查看DBCC MEMORYSTATUS输出的MultiPage Allocator值,确定哪个memory clerk消耗内存的大多数。

 

Sys.dm_os_memory_clerks输出也将表明哪个memoryclerk正消耗MTL内存的大多数。使用以下查询。使用sys.dm_os_memory_objects将会深入了解。

 

select *  from sys.dm_os_memory_clerksorder by  multi_pages_kb  desc
 
select b.type,a.type,* fromsys.dm_os_memory_objects a,sys.dm_os_memory_clerks b
wherea.page_allocator_address=b.page_allocator_address order by  b.multi_pages_kb desc
,a.max_pages_allocated_count desc

 

如果SQL Server拥有的内存非常少,确定是否有COM对象、SQL Mail或第三方扩展存储过程正被使用,如果可能将它们从进程中移出。

 

COM对象:

COM对象可以在每个sp_OACreate调用中利用可选的第三个参数([context])从进程中移出。如果传递给sp_OACreate的第三个参数的int值为4,SQL将尝试在它自己的dllhost.exe进程的外部实例化该对象。更多关于[context]参数可以在联机帮助“sp_OACreate”专题里找到。

警告:大多数COM对象在进程外运行良好,而某些会失败。我们应该使用context=4运行一些功能性测试,确保它们的对象可以成功在进程外运行。

 

链接服务器OLEDB提供者:

链接服务器OLEDB提供者可以通过设置“AllowInProcess”OLEDB提供者选项将该提供者设置为0来移出进程。对于每个SQL实例提供者选项存储在注册表的以下位置:

Default Instance:HKLM\SOFTWARE\Microsoft\MSSQLServer\Providers
Named Instance: HKLM\SOFTWARE\Microsoft\Microsoft SQL
Server\<instance>\Providers

如果对于相关第三方提供者的AllowInProcess注册表值不存在,以REG_DWord值创建它并赋值为0.有些OLEDB提供者不能被成功移出进程,但是大多数可以。

 

扩展存储过程:

扩展存储过程总是在进程内运行;没有直接的方法移出进程。然而,在某些情况下可以将扩展存储过程放在一个独立的SQL实例,并使用服务器对服务器的rpc调用来在远程实例执行它们。该技术在KB 243428中有详细描述。

 

第2部分(BPOOL错误):

 

如果问题是使用BPOOL,在SQL Server错误日志的OOM错误后立即打印的DBCC memorystatus输出,捕获所有节点(内存节点Id=0,1..n)的singlePageAllocator总和。这将会告诉你在MTL中每个memory clerk使用了多少KB。

 

Sys.dm_os_memory_clerks输出也表明哪个memoryclerk正消耗大多数BPOOL(single_pages_kb)内存。使用以下查询,你可以通过sys.dm_os_memory_objects深入了解:

 

select *  from sys.dm_os_memory_clerksorder by  Single_pages_kb  desc
 
select b.type,a.type,* fromsys.dm_os_memory_objects a,sys.dm_os_memory_clerks b
wherea.page_allocator_address=b.page_allocator_address order by  b.single_pages_kb desc

 

sys.dm_os_memory_clerks可以提供SQLServer内存状态的完整图片,并可以sys.dm_os_memory_objects细化。

注意:single_pages_kb是Bpool,multi_pages_kb是MTL

 

可以帮助SQL Server内存故障排除的其他视图:

select * from sys.dm_os_memory_objects
select * from sys.dm_os_memory_pools
select * from sys.dm_os_memory_nodes
select * fromsys.dm_os_memory_cache_entries
select * fromsys.dm_os_memory_cache_hash_tables

 

一些用于SQL Server内存故障排除的查询:

--Bpool statistics
 
select
(cast(bpool_committed as bigint) * 8192)/(1024*1024)  as bpool_committed_mb,
(cast(bpool_commit_target as bigint) *8192) / (1024*1024) as bpool_target_mb,
(cast(bpool_visible as bigint)* 8192) /(1024*1024) as bpool_visible_mb
from sys.dm_os_sys_info
Go
 
-- Get me physical RAM installed and sizeof user VAS
select physical_memory_in_bytes/(1024*1024)as phys_mem_mb,
virtual_memory_in_bytes/(1024*1024) asuser_virtual_address_space_size
from sys.dm_os_sys_info
go
 
--System memory information
 
select total_physical_memory_kb/(1024) asphys_mem_mb,
available_physical_memory_kb/(1024) asavail_phys_mem_mb,
system_cache_kb/(1024) as sys_cache_mb,
(kernel_paged_pool_kb+kernel_nonpaged_pool_kb)/(1024)as kernel_pool_mb,
total_page_file_kb/(1024) as total_virtual_memory_mb,
available_page_file_kb/(1024) asavailable_virtual_memory_mb,
system_memory_state_desc
from sys.dm_os_sys_memory
go
 
-- Memory utilized by SQLSERVR processGetMemoryProcessInfo() api used for this
select physical_memory_in_use_kb/(1024) assql_physmem_inuse_mb,
locked_page_allocations_kb/(1024) asawe_memory_mb,
total_virtual_address_space_kb/(1024) asmax_vas_mb,
virtual_address_space_committed_kb/(1024)as sql_committed_mb,
memory_utilization_percentage asworking_set_percentage,
virtual_address_space_available_kb/(1024)as vas_available_mb,
process_physical_memory_low asis_there_external_pressure,
process_virtual_memory_low asis_there_vas_pressure
from sys.dm_os_process_memory
go
 
--Reosurce monitor ringbuffer
select * from sys.dm_os_ring_buffers
where ring_buffer_type like'RING_BUFFER_RESOURCE%'
go
 
--Memory in each node
 
select memory_node_id as node,virtual_address_space_reserved_kb/(1024) as VAS_reserved_mb,
virtual_address_space_committed_kb/(1024)as virtual_committed_mb,
locked_page_allocations_kb/(1024) aslocked_pages_mb,
single_pages_kb/(1024) as single_pages_mb,
multi_pages_kb/(1024) as multi_pages_mb,
shared_memory_committed_kb/(1024) asshared_memory_mb
from sys.dm_os_memory_nodes
where memory_node_id != 64
go
 
--Vas summary
with vasummary(Size,reserved,free) as (select size = vadump.size,
reserved = SUM(case(convert(int,vadump.base) ^ 0)  when 0 then 0 else 1end),
free = SUM(case(convert(int, vadump.base) ^0x0) when 0 then 1 else 0 end)
from
(select CONVERT(varbinary,sum(region_size_in_bytes)) as size,
region_allocation_base_address as base
from sys.dm_os_virtual_address_dump
where region_allocation_base_address<> 0x0
group by region_allocation_base_address
UNION(
select CONVERT(varbinary,region_size_in_bytes),
region_allocation_base_address
from sys.dm_os_virtual_address_dump
where region_allocation_base_address = 0x0)
)
as vadump
group by size)
select * from vasummary
go
 
-- Clerks that are consuming memory
select * from sys.dm_os_memory_clerks
where (single_pages_kb > 0) or(multi_pages_kb > 0)
or (virtual_memory_committed_kb > 0)
go
 
-- Get me stolen pages
--
select (SUM(single_pages_kb)*1024)/8192 astotal_stolen_pages
from sys.dm_os_memory_clerks
go
 
-- Breakdown clerks with stolen pages
select type, name,sum((single_pages_kb*1024)/8192) as stolen_pages
from sys.dm_os_memory_clerks
where single_pages_kb > 0
group by type, name
order by stolen_pages desc
go
 
-- Non-Bpool allocation from SQL Serverclerks
 
select SUM(multi_pages_kb)/1024 astotal_multi_pages_mb
from sys.dm_os_memory_clerks
go
-- Who are Non-Bpool consumers
--
select type, name, sum(multi_pages_kb)/1024as multi_pages_mb
from sys.dm_os_memory_clerks
where multi_pages_kb > 0
group by type, name
order by multi_pages_mb desc
go
 
-- Let's now get the total consumption ofvirtual allocator
--
selectSUM(virtual_memory_committed_kb)/1024 as total_virtual_mem_mb
from sys.dm_os_memory_clerks
go
 
-- Breakdown the clerks who use virtualallocator
select type, name,sum(virtual_memory_committed_kb)/1024 as virtual_mem_mb
from sys.dm_os_memory_clerks
where virtual_memory_committed_kb > 0
group by type, name
order by virtual_mem_mb desc
go
 
-- memory allocated by AWE allocator API'S
select SUM(awe_allocated_kb)/1024 astotal_awe_allocated_mb
from sys.dm_os_memory_clerks
go
 
-- Who clerks consumes memory using AWE
 
select type, name,sum(awe_allocated_kb)/1024 as awe_allocated_mb
from sys.dm_os_memory_clerks
where awe_allocated_kb > 0
group by type, name
order by awe_allocated_mb desc
go
 
-- What is the total memory used by theclerks?
select (sum(multi_pages_kb)+
SUM(virtual_memory_committed_kb)+
SUM(awe_allocated_kb))/1024
from sys.dm_os_memory_clerks
go
--
-- Does this sync up with what the nodethinks?
--
selectSUM(virtual_address_space_committed_kb)/1024 as total_node_virtual_memory_mb,
SUM(locked_page_allocations_kb)/1024 astotal_awe_memory_mb,
SUM(single_pages_kb)/1024 astotal_single_pages_mb,
SUM(multi_pages_kb)/1024 astotal_multi_pages_mb
from sys.dm_os_memory_nodes
where memory_node_id != 64
go
--
-- Total memory used by SQL Server throughSQLOS memory nodes
-- including DAC node
-- What takes up the rest of the space?
select(SUM(virtual_address_space_committed_kb)+
SUM(locked_page_allocations_kb)+
SUM(multi_pages_kb))/1024 astotal_sql_memusage_mb
from sys.dm_os_memory_nodes
go
--
-- Who are the biggest cache stores?
select name, type,(SUM(single_pages_kb)+SUM(multi_pages_kb))/1024
as cache_size_mb
from sys.dm_os_memory_cache_counters
where type like 'CACHESTORE%'
group by name, type
order by cache_size_mb desc
go
--
-- Who are the biggest user stores?
select name, type,(SUM(single_pages_kb)+SUM(multi_pages_kb))/1024
as cache_size_mb
from sys.dm_os_memory_cache_counters
where type like 'USERSTORE%'
group by name, type
order by cache_size_mb desc
go
--
-- Who are the biggest object stores?
select name, type,(SUM(single_pages_kb)+SUM(multi_pages_kb))/1024
as cache_size_mb
from sys.dm_os_memory_clerks
where type like 'OBJECTSTORE%'
group by name, type
order by cache_size_mb desc
go
 
--Which object is really consuming fromclerk
select * from sys.dm_os_memory_clerks a
,sys.dm_os_memory_objects b
where a.page_allocator_address =b.page_allocator_address
--group by a.type, b.type
order by a.type, b.type
go
 
--To get the list of 3rd party DLL loadedinside SQL server memory
select * from sys.dm_os_loaded_moduleswhere company <> 'Microsoft Corporation'
go
 
--Which database page is in my memory
select db_name(database_id),(cast(count(*)as bigint)*8192)/1024/1024 as "size in mb" fromsys.dm_os_buffer_descriptors
group by db_name(database_id)

 

其他SQL Server内存博文:

Https://mssqlwiki.com/sqlwiki/sql-performance/basics-of-sql-server-memory-architecture/

https://mssqlwiki.com/2012/05/18/sql-server-performance-degraded-in-32-bit-sql-server-after-i-adding-additional-ram/

https://mssqlwiki.com/2012/06/27/a-significant-part-of-sql-server-process-memory-has-been-paged-out/

 

其他性能博文:

https://mssqlwiki.com/sqlwiki/sql-performance/io-bottlenecks/

https://mssqlwiki.com/sqlwiki/sql-server-agent/sql-agent-maxworkerthreads-and-agent-subsystem/

https://mssqlwiki.com/sqlwiki/sql-performance/async_network_io-or-network_io/

 

 


您可能感兴趣的文档:

--结束END--

本文标题: SQL Server内存故障排除

本文链接: https://www.lsjlt.com/news/38041.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL Server内存故障排除
    SQLServer内存故障排除 翻译自:https://blogs.msdn.microsoft.com/karthick_pk/2012/06/15/troubleshooting-sql-se...
    99+
    2022-10-18
  • 使用Debug Diagnostic Tool排除内存泄漏故障
    使用Debug Diagnostic Tool排除内存泄漏故障翻译自:https://mssqlwiki.com/2012/12/06/debugging-memory-leaks-using-debug-...
    99+
    2022-10-18
  • SQL Server 2012内存
    SQLServer 2012内存 翻译自:https://mssqlwiki.com/tag/sql-server-2012-memory-architecture/ SQL Serve...
    99+
    2022-10-18
  • 故障排除指南:MySQL运行内存不足怎么办?
    故障排除对于所有人来说都不会是一件有趣的事情,尤其是在没有崩溃报告的情况下。如果MySQL因内存不足而崩溃时应该怎么办?Peter Zaitsev曾在2012年写过的一篇博客中给出了许多有用的提示,而利用...
    99+
    2022-10-18
  • SQL Serer闩锁 和 闩锁超时故障排除
    SQL Serer闩锁 和 闩锁超时故障排除翻译自:https://mssqlwiki.com/2012/09/07/latch-timeout-and-sql-server-latch/在一个多线程的进程...
    99+
    2022-10-18
  • ORA-03113 故障排除
    某一次在玩命往实验环境中插入数据的时候,最后撑爆了ASM。用ASMCA看,可用空间居然是-0.04GB。在此时shutdown abort,再启动,就只能到mount状态了,只要一open,就会ORA-03...
    99+
    2022-10-18
  • SQL Server内存机制详解
    1.前言 对于数据库引擎来说,内存是一个性能提升的重要解决手段。把数据缓存起来,可以避免在查询或更新数据时花费多余的时间,而这时间通常是从磁盘获取数据时用来等待磁盘寻址的。把执行计划...
    99+
    2022-11-13
  • sql server中内存的示例分析
    这篇文章将为大家详细讲解有关sql server中内存的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一. 前言 对于sql server 这个产品来说...
    99+
    2022-10-18
  • Wireshark中怎么排除网络故障
    这期内容当中小编将会给大家带来有关Wireshark中怎么排除网络故障,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。配置用户界面及全局、协议参数通过Edit菜单中的Preferences菜单项以及Pref...
    99+
    2023-06-17
  • nslookup DNS 域名解析 故障排除
    nslookup是一个可以监测DNS服务器是否正常运行,且是否能正确解析域名的工具。 参考文章:http://www.t086.com/article/5138 常用方法 $ nslookup 某一域名A服务器: 正在工作的DNS服...
    99+
    2023-10-11
    服务器 网络 运维
  • 电脑黑屏故障如何排除
    这篇文章主要介绍了电脑黑屏故障如何排除的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇电脑黑屏故障如何排除文章都会有所收获,下面我们一起来看看吧。电脑黑屏怎么办?如果打开电脑却什么反应也没有,不要第一反应就是电脑...
    99+
    2023-06-28
  • GitLab的故障排除和故障恢复功能及步骤
    GitLab的故障排除和故障恢复功能及步骤引言:在软件开发的过程中,版本控制系统是必不可少的工具之一。GitLab作为一款流行的版本控制系统,提供了丰富的功能和强大的性能。然而,由于各种原因,GitLab可能会遇到故障。为了保证团队的正常工...
    99+
    2023-10-27
    网络连接 故障排除 代码错误 异常日志
  • SQL Server内存数据库原理解析
    前言关系型数据库发展至今,细节上以做足文章,在寻求自身突破发展的过程中,内存与分布式数据库是当下最流行的主题,这与性能及扩展性在大数据时代的需求交相辉映。SQL Server作为传统的数据库也在最新发布版本...
    99+
    2022-10-18
  • 怎么进行Linux 硬件故障排除
    这篇文章将为大家详细讲解有关怎么进行Linux 硬件故障排除,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Linux 服务器 在物理机、虚拟化、私有云、公共云和混合云等许多不同种类的基础设施...
    99+
    2023-06-16
  • Docker daemon 配置和故障排除过程
    目录启动daemonDocker daemon配置读取日志启动调试强制日志输出检查docker是否运行总结启动daemon 启动daemon命令取决与你使用的操作系统: RHEL, ...
    99+
    2023-05-19
    Docker daemon配置 Docker daemon故障排除 daemon故障排除
  • 故障排除 | enq:TX - index contention等待事件
    当一个事务对一个索引块做DML时,由于该索引块没有空闲空间导致索引块分裂,这时其他事务正在向这个索引块做DML时就会产生等待,直到这个索引块分裂完成。 以下是发生索引分裂竞争的几种场景: ...
    99+
    2022-10-18
  • 使用SQL Server内存优化表 In-Memory OLTP
    如果你的系统有高并发的要求,可以尝试使用SQL Server内存优化表来提升你的系统性能。你甚至可以把它当作Redis来使用。 要使用内存优化表,首先要在现在数据库中添加一个支持内存优化的文件组。 Memory Optimized File...
    99+
    2020-09-30
    使用SQL Server内存优化表 In-Memory OLTP
  • SQL Server虚拟内存不足如何解决
    本篇文章给大家分享的是有关SQL Server虚拟内存不足如何解决,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  SQLServer虚拟内存...
    99+
    2022-10-18
  • ADO.NET连接管理器故障怎么排除
    这篇文章主要介绍“ADO.NET连接管理器故障怎么排除”,在日常操作中,相信很多人在ADO.NET连接管理器故障怎么排除问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ADO.NET连接管理器故障怎么排除”的疑...
    99+
    2023-06-17
  • 深入介绍Spring框架及故障排除
    目录Spring的缺点不可理解性按注释编程故障排除为什么是Spring IoC?选择其他人在说什么结论前言: 曾几何时,Spring框架提供了比J2EE更轻量级和更灵活的解决方案。即...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作