Pau*_*ulJ 22 performance sql-server-2005 sql-server configuration
我们在 SQL 2005 上有一个生产数据库服务器。一切正常运行了一段时间,但几周后我们看到性能显着下降。只有重新启动 SQL Server 才能使性能恢复正常。
一些背景:
我们在非高峰时间尝试了几件事: - 运行 DBCC DROPCLEANBUFFERS(带有 CHECKPOINT)以清除数据缓存。它没有任何效果,也不会清除任何 RAM 使用量)。- 运行 FREEPROCCACHE 和 FREESYSTEMCACHE 以清除查询计划和存储的 proc 缓存。没有效果。
显然,在活跃的生产环境中重新启动 SQL Server 并不理想。我们缺少一些东西。还有其他人经历过这个吗?
更新:2012 年 4 月 28 日 仍在与这个问题作斗争。我已将 SQL Server 的内存降低到 10 GB,只是为了排除与操作系统的任何争用。我越来越接近缩小范围,但下一步需要一些帮助。
这是我发现的,重新启动 SQL Server 后,页面文件在 12.3 GB 和 12.5 GB 之间徘徊。它会保持这种状态好几天。服务器线程总数将在 850 到 930 之间挂起 - 在几天内也保持稳定和一致(sqlserver 稳定在 55 到 85 之间,具体取决于流量)。
然后,有一个“事件”。我不知道事件是什么,我在日志中看不到它,也看不到在星期几或它发生的时间有任何一致的东西,但是他的页面文件突然跳到了 14.1 或 14.2 GB,线程跳转到 1750 到 1785 之间。
发生这种情况时检查性能,其中超过 900 个线程是 sqlserver。所以我去 sp_who2 看看这些线程是从哪里来的......而且只有使用过的 80 个左右的 db 连接。
那么....有没有人知道我如何找到 SQL Server 上其余 900 个线程的位置,以及它们在做什么?
更新:2012 年 6 月 1 日 仍在与此问题作斗争。对于仍在阅读本文的任何人来说,线程跳跃的问题已经解决。这是由自动更新的 ComVault 备份软件引起的。它正在创建一个线程,试图备份不再存在的数据库(它维护以前数据库的列表),而不仅仅是备份当前数据库。
但是 - 问题仍然存在,我们必须每周重新启动,或者需要几天时间。与 Rackspace 团队合作,看看他们是否可以提供任何线索。
你说一切都很好,然后几周后,性能下降。(通常,人们声称性能下降很快,或在特定时间,或以看似随机的间隔。这可能意味着糟糕的 I/O 性能或锁风暴或在奇怪的时间运行的 CPU 密集型查询,或重量级计划作业或缺乏索引或错误的统计数据导致 CPU 密集型查询或磁盘读取。或其他东西。)周是不寻常的。
我的假设是您服务器上的另一个应用程序正在泄漏内存。我已经在病毒软件(每个 DBA 最喜欢的服务器软件恶棍)和 3rd 方监控软件中看到了这一点。随着时间的推移,我会仔细检查 SQL Server 的内存使用情况,并且我也会获取盒子上所有其他应用程序的所有内存使用情况。如果您对 SQL Server 的内存使用设置了硬限制并将其设置为不允许分页,则可能是其他应用程序被分页并占用了 I/O 容量。
不难找。如果您还没有在服务器上保存指标,我会启动 Perfmon 并让它每 30 或 60 分钟抓取一个样本。几天后,您可能会看到另一个应用程序的内存使用量上升。
SQL Server 日志中是否有错误消息指出“sql server 的重要部分已被调出”?这也将是一个很大的线索。
让我祝贺您能够在只有 16 GB 内存的 SQL 服务器的单个实例上运行 1200 个数据库,并且在顺利运行几周后只遇到这些类型的问题。在当地的 PASS 章节讲的好故事。
现在进行故障排除:SQL 和操作系统的 RAM 均为 16 GB。我假设您的最大内存设置为 15 GB 或最大值。这可能会导致缓冲池耗尽所有内存并阻塞操作系统。您是说清除缓冲池和缓存没有显示任何差异,而且您的 PLE 高于 300。这证明了内存瓶颈。服务器上的 CPU 和 IO 怎么样(规格/统计数据)?
运行select * from sys.dm_exec_request where session_id>50 and session_id<>@@spid
,您看到的资源争用是什么(wait_type、wait_time、last_wait_type、wait_resource)。
1200 个数据库、一个操作系统,可能还有其他东西?是的,我认为服务器本身需要超过 1gb 的内存才能运行,特别是考虑到,如果您将 15gb 设置为 SQL Server 的最大内存设置,它仍然需要15gb 之外的额外内存用于线程。
我会将 SQL Server 降低到 14GB,以便为服务器提供更多喘息空间。
此外,在“Professional SQL Server 2008 Internals and Troubleshooting”中给出了一个示例,用于在具有第三方备份实用程序和 16GB RAM 的 SQL Server 2008 x64 系统上的内存限额:
在书中,它展示了如何确定您可以拥有的最大线程数,以及如何计算它们将占用多少内存。运行此命令(更改服务器类型以匹配您的服务器)以确定您的线程需要多少内存。
declare @servertype int
set @servertype=1
/*
1: x86 (32-bit)
2: x64 (64-bit)
3: IA64
*/
select max_workers_count *
(
case @servertype when 1 then .5
when 2 then 2
when 3 then 4
else .5
end
)
from sys.dm_os_sys_info
Run Code Online (Sandbox Code Playgroud)
小智 3
DBCC 命令只会清除内存缓冲区,不会将内存释放回操作系统。
你知道SQL Server实际上正在消耗内存吗?我建议查看设置 Perfmon 会话或在重新启动后开始收集 DMV 信息,以了解 SQL Server 正在做什么和正在做什么。另请注意,用户在收集期间是否比平时做更多的工作(例如月末处理等)。您是否在同一台服务器上运行 SSRS、SSIS 或 SSAS?
您的系统上有 1200 个数据库,您拥有的最大数据库大小是多少?
归档时间: |
|
查看次数: |
10168 次 |
最近记录: |