我正在使用 Amazon RDSdb.m1.medium实例。它至少有 40-50 个数据库和至少 10k 个表。过去一年它工作正常,但今天我正在改变一张表,它开始出现错误。我正在使用 InnoDB 格式。
当我创建表或更改表时,出现此错误:
#1041 - 内存不足;检查 mysqld 或其他进程是否使用了所有可用内存;如果没有,您可能必须使用 'ulimit' 来允许 mysqld 使用更多内存,或者您可以添加更多交换
我该如何解决?
我正在对我们的一个 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 的 …
我将数百万行插入 PostgreSQL 9.5 数据库并观察到内存使用量的持续增长。由于表不是那么大,并且执行的操作(插入触发 Pl/Python 函数)不应该那么昂贵,我想知道为什么会发生这种情况。
目前 PostgreSQL 使用了大约 50 GB 的总可用空间 60 GB。我想了解 PostgreSQL 如何使用这 50 GB,尤其是因为我担心该进程会耗尽内存。
[更新] 今晚 PostgreSQL 内存不足,被操作系统杀死。
$ pg_top
last pid: 13535; load avg: 1.26, 1.41, 1.42; up 2+02:57:11 19:29:26
3 processes: 1 running, 2 sleeping
CPU states: 12.4% user, 0.0% nice, 0.1% system, 87.4% idle, 0.0% iowait
Memory: 63G used, 319M free, 192M buffers, 28G cached
DB activity: 2 tps, 0 rollbs/s, 0 buffer r/s, 100 hit%, 42 row r/s, 0 row w/s
DB …Run Code Online (Sandbox Code Playgroud) 我们正在将现有数据库移动到新的 SQL Server 2019 实例。
如果我们将兼容级别更改为 150,则没有任何效果。任务管理器显示 sql server 服务正在消耗所有可用内存并且所有查询超时并显示错误
内部资源池中的系统内存不足,无法运行此查询
RAM 被完全消耗,直到无法运行查询(所有这些都以我提到的上一个错误结束)。我们尝试过 16、32 和 64GB 的 RAM。
任何人都可以提供有关如何调试的任何提示吗?
请注意,这不是查询问题……仅更改兼容级别就足以使 SQL 开始耗尽内存。
即使运行一个简单的标量函数(内部使用多个 Substring 和 cast 调用 - 没有表或视图选择)也足以使其消耗所有可用内存。
sql-server memory functions compatibility-level sql-server-2019
我正在使用 SQL Server 2012。我有一个最终会被调整的存储过程,但我有一个问题。我的服务器内存为 32 GB,在 SQL Server 中分配的最大内存为 20 GB。当我执行这个 SP 时,逻辑读取大约是 4000000,所以 8kb 的 4M 数据页时间,除以 1024,我将在内存中获得 30 GB 的数据。
我的问题是如果我只分配了 20 GB 的内存,SQL Server 如何在内存中保留 30 GB 的数据?可能我的问题看起来很傻,但需要你们的帮助。谢谢
我的服务器正在运行 SQL Server 2016。该环境的工作负载相当高,全天有大量写入事务和读取数据。我有一种预感,服务器没有配备足够的内存,我想深入了解是否是这样。确定服务器上的可用内存量是否以及产生了多少争用的最佳方法是什么?
我确实查看了 DMV sys.dm_os_wait_stats,当按 waiting_tasks_count desc 排序时,前两个等待类型是“MEMORY_ALLOCATION_EXT”和“RESERVED_MEMORY_ALLOCATION_EXT”,其数量级比任何其他等待类型任务计数都大。还有其他地方可以检查内存压力或争用吗?
编辑:此服务器上所有数据库的总大小为 3 TB,事务最多的主数据库为 2 TB,服务器上的 RAM 总量为 32 GB。
我有一个存储过程,它将三个大表连接在一起(每个大约有 2000 万条记录)并将记录加载到临时表中。然后将临时表中的数据合并到一个包含大约 6000 万条记录的现有表中。
服务器脱机并显示以下错误消息:
由于内存压力,AppDomain 2 (SSISDB.dbo.[runtime].1] 被标记为卸载。
使服务器重新联机后,我重新启动了 SQL 服务以清除可能一直存在的所有进程。再次开始工作,它毫无问题地完成了。
我正在运行具有 128GB RAM 的 SQL Server 2019。64 位虚拟服务器上的最大服务器内存为 117964MB。有人在任务管理器中告诉我内存使用率为 94%,这可能是问题所在。但是 SQL 不会占用所有可用内存并保留它吗?所以这似乎是按预期运行的。
sp_WhoIsActive揭示了一些状态为 'Suspended' 和 'Awaiting_Command' 的查询,但我认为这些没有太大影响。128GB 的内存似乎足够了,但我想这与它被要求做的工作有关。知道如何排除故障或防止再次发生吗?
服务器的数据驱动器约为1.6TB。连接中的两个较大的数据库是 10GB 的 1900 万行和 13GB 的 2000 万行。那些进入一个临时表,然后MERGE进入一个 26GB 的表,有 5300 万行。
请求的内存授予为 45GB,实际为 30GB。这份工作在正常工作时间之外运行,所以应该没有竞争查询,但我不能 100% 确认有人没有工作到很晚。
我确实注意到它也必须做 a CONVERT_IMPLICIT。这对所需的内存有重大影响吗?
查询计划链接:https : //www.brentozar.com/pastetheplan/?id=SyXaty7xK
我们正在运行本地 SQL Server 2017 来支持数据仓库数据库。数据库按计划通过 SSIS 加载,主要是通过使用临时表和 MERGE 函数。最近,我们开始看到错误“资源池‘内部’中没有足够的系统内存来运行此查询。”。在过去的几周里,这种现象变得越来越猖獗。
我们已经尝试过:
与错误发生时间相关的最新更改:
其他信息:
任何帮助,将不胜感激。在过去的几天里,我在互联网上进行了搜索,以寻求任何指导。到目前为止我所看到的只是:
合并语句:
DROP TABLE IF EXISTS #Changes;
DROP TABLE IF EXISTS #TransformedChanges;
CREATE TABLE #Changes
(
[Change Type] VARCHAR(100)
);
MERGE [dbo].[FactOrderLine] AS TARGET
USING ( SELECT
[FactOrderLine].[OrderLine_Key],
[FactOrderLine].[BookedDate_Date_Key],
[FactOrderLine].[BookedDate_Time_Key],
[FactOrderLine].[Account_Key],
[FactOrderLine].[CCN_Key],
[FactOrderLine].[BillTo_SalesOffice_Key],
[FactOrderLine].[BillTo_Territory_Key],
[FactOrderLine].[ShipTo_SalesOffice_Key], …Run Code Online (Sandbox Code Playgroud) 假设我将 SQL\xc2\xa0Server 内存限制为 100\xc2\xa0GB。
\n这是否仅将缓冲区限制为 100\xc2\xa0GB 还是也限制了查询内存授予?
\n目前,我遇到了 SaaS 应用程序的一些数据库性能问题。白天,RESOURCE_SEMAPHORE 等待统计数据会猛增 30 到 60 秒,持续 1 到 2 分钟。在此期间,我还从我们的服务器收到一封或多封严重性为 17 的警报邮件,其中包含警告“资源池‘内部’中没有足够的系统内存来运行此查询。”
我们已经解决了具有大量内存授予的效率最低的查询(1.5 到 2.5 GB 授予,但使用率仅为 5% 或更少)。为了精确定位这些查询,我们使用了 Brent Ozar 的 sp_BlitzCache。不幸的是,这些更改后仍然出现性能问题。
请注意,此时我们有一个代理作业每 5 分钟运行一次 DBCC FREEPROCCACHE。这样做会使问题更加分散。将此作业更改为每半小时运行一次似乎会使问题变得更糟。当然,运行此作业还有其他影响,例如更高的编译/秒和更高的 CPU 利用率,但目前这是一个“两全其美”的解决方案。
恐怕内存压力问题是由于服务器配置的 RAM 内存不足造成的?这个假设是正确的还是这些问题是由其他原因造成的?
服务器统计
memory ×10
sql-server ×7
performance ×2
amazon-rds ×1
functions ×1
mysql ×1
mysql-5.5 ×1
postgresql ×1
wait-types ×1
waits ×1