之前一直运行正常的数据库
最近两天就连续出现上述情况
有一次间隔4小时,就导致应用程序连接数据库断开,然后过几小时,数据库所在机器远程也连不上了
请问可以从那些方面查找问题所在
------解决思路----------------------
内存没有释放,查看JOB\相关接口\程序连接是否有释放
------解决思路----------------------
--企业管理器里直接查看
查看JOB是否有耗时的调度
估计是程序连接没有释放
------解决思路----------------------
先从简单的来:
磁盘空间是否满了?
日志文件、数据文件是否满了?
排除后再用企业管理器,看还在活动的连接,当前在执行什么语句。具体分析。
------解决思路----------------------
这个问题,首先要明确,内存到底是 消耗在哪儿了,是 sql cache语句缓存,还是 buffer cache 数据缓存,还是其他的内存,比如连接,游标等。
然后才能解决问题
------解决思路----------------------
数据库服务器内存使用量持续增长有时是正常的,因为MSSQL会自动动态管理内存.
建议:
1.之前一直运行正常,分析最近两天是否有做程序更新或上线新功能,
检查其程序代码,是否有死循环和持续消耗内存的语句.
2.检查SQL Server最新的SP补丁是否有安装.如SQL2008R2 SP2等.
3.观察DMV视图sys.dm_os_memory_clerks,查看服务器内存使用情况.
4.检查SQL实例的内存设置,是否有限制其最大使用内存,可设为动态管理即可.
5.检查数据库服务器windows上除了SQL实例,是否有其他应用程序消耗内存.
------解决思路----------------------
确认SQL2005 SP4补丁安装了没?
------解决思路----------------------
估计是过程缓存耗尽,数据缓存不会引发此故障,还得实际分析诊断,没法猜
------解决思路----------------------
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可能有些地方不同,但是大致思路是这样。
------解决思路----------------------
看看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)
------解决思路----------------------
sql server数据库内存持续增长,一般会自动在极限前停止增长的
你的软硬件是什么情况?内存、数据文件。。。。
------解决思路----------------------
我一般是先查网络,
然后再看本机连接是否有问题。
其实还有不知道LZ的数据库是盗版还是正版。
我发现我们公司用的开发版和企业版差距也很大的
开发版经常莫名连不上