Mol*_*pad 4 performance sql-server memory sql-server-2012
我正在对我们的一个 SharePoint 数据库的问题进行故障排除,我认为 PLE 的大幅下降主要是由于 I/O 活动增加(我同时看到读取、写入和延迟写入增加)
此时的缓冲区缓存命中率通常为 96%。
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 2012 年 10 月 19 日 13:38:57 版权所有 (c) Microsoft Corporation Enterprise Edition:Windows NT 6.2(Build 9200:)上的基于核心的许可(64 位)(管理程序)
我想在 PLE 删除的确切时间检查缓冲区缓存的大小,所以我正在运行以下查询,我认为它以 MB 为单位给出了大小:
DECLARE @total_buffer INT;
SELECT @total_buffer = cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name LIKE '%Buffer Manager%'
AND counter_name = 'Database Pages'
SELECT ((@total_buffer * 8) / 1024) AS CacheSizeMB
Run Code Online (Sandbox Code Playgroud)
我看到的大小没有意义(对我来说,我的意思是),通常为 250-350MB。我希望我会看到一个大尺寸,然后我可以检查哪些表在缓存中的页面最多,这有望引导我找到哪些 LOB 对象正在被检索/上传,从而导致问题。
我还需要查看计划缓存吗?即 PLE 丢弃可能是由一些繁重的表扫描引起的吗?
SQL Server 从可用的 16GB 分配了 12GB 的 MAX 内存。这与缓冲区缓存大小有何关联?
如果 PLE 下降到 0-5 的值,那么缓冲区大小肯定应该更大......?
我正在对我们的一个 SharePoint 数据库的问题进行故障排除,我认为 PLE 的大幅下降主要是由于 I/O 活动增加(我同时看到读取、写入和延迟写入增加)
我可以从你提出的问题中看出SQL Server 2012 SP1。SQL Server 2012 中有一个Bug,它迫使 PLE 急剧下降,但在SQL Server 2012 SP1 CU4. 现在既然 ** SQL Server 2012 SP3** 已经发布,我建议你应用 SP3,看看问题是否消退。
我想在 PLE 删除的确切时间检查缓冲区缓存的大小,
您不能使用 perfmon 计数器Buffer Manager: Database Pages来检查缓冲区大小。根据BOL,它的含义是:
指示缓冲池中包含数据库内容的页数。
所以你可以看到它没有提供关于完整缓冲池的信息。当您定义 SQL Server max server memory 时,max server memory 中设置的值成为缓冲池大小。因此,从 SQL Server 2012 开始,缓冲池的意义不大。以前它既是消费者又是内存的提供者。从 SQL Server 2012 开始,它只是消费者。要查看缓冲池的内容(在某种程度上),您有 DMV sys.dm_os_buffer_descriptors。
下面的查询返回每个数据库的缓存页数。
SELECT COUNT(*)AS cached_pages_count
,CASE database_id
WHEN 32767 THEN 'ResourceDb'
ELSE db_name(database_id)
END AS database_name
FROM sys.dm_os_buffer_descriptors
GROUP BY DB_NAME(database_id) ,database_id
ORDER BY cached_pages_count DESC;
Run Code Online (Sandbox Code Playgroud)
如果您想为特定数据库中的每个对象缓存页面
SELECT COUNT(*)AS cached_pages_count
,name ,index_id
FROM sys.dm_os_buffer_descriptors AS bd
INNER JOIN
(
SELECT object_name(object_id) AS name
,index_id ,allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.hobt_id
AND (au.type = 1 OR au.type = 3)
UNION ALL
SELECT object_name(object_id) AS name
,index_id, allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.partition_id
AND au.type = 2
) AS obj
ON bd.allocation_unit_id = obj.allocation_unit_id
WHERE database_id = DB_ID()
GROUP BY name, index_id
ORDER BY cached_pages_count DESC;
Run Code Online (Sandbox Code Playgroud)