我有一个占用 500gb 的数据库,我注意到即使我有 100gb 的 RAM,我的 ple 也很低。我在谷歌中搜索过原因,我发现了一些有趣的查询。我有一个在非常大的表上运行的查询,即使它使用聚集索引,它也会导致 ple 删除。我在查询前后以及查询完成后检查了缓冲池中的内容,看起来 DB 必须为我的查询中使用的索引释放一些空间,并且在查询旧索引加载到缓冲池之后。我的问题是 DB 应该有多少 RAM 内存,我如何计算它,它是否应该是让我一次将所有使用的索引保存在内存中的数量?或者我应该减少保存在表中的数据,以便索引会更小?
在公司中,我们正在从事非常大的数据库项目。它使用 100GB 内存。有什么奇怪的,第一次运行查询 PLE 之前是 11k~,运行后下降到大约 70,无论如何,15 分钟后我再次检查 PLE 大约 1k~,当我再次运行查询时它下降到 60。为什么会发生?如果在运行查询之间的时间 PLE 增加是否意味着所有需要的数据都在缓存中?如果是这样,为什么在 15 分钟后运行相同的查询会导致 PLE 再次下降?
这是查询:
select
ResultType = case r.TypeID
when 'dlp' then 'DLP'
when 'bill' then 'BILL'
when 'evtlog' then 'EVTLOG'
end,
SerialNumber,
ESerialNumber,
ResultDateTime,
DateTimeStamp as SavedInSystem
from
Results r
where
TypeID in ('typeid1','typeid2')
and DateTimeStamp > '2016-05-19 23:00:00'
and SerialNumber in ('serialnumber')
Run Code Online (Sandbox Code Playgroud)
我有一个聚集索引的datetimestamp和非在群集typeid, datetimestamp并resultdatetime, resultid, typeid和其他几个... @Update
select
(physical_memory_in_use_kb/1024)Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024 )Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
from sys. …Run Code Online (Sandbox Code Playgroud)