标签: memory

Mysql:中止连接.../...(读取通信数据包时出错)

该错误信息已在本论坛多次提交。

我已尝试以下操作但没有成功。

语境

这是一个 Symfony1/Doctrine1 Web 应用程序。该错误出现在我的计算机和服务器上(均在 Ubuntu 上)。在浏览器级别(Chrome)我遇到错误:

POST http://*****/administration_dev.php/utilisateur net::ERR_EMPTY_RESPONSE
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是我的计算机详细信息:

$ uname -a
Linux Bureau 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
$ dpkg -l |grep php
ii  libapache2-mod-php                          1:7.0+35ubuntu6                                             all          server-side, HTML-embedded scripting language (Apache 2 module) (default)
ii  libapache2-mod-php7.0                       7.0.4-7ubuntu2.1                                            amd64        server-side, HTML-embedded scripting language (Apache 2 module)
ii  php                                         1:7.0+35ubuntu6                                             all          server-side, HTML-embedded scripting language (default)
.../...
$ dpkg …
Run Code Online (Sandbox Code Playgroud)

mysql innodb memory mysql-5.7

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

如何限制 PostgreSQL 上的 work_mem

作为一名分析师,我喜欢有能力work_mem在大型排序或索引构建即将到来时出现。

作为 DBA,随机用户能够在运行时请求任意数量的系统资源的想法有点吓人。我确认一个基本上不需要许可的新创建用户可以请求尽可能多的请求work_mem。估计一次只需要几个贪婪的用户就可以让其他用户挨饿,这很可怕。

有没有办法限制work_mem用户可以请求?

postgresql memory configuration

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

给“超级”用户更多的 work_mem

多年来我注意到的一种常见模式是,人们倾向于随着数据大小的增加而不断增加工作内存,因此更复杂的查询仍然可以充分利用内存速度,但对于某些极端任务(例如,报告)。

仅对一些很少运行的异常查询大幅增加该数字可能是有利的。例如,我可能想保持work_mem在例如。8 MB 用于正常操作,然后使用具有 250 MB 工作内存之类的特定客户端/用户运行特定查询,以便我可以在单个会话期间完全在内存中快速执行重大操作。

这可能吗?我是否完全不考虑将其视为解决方案?

postgresql memory configuration

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

AWS Aurora 可用内存不足并崩溃

我们的 AWS Aurora MySQL 实例出现可用内存不足并因此崩溃的问题。AWS的回应是升级到更大的实例,但我认为这不一定能解决问题。

我们使用的是 db.r5.large 实例,内存为 15GB。

重新启动后,RAM 会下降到 5GB,这几乎是预料之中的,但随后在一周内逐渐下降到 0GB RAM,然后重新启动 - 有时会失败,需要手动重新启动实例。

可用内存下降至 0 的图表

CPU 使用率通常徘徊在 15% 左右,当我们进行深夜处理时,该值会达到峰值。

来自mysql innodb_buffer_pool_size 应该有多大?

SELECT CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS FROM
(SELECT SUM(data_length+index_length) Total_InnoDB_Bytes
FROM information_schema.tables WHERE engine='InnoDB') A;
Run Code Online (Sandbox Code Playgroud)

根据需要提供 10GB 来保存内存中的所有数据和索引。

SELECT (PagesData*PageSize)/POWER(1024,3) DataGB FROM
(SELECT variable_value PagesData
FROM information_schema.global_status
WHERE variable_name='Innodb_buffer_pool_pages_data') A,
(SELECT variable_value PageSize
FROM information_schema.global_status
WHERE variable_name='Innodb_page_size') B;
Run Code Online (Sandbox Code Playgroud)

InnoDB 缓冲池中提供 4.6GB

SHOW FULL PROCESSLIST
Run Code Online (Sandbox Code Playgroud)

仅显示几个进程,没有挂起的线程。

我的问题是,有没有一种方法可以确保可释放内存永远不会超过某个点并被释放回来以供使用,例如它永远不会低于 2GB,因此如果内存占用很大,它不会耗尽内存。

我知道这可能会影响性能,但在我扩展到更大的实例(成本加倍)并经历同样​​缓慢下降到 0 之前,我想看看它的性能如何,因为它比生产更好机器随机崩溃。


附加信息:

我已将各种 MySQL 输出添加到https://pastebin.com/CkRxqL04

不太确定如何在 RDS 实例上运行 Unix …

mysql memory crash aws-aurora

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

每小时运行一次 DBCC FREESYSTEMCACHE ('TokenAndPermUserStore') 有什么缺点?

我在我们的一台生产服务器上的 SQL Server 内存缓存中看到了一些令人担忧的行为。我们使用的是 SQL Server 2014 SP2 企业版,16 核,400GB RAM(300GB 专用于 SQL Server)。

使用此查询(归功于Glenn Berry):

SELECT TOP(10) mc.[type] AS [Memory Clerk Type], 
       CAST((SUM(mc.pages_kb)/1024.0) AS DECIMAL (15,2)) AS [Memory Usage (MB)] 
FROM sys.dm_os_memory_clerks AS mc WITH (NOLOCK)
GROUP BY mc.[type]  
ORDER BY SUM(mc.pages_kb) DESC OPTION (RECOMPILE);
Run Code Online (Sandbox Code Playgroud)

我发现了一个问题。这些USERSTORE_TOKENPERM值增长到似乎超过缓存的程度,因此,几乎所有计划都被编译并且没有被缓存。也就是说CACHESTORE_SQLCPCACHESTORE_OBJCP每个大约 200 MB,而USERSTORE_TOKENPERM缓存高达 11 GB。存储了超过 168,000 个令牌,大约有 100 个并发/600 个用户,连接数为 3000-5000。这些数字似乎相差甚远。

不幸的是,提供此应用程序的供应商没有“系统要求”文档之类的疯狂内容,并且他们不会承诺在未经测试的 Service Pack/CU 上支持该应用程序。所以我的手被束缚在 SQL Server 2014 SP2 上,因为我读过的其他线程建议升级到 SQL Server …

performance sql-server memory dbcc

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

SQLServer 2016 不断增加被盗内存

在几天的时间里,我们的数据库服务器上的被盗内存增长缓慢。它似乎稳定在 130-140GB 左右,此时我们开始遇到更大的问题,例如内存不足错误、多秒冻结和 AG 故障转移。问题在重新启动后大约一周开始出现。我已经开始记录被盗内存的历史,如下图:

随着时间的推移被窃取的记忆

查看sys.dm_os_memory_clerks,似乎其中大部分来自针对 NUMA 节点 0 上的缓冲池记录的非页面内存:

缓冲池内存管理员

pages_kb随着时间的推移跟踪缓冲池的总数显示页面数量随着virtual_memory_committed_kb增长而下降。(4 月 13 日,服务器重新启动以进行 Windows 更新。缓冲池在大约一个小时内填充到 400GB)

缓冲池页面

有没有人见过这种行为?

我们运行的是 SQLServer 2016 CU12 13.0.5698.0 服务器是一个 64 核的 AWS EC2 i3.16xlarge 实例。我们有许多相同大小的其他集群都显示了这个问题。我们在 32 核 i3.8xlarge 实例上也有一些集群,它们也显示了被盗内存的增长,但它们最终不会停止/抛出内存不足错误。唯一的区别(规模除外)是 64 核服务器有 2 个 NUMA 节点。

服务器配置

更新: MS 表示 KB4536005 中的错误修复没有被反向移植到 SQL2016。

sql-server memory sql-server-2016 numa

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

交换使用量但可用内存很高

我们有一个带有 MySQL 数据库的 AWS RDS。缓冲池大小仅为 244GB 可用 RAM 总量中的 144GB。然而,即使在如此低的 RAM 配置下,我们也会看到交换使用情况发生。有谁知道我如何找出导致交换使用的原因?

我们启用了 Performance Insights,也启用了增强监控。交换承诺值确实回落了,但我们实际上浪费了大约 100GB 的 RAM,因为进一步增加缓冲池大小会大幅增加交换使用量。

mysql memory aws amazon-rds

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

是否有可能有一个临时的、动态的、只存在于 RAM 中的 PostgreSQL 表?

我知道 PostgreSQL 仅自动为足够小的表使用 RAM。但我不仅仅谈论表内的数据,而是谈论整个表本身。

基本上,我(很差地)在 PHP 数组中重新实现了各种数据库功能,例如,当我从 API 获取数据并希望在将其显示在控制面板中之前对其进行排序或“按摩”时。在这种情况下,拥有一个仅用于此目的且带有临时数据的实际数据库表是没有意义的(至少对我来说)。如果我可以即时创建一个表,将其填充到 RAM 中,进行排序,然后使用普通的 PG SQL 查询从中获取记录,那就更好了。

这是一件事吗?我有数组结构和各种试图模仿 SQL 的“SORT BY”的函数,这感觉很愚蠢。

当然,我不是在谈论执行CREATE TABLE,向其中添加数据,然后再次返回给 PHP,然后DROP TABLE. 这对于性能来说是非常糟糕的。

如果没有办法做到这一点,我就会接受它,但我常常认为这是非常有意义的。

postgresql memory in-memory-database

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

SQL Server 日志中没有“将锁定的页面用于缓冲池”

作为客户端的试运行,我试图在我的开发服务器上启用“锁定内存中的页面”设置,但无论我如何更改,我都无法在 SQL 中显示“使用锁定的页面作为缓冲池”服务器日志。在为客户做这件事之前,我想确保我能正确地做到这一点。

我们的开发服务器是带有 4 GB RAM 的 Windows 2003,SQL Server 2008 R2 标准版 32 位。

以下是我尝试过的:

  • 选中“使用 AWE 分配内存”。

  • 设置“最大服务器内存”设置。

  • 在 SQL Server 服务配置中添加启动参数 -T845。

  • SQL Server 服务在 LocalSystem 帐户上运行,因此根据我所阅读的内容,我不需要在“内存中的锁定页面”特权中输入帐户。但是,我确实尝试将服务更改为在“管理员”登录名下运行,并将该登录名添加到“锁定内存中的页面”特权中。

  • 重新启动 SQL Server 服务。

我所做的一切都不会放

使用锁定页面作为缓冲池

进入我的 SQL Server 日志,但当我运行 DBCC TRACESTATUS 时,845 跟踪似乎已打开。

任何人都知道为什么我所做的一切似乎都没有打开它?

sql-server memory locking

4
推荐指数
1
解决办法
1505
查看次数

Microsoft SQL Server 2008 内存

我正在运行 MSSQL 2008 Enterprise,在服务器配置中,最大内存量设置为 2147483647 MB​​。

我的问题是,服务器有 192 GB 的内存,配置中的数字不能增加,如果配置设置为那个,这是否意味着服务器可以使用它需要的任何东西?或者我如何启用服务器使用所有可用的内存。

如果我打开任务管理器,内存使用量永远不会超过 19 GB。

感谢您的帮助

memory sql-server-2008-r2 configuration

4
推荐指数
1
解决办法
3811
查看次数