sql server数据库内存持续增长,几小时后就死机

scsnsjsl_cs_dn 2015-03-19 01:53:53
之前一直运行正常的数据库
最近两天就连续出现上述情况
有一次间隔4小时,就导致应用程序连接数据库断开,然后过几小时,数据库所在机器远程也连不上了

请问可以从那些方面查找问题所在
...全文
500 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏芝麻 2015-03-20
  • 打赏
  • 举报
回复
我一般是先查网络, 然后再看本机连接是否有问题。 其实还有不知道LZ的数据库是盗版还是正版。 我发现我们公司用的开发版和企业版差距也很大的 开发版经常莫名连不上
haitao 2015-03-20
  • 打赏
  • 举报
回复
sql server数据库内存持续增长,一般会自动在极限前停止增长的 你的软硬件是什么情况?内存、数据文件。。。。
薛定谔的DBA 2015-03-19
  • 打赏
  • 举报
回复
看看sql日志或者系统日志有什么提示。或者最近更改过什么。 1. 按楼上说,先在SQLserver的部分内存使用Maximum server memory 2. 确定是SQLserver占用的内存还是Windows应用程序其他占用内存。 这个可以打开性能计数器观察Memory和SQLServer:Memory Manager对比,可以让它持续跟踪保存下来,发生后再打开看看。 3. 发生时可以先执行一些视图判断看看
--查看当前是否有等待内存授予的进程
Select a.*,b.text, c.query_plan 
from sys.dm_exec_query_memory_grants a
CROSS APPLY sys.dm_exec_sql_text(sql_handle) b 
CROSS APPLY sys.dm_exec_query_plan (plan_handle) c
--当前线程数(确认是否线程增大导致连接问题)
select COUNT(*) as 当前线程数 from sys.dm_os_workers
--检查数据库活动游标(是否大量游标未关闭导致性能下降)
DBCC ACTIVECURSORS 

select * from master.dbo.syscursors where status<>-1
--检查当前存在的堵塞
select p.*,s.text from master.dbo.sysprocesses p cross apply sys.dm_exec_sql_text(p.sql_handle) s
where blocked > 0 or spid in(select blocked from master.dbo.sysprocesses where blocked > 0)
oraclecaicai 2015-03-19
  • 打赏
  • 举报
回复
1.先设置一下SQL Server的Maximum server memory,避免系统内存占满而失去响应。 2.在SQL Server的内存变得较高时,查看一下内存的分布情况: SELECT * FROM sys.dm_os_performance_counters WHERE object_name LIKE 'SQLServer:Buffer Manager%' AND counter_name IN ('Database pages', 'Free pages', 'Stolen pages', 'Total pages') ORDER BY counter_name 3.如果Stolen pages的部分较高,查看一下sys.dm_os_memory_clerks视图,看看具体是哪个内存结构占用内存较多: SELECT * FROM sys.dm_os_memory_clerks ORDER BY single_pages_kb + multi_pages_kb DESC 4.根据上述结果再进一步分析。我的环境是SQL Server 2008 R2,2005可能有些地方不同,但是大致思路是这样。
Q315054403 2015-03-19
  • 打赏
  • 举报
回复
估计是过程缓存耗尽,数据缓存不会引发此故障,还得实际分析诊断,没法猜
scsnsjsl_cs_dn 2015-03-19
  • 打赏
  • 举报
回复
引用 11 楼 ap0405140 的回复:
确认SQL2005 SP4补丁安装了没?
select @@version出来是: Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
唐诗三百首 2015-03-19
  • 打赏
  • 举报
回复
确认SQL2005 SP4补丁安装了没?
scsnsjsl_cs_dn 2015-03-19
  • 打赏
  • 举报
回复
引用 7 楼 ap0405140 的回复:
数据库服务器内存使用量持续增长有时是正常的,因为MSSQL会自动动态管理内存. 建议: 1.之前一直运行正常,分析最近两天是否有做程序更新或上线新功能, 检查其程序代码,是否有死循环和持续消耗内存的语句. 2.检查SQL Server最新的SP补丁是否有安装.如SQL2008R2 SP2等. 3.观察DMV视图sys.dm_os_memory_clerks,查看服务器内存使用情况. 4.检查SQL实例的内存设置,是否有限制其最大使用内存,可设为动态管理即可. 5.检查数据库服务器windows上除了SQL实例,是否有其他应用程序消耗内存.
1、最近没有更新应用程序以及调整数据库 2、sql server用的是2005版本 3、对视图sys.dm_os_memory_clerks应该具体看什么指标 4、确实 没有限制实例最大使用内存 5、数据库所在 服务器 除了sql外,基本 没运行什么程序,刚才又看了下上午11点重启的 服务, 这会15:40,sql server站用的内存又从200多M增加到现在1.58G
scsnsjsl_cs_dn 2015-03-19
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
先从简单的来: 磁盘空间是否满了? 日志文件、数据文件是否满了? 排除后再用企业管理器,看还在活动的连接,当前在执行什么语句。具体分析。
针对你说的几种情况,刚才检查了: 1、数据库文件所在磁盘空间还有近100个G 2、数据文件和日志文件均设置的不限制增长 3、如何查看当前活动连接,以及在执行的语句
scsnsjsl_cs_dn 2015-03-19
  • 打赏
  • 举报
回复
引用 5 楼 yupeigu 的回复:
这个问题,首先要明确,内存到底是 消耗在哪儿了,是 sql cache语句缓存,还是 buffer cache 数据缓存,还是其他的内存,比如连接,游标等。 然后才能解决问题
如何确认内存主要消耗在那里?
唐诗三百首 2015-03-19
  • 打赏
  • 举报
回复
数据库服务器内存使用量持续增长有时是正常的,因为MSSQL会自动动态管理内存. 建议: 1.之前一直运行正常,分析最近两天是否有做程序更新或上线新功能, 检查其程序代码,是否有死循环和持续消耗内存的语句. 2.检查SQL Server最新的SP补丁是否有安装.如SQL2008R2 SP2等. 3.观察DMV视图sys.dm_os_memory_clerks,查看服务器内存使用情况. 4.检查SQL实例的内存设置,是否有限制其最大使用内存,可设为动态管理即可. 5.检查数据库服务器windows上除了SQL实例,是否有其他应用程序消耗内存.
scsnsjsl_cs_dn 2015-03-19
  • 打赏
  • 举报
回复
引用 3 楼 roy_88 的回复:
[quote=引用 2 楼 scsnsjsl_cs_dn 的回复:] [quote=引用 1 楼 roy_88 的回复:] 内存没有释放,查看JOB\相关接口\程序连接是否有释放
比如JOB怎么查看是否有释放?[/quote] --企业管理器里直接查看 查看JOB是否有耗时的调度 估计是程序连接没有释放[/quote] 连接数据库的应用程序是1个半月前的版本,数据库也未调整 之前一直没问题 上周五出现过一次数据库连接不上,当时以为是一般死机 结果昨天上午出现过1分钟的短暂连接不上,然后自动恢复 昨天下午又出现,下午6点重启服务器后,晚上快10点的时候应用程序又连不上了, 然后今早上发现又死机了
  • 打赏
  • 举报
回复
这个问题,首先要明确,内存到底是 消耗在哪儿了,是 sql cache语句缓存,还是 buffer cache 数据缓存,还是其他的内存,比如连接,游标等。 然后才能解决问题
Tiger_Zhao 2015-03-19
  • 打赏
  • 举报
回复
先从简单的来:
磁盘空间是否满了?
日志文件、数据文件是否满了?

排除后再用企业管理器,看还在活动的连接,当前在执行什么语句。具体分析。
中国风 2015-03-19
  • 打赏
  • 举报
回复
引用 2 楼 scsnsjsl_cs_dn 的回复:
[quote=引用 1 楼 roy_88 的回复:] 内存没有释放,查看JOB\相关接口\程序连接是否有释放
比如JOB怎么查看是否有释放?[/quote] --企业管理器里直接查看 查看JOB是否有耗时的调度 估计是程序连接没有释放
scsnsjsl_cs_dn 2015-03-19
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
内存没有释放,查看JOB\相关接口\程序连接是否有释放
比如JOB怎么查看是否有释放?
中国风 2015-03-19
  • 打赏
  • 举报
回复
内存没有释放,查看JOB\相关接口\程序连接是否有释放

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧