标签: page-life-expectancy

SQL Server 2012 页面预期寿命在大约 50 天后重置为 0

我注意到 2 台服务器 HA 集群上的奇怪行为,我希望有人能证实我的怀疑,或者提供一些其他解释......这是我的设置:

  • 2 台服务器 SQL 2012 SP1 安装
  • 已为一些数据库启用 SQL AlwaysOn HA
  • CPU 为 2.4GHz,4 核
  • RAM 为 34 GB(它是一个 AWS 实例,因此是奇数)
  • 资源利用率比较低——每台服务器有14+GB的空闲内存,SQL没有限制使用多少内存
  • 磁盘访问时间很好 - 很少超过 15 毫秒/读或写
  • 数据库不大 - 1 GB、1.5 GB、7.5 GB
  • SQL 服务器进程使用 16 GB 专用字节,15 GB 工作集

总体而言,没有注意到资源问题。现在是奇怪的部分。SQL 没有重新启动(进程已经运行了将近 6 个月),但似乎每大约 50 天,页面预期寿命计数器就会下降到(几乎)0。直到那时它稳步攀升,没有下降。这是一个性能图:

在此处输入图片说明

当我查看计数器数据时(我没有确切的数字,只是每小时汇总),似乎 PLE 计数器值每次都达到了大约 4,295,000 秒(大约 50 天)(至少每次我有数据时)。

我疯狂的理论是,PLE 数以毫秒为单位作为无符号长整型(其限制为 4,294,967,295)并在 49.71 天时重置,无论是设计还是错误。这将解释两台服务器的行为以及它们具有的相同模式。或者它可能是完全不同的东西,我只是没有任何意义。:)

有没有人见过这样的事情,或者可以解释这种行为?

PS我看到了这篇文章,但我的情况似乎略有不同。

PPS 这是一个转贴 - 我最初把它贴在这里,但被告知这里的观众更合适。

谢谢!

sql-server sql-server-2012 page-life-expectancy

12
推荐指数
1
解决办法
2643
查看次数

Page Life Expectancy 对该实例有何看法?

我已经在环境中的几个 SQL Server 实例上安装了监控软件。我试图找到瓶颈并解决一些性能问题。我想知道某些服务器是否需要更多内存。

我对一个计数器感兴趣:页面预期寿命。在每台机器上看起来都不一样。为什么在某些情况下它会经常更改,这意味着什么?

请查看上周在几台不同机器上收集的数据。你能对每个实例说些什么?

大量使用的生产实例(1): 大量使用的生产实例 (1)

适度使用的生产环境 (2) 适度使用的生产环境 (2)

很少使用的测试实例(3)

很少使用的测试实例(3)

大量使用的生产实例 (4) 大量使用的生产实例 (4)

适度使用的测试实例(5) 适度使用的测试实例(5)

大量使用的数据仓库 (6) 大量使用的数据仓库 (6)

编辑:我为所有这些服务器添加了 SELECT @@VERSION 的输出:

Instance 1: Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation
 Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)


Instance 2: Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
Oct 19 2012 13:38:57 
Copyright (c) Microsoft Corporation
 Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: …
Run Code Online (Sandbox Code Playgroud)

sql-server memory sql-server-2008-r2 sql-server-2012 page-life-expectancy

9
推荐指数
2
解决办法
3658
查看次数

为什么 SQL Server 2005 上的页面预期寿命为 0(零)

我们一直想知道 SQL Server 的页面预期寿命。所以我们使用 Perform 来查看计数器。该值为零且永不更改。我认为一定有一些错误,所以我检查了 SQL Server DMV 查询

SELECT [object_name],[counter_name],[cntr_value]
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Manager%'
AND [counter_name] = 'Page life expectancy'
Run Code Online (Sandbox Code Playgroud)

这也整天返回零。

为了让这更有趣,我们检查了“缓冲区缓存命中率”计数器,它的平均值约为 99-100。

那么当“缓冲区缓存命中率”为 100 时,页面预期寿命如何为零?

我们缺少什么?如果它始终为零,那对我来说意味着缓冲区缓存中没有任何内容,如果缓冲区缓存命中率是 100,这似乎不正确?

提前致谢

sql-server-2005 sql-server page-life-expectancy

8
推荐指数
1
解决办法
1292
查看次数

SQL Server 的页面预期寿命会不会太高?

我已经阅读了几篇关于 SQL Server 的页面预期寿命以及它的含义以及您可以从中收集到哪些信息的文章。在我读过的大多数文章中,一个常见的、健康的 PLE 值大约是 1000-2000 秒。我已经读过,下降到大约 300 秒可能意味着您的 RAM 可能不足。

我最近刚刚升级了我们的硬件,从 14GB 增加到 64GB 的 RAM。在 14GB 上,我的 PLE 大约是 300 秒,而且我每秒有很多 5-6 次内存授予待处理。所以,这很糟糕,我增加了 RAM。现在,我的 PLE 在 5000 秒左右要高得多,而且没有更多未决的内存授予。如果我记得的话,我已经看过 7000 秒了。这比我读过的任何东西都要高得多。

高 PLE 会是坏事吗?还是越高越好?

编辑:对不起,我的 PLE 不是 7000 秒,而是70,000秒!虽然,目前它已降至 7000 左右。

在此处输入图片说明

  • 数据库大小约为 160GB。一些表有 5+ 万行。
  • max_server_memory 设置为 2147483647。

sql-server memory page-life-expectancy

8
推荐指数
1
解决办法
1万
查看次数

缓冲区大小改变?

我有一个生产数据库,它遇到了剧烈波动的页面预期寿命 (PLE) 问题。(它在随机时间崩溃为零。)

我一直在研究 PLE 问题,并发现一些似乎指向 VMWare 问题的内容,但我不确定我是否正确使用了数据。似乎我正在丢失缓冲区/缓存页面。

我正在使用这个查询:

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)

(在这里找到)

我正在计算 PLE 崩溃前后的结果(计数)。一个例子是之前的 1,097,820 和之后的 131,394。所以我似乎“丢失”了 966,426 页。

我的猜测是所有虚拟机的硬件都处于压力之下,因此它会随机从服务器中交换一些内存一段时间。(这只是一个猜测。)当这种情况发生时,所有页面都丢失了,因此 PLE 直线下降。

那么,我sys.dm_os_buffer_descriptors是否正确使用了视图? 从我读到的它总是显示使用过的缓冲区/缓存页面。所以如果它是空的(或显着减少),我要么不再有内存,要么是空的。(我很想用一种方法来证实这个结论。)

或者还有另一种解释为什么计数下降这么多?

该行下方的信息是从 OP 的评论中添加的


我们的系统管理员管理虚拟机。我希望在使用这些数据去找他们之前了解我的查询。从数据库的角度来看,PLE 崩溃的时间似乎是随机的。(在 PLE 崩溃期间不会发生重新索引或其他高性能的事情)

我做了大量的工作,看看它是否与工作负载有关。虽然存在一个性能不佳的查询,但用完所有缓存还不够。[没有] 当缓冲区计数下降时,服务器上没有重建或其他非常规用户活动。即使是这样,我也不会在上面的查询中看到使用它吗?(意味着如果它是 SQL Server 操作,计数不会保持不变,只是内容不同吗?)

我无权访问 VMWare 设置。我希望在涉及那些做的事情之前更好地理解我的发现。这个问题的重点是确保我首先正确使用视图。

在评论链的末尾:

我试图说 PLE 问题导致我丢失了缓冲页面问题。我用来获取 PLE 的查询将显示低 PLE,因为页面正在丢失。所以他们身上的东西消失了。这是一个错误的读数,因为内存量减少了。

这是我的@@Version:

Microsoft SQL Server 2012 …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012 page-life-expectancy buffer-pool

6
推荐指数
1
解决办法
2766
查看次数

如何调试缓冲区问题?

我有一个产品“Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)”,它显示出奇怪的缓冲区和页面预期寿命 (PLE) 症状。

我每分钟都在我的服务器上运行这个(跟踪这个问题):

SELECT @ple = CAST([cntr_value] AS VARCHAR(20))
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Manager%'
AND [counter_name] = 'Page life expectancy'

SELECT @usedBufferPages = CAST(COUNT(*) /128 AS VARCHAR(20)) 
FROM sys.dm_os_buffer_descriptors

DECLARE @StartDate VARCHAR(8) = Convert(VARCHAR(8), GETDATE(), 14)
RAISERROR ('%s. PLE at %s and Used Buffers at %s at %s ', 0, 
            1,@runCountString ,@ple, @usedBufferPages, @StartDate) WITH NOWAIT  
Run Code Online (Sandbox Code Playgroud)

这是一些示例输出:

16. PLE at 858 和 Used Buffers at 7290 at 09:51:42 
17. PLE at …

performance sql-server sql-server-2012 page-life-expectancy buffer-pool

6
推荐指数
3
解决办法
1060
查看次数

DateTime2 和页面预期寿命 (PLE)

据我了解,当您在表上定义列时,您就定义了其精度。该精度占用 1 个字节并存储在列级别。如果您使用 5 或更高的精度,则 DateTime2 列每行将占用 8 个字节。(精度不存储在行级别。)

但是,当您将相同的 DateTime2 转换为 VarBinary 时,它将占用 9 个字节。这是因为它需要存储在列级别的精度字节。

我很好奇这与 DateTime2 存储在内存中有何关系。假设内存中有 1,000,000 个 DateTime2(每个的精度为 5 或更高)。它会占用 8,000,000 字节内存还是 9,000,000 字节内存?

基本上,我想知道默认精度的 DateTime2 是否会比普通的 DateTime 对页面预期寿命造成更大的压力?

sql-server datetime sql-server-2016 page-life-expectancy

6
推荐指数
2
解决办法
561
查看次数

页面预期寿命是什么单位?

我目前正在使用以下查询从 SQL Server 获取页面预期寿命:

declare @PLE int

select @PLE=cntr_value 
from psql1.master.sys.dm_os_performance_counters 
where counter_name='Page life expectancy' 
and instance_name='';
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我不知道这是毫秒、秒还是什么。我目前得到的值是 88936。这可能以秒或毫秒为单位。

如果以毫秒为单位会更有意义,但是该服务器目前没有那么多使用,因此在内存中停留 24 小时 (88936/3600=24.7) 并非不可能。

performance sql-server-2008 sql-server page-life-expectancy

5
推荐指数
1
解决办法
910
查看次数

资源调控器是否有助于保护页面预期寿命?

我有几个大表需要复制到事务数据库上的分区副本中。

我担心这会对我的生产应用程序的性能造成影响。

为了缓解这种情况,我正在研究资源调控器。我将设置我的脚本以使用限制为最多 5% CPU 和内存的资源池。

关于这一点,我不确定的唯一部分是对 PLE 的影响。

据我了解,表中的选择会将值读入缓存。这将强制排除缓存中的其他内容。(PLE 的基本概念。)但是“强制退出”的项目会被限制在我指定的 5% 之内吗?

意思是在我使用了 5% 的内存后,它是否只会强制排除相同 5% 中的缓存项目?(其他 95% 不受影响。)

另一种提问方式是:5% 的内存限制是否与 5% 的缓存限制相同?

sql-server sql-server-2012 resource-governor page-life-expectancy

5
推荐指数
1
解决办法
130
查看次数

SQL Server 应该有多少内存

我有一个占用 500gb 的数据库,我注意到即使我有 100gb 的 RAM,我的 ple 也很低。我在谷歌中搜索过原因,我发现了一些有趣的查询。我有一个在非常大的表上运行的查询,即使它使用聚集索引,它也会导致 ple 删除。我在查询前后以及查询完成后检查了缓冲池中的内容,看起来 DB 必须为我的查询中使用的索引释放一些空间,并且在查询旧索引加载到缓冲池之后。我的问题是 DB 应该有多少 RAM 内存,我如何计算它,它是否应该是让我一次将所有使用的索引保存在内存中的数量?或者我应该减少保存在表中的数据,以便索引会更小?

performance sql-server memory page-life-expectancy

5
推荐指数
1
解决办法
2万
查看次数