标签: memory

如何使用当前服务器资源提高 MySQL 性能?

我有一个 MySQL 数据库,我的一些查询变得很慢。查询时间不稳定。大多数查询都很快,但其中一些(可能是读取和返回的数据较少)需要很长时间。

我知道最佳实践是添加索引或重构代码,但我已经添加了索引并且我不想重构代码(至少当我有其他变体时)。

我有 8 Gb 空闲内存,CPU 在峰值时仅加载到 25%。所以我想使用我所有的资源。

我尝试调整 MySQL 配置,但我没有这种调整的经验,所以我提高了生产力并没有我想要的那么多。下面是一个例子:

# Query_time: 3.019647  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 504
SET timestamp=1313380874;
SELECT COUNT(inboxentities.id) FROM inboxentities  WHERE (active=true)AND(deleted=false)AND((to_ = '44219ca4-a657-4909-b30d-a7ba0ed8e4b0'))AND(notification=true);
Run Code Online (Sandbox Code Playgroud)

PSinboxentities有 500.000 条记录。我有 index1 (idx_to) :to_和 index2 (idx_complex): deleted, notification, active,to_

这是解释选择的结果:

+----+-------------+---------------+------+------------------------------------------------+--------+---------+-------+------+-------------+
| id | select_type | table         | type | possible_keys                                  | key    | key_len | ref   | rows | Extra       |
+----+-------------+---------------+------+------------------------------------------------+--------+---------+-------+------+-------------+
|  1 | SIMPLE      | …
Run Code Online (Sandbox Code Playgroud)

mysql performance memory database-tuning

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

MEMORY 表会占用多少内存?

假设我有一个 MyISAM 表,数据长度为 4.8GB,索引长度为 6.2GB。因此,总数据大小为 11 个演出。这需要多少内存,我是否将其转换为MEMORY表格?11 演出,或更多?

mysql myisam memory

7
推荐指数
1
解决办法
7914
查看次数

我应该如何为 20 GB 的 RAM 调整 Postgresql?

我很幸运能够使用运行 64 位 Ubuntu 的 20GB Linode 实例。我想尝试为此服务优化 PostGres,但我不知道我应该优先更改什么。

我有几个大约 20,000 行的数据集,正在执行的计算是内存密集型查询(空间分析),每次请求后都会写入少量行。用户总数非常少(10 - 50)。

我已经阅读了 Postgresql 站点上的这篇文章,但我对它的工作原理知之甚少,不知道我应该优先考虑什么。我还查看了有关在此处更改地理类型工作的建议。

例如,我尝试将 更改shared_buffers200MB(远小于 20GB 的 75%)。这导致了以下错误消息:

  • 重启 PostgreSQL 9.1 数据库服务器
    • PostgreSQL 服务器启动失败。请检查日志输出:2013-03-10 12:21:58 EDT FATAL:无法创建共享内存段:无效参数 2013-03-10 12:21:58 EDT 详细信息:失败的系统调用是 shmget(key=5432001 , 大小 = 47742976, 03600)。2013-03-10 12:21:58 EDT 提示:此错误通常意味着 PostgreSQL 对共享内存段的请求超出了内核的 SHMMAX 参数。您可以减小请求大小或使用更大的 SHMMAX 重新配置内核。要减少请求大小(当前为 47742976 字节),请减少 PostgreSQL 的共享内存使用量,可能是通过减少 shared_buffers 或 max_connections。如果请求大小已经很小,它可能小于内核的 SHMMIN 参数,在这种情况下,需要提高请求大小或重新配置 SHMMIN。PostgreSQL 文档包含有关共享内存配置的更多信息。

我将其恢复为原始值并尝试更改:

work_mem = 50MB
maintenance_work_mem = 256MB 
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道我应该尝试改变哪些值,或者我应该如何优先考虑哪些值是试验和测试的关键。我应该具体做什么来优化这个数据库?

postgresql performance memory

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

SQL Server 不返还内存 - 保持最大服务器内存设置

我是唯一一个在这台服务器上工作的人,当我看到 SQL 正在使用服务器的所有可用内存时,我遵循了有关优化 SQL 内存使用的文档。

我所做的步骤之一是将最大内存大小固定为 20 Gb(用于测试目的的服务器,具有 32 Gb 内存)。

调整后,昨天,SQL Server 只使用了 3-4 Gb,但今天,它再次达到了我分配的最大内存使用量。

为什么 SQL Server 保留所有 20 Gb?如果已经使用了最大内存大小,当用户开始使用服务器时会发生什么?

sql-server-2008 sql-server memory

7
推荐指数
1
解决办法
2065
查看次数

SSAS - 什么是内存设置的好起点?

我收到了以下有关 SSAS 内存设置的警报:

警报:
SSAS 2014:无效的 TotalMemoryLimit 配置来源:
MSSQLSERVER 路径:SASBI01
警报时间:9/15/2015 5:38:50 PM

告警描述:
为SSAS实例配置的TotalMemoryLimit(307.1728515625 GB)超过了操作系统必要功能所需的配置阈值,可能导致系统不稳定或故障。

服务器上的总内存: 0 GB 总内存
使用量:0 GB 非 SSAS
进程
使用的内存:-3.89069747924805 GB SSAS 使用的
内存:3.89069747924805 GB SSAS内存限制下限:249.57795715332 GB (0%)
S3725 GB1 上限上限(0%)

SSAS 中这些内存设置的一个好的起点是什么?请看下图。

该服务器仅运行 SSAS。

sql-server ssas memory configuration sql-server-2014

7
推荐指数
1
解决办法
3838
查看次数

分配页失败:FAIL_PAGE_ALLOCATION 1

我们使用的是 Windows 2012 R2 上的 SQL Server 2012 SP3 Enterprise Edition。

我在 sql 日志中看到了这些错误:

分配页失败:FAIL_PAGE_ALLOCATION 1

2016-06-14 04:28:27.44 spid175 错误:701,严重性:17,状态:123。

2016-06-14 04:28:27.44 spid175 资源池“默认”中的系统内存不足,无法运行此查询。

2016-06-14 04:28:27.44 服务器错误:17300,严重性:16,状态:1。(参数:)。错误以简洁模式打印,因为格式化过程中出现错误。跟踪、ETW、通知等被跳过。

2016-06-14 04:28:27.44 服务器错误:17300,严重性:16,状态:1。(参数:)。错误以简洁模式打印,因为格式化过程中出现错误。跟踪、ETW、通知等被跳过。

2016-06-14 04:28:27.44 spid131 错误:701,严重性:17,状态:123。

据我所知,它似乎在某个时候耗尽了内存。
有没有办法找出导致它内存不足的原因?
MEMORYCLERK_SQLQERESERVATIONS是相当高的,没有人知道那是什么呢?

MEMORYCLERK_SQLQERESERVATIONS (node 0)           KB
---------------------------------------- ----------
VM Reserved                                       0
VM Committed                                      0
Locked Pages Allocated                            0
SM Reserved                                       0
SM Committed                                      0
Pages Allocated                            22599824
Run Code Online (Sandbox Code Playgroud)

编辑:我们在服务器上有 32 个内存,28 个分配给 SQL Server。最大内存设置为 28gb,最小服务器内存为 8gb。

这是 ErrorLog 输出的链接: ErrorLog

这是 sys.dm_os_process_memory 输出的链接: 查询输出 …

sql-server memory sql-server-2012

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

SQL、SQLCLR 对象和有效内存利用率

我们最近将我们的 ERP 系统从 IBM Universe 转换为 SQL Server。应用程序性能通常是可以接受的,但偶尔会降级到可怕的程度。

我们在具有 32 Gb RAM 的 VMWare 上的 Win Server 2012 和 SQL Server 2012 上运行数据库。SQL 最大内存设置为 27Gb。db 服务器仅托管此数据库,不执行任何其他功能。总数据库大小约为 110Gb。该应用程序有它自己的专用服务器。

供应商广泛使用 CLR 来移植代码(超过 36,000 个标量函数)。我了解单个 CLR 在应用程序 OLTP 上下文中运行正常,但由于逐行而不是基于设置的操作而尝试执行批量作业时,不能很好地扩展。很好……很酷……继续前进。

我运行了Brent Ozar 的脚本,该脚本高可用内存确定为需要查看的内容,以及每个查询的大量执行计划。供应商建议向服务器添加更多 RAM,但这让我很恼火,因为应用程序似乎没有使用现在的内存。

我感兴趣的是 SQL 的整体性能和行为。我看到一系列症状表明某些事情不正确,但我无法确定。这就像服务器拒绝运行。它决心

粗略地说,在我看来,大约 10Gb 的内存被数据库用于缓存,大约 11GB 是免费的,大约 3.5Gb 用于计划缓存,其余的我无法解释。我对一些定义有点不确定,例如免费、保留、被盗等。它们是否重复计算?

活动监视器显示:

在此处输入图片说明

当我运行此查询时:

-- what's happening inside my buffer pool?
SELECT counter_name, instance_name, mb = cntr_value/1024.0
  FROM sys.dm_os_performance_counters 
  WHERE (counter_name = …
Run Code Online (Sandbox Code Playgroud)

performance sql-server memory sql-server-2012 sql-clr performance-tuning

7
推荐指数
1
解决办法
5782
查看次数

Improving RAM and CPU utilization by PostgreSQL 9.6

I've been running a function on the database that is going into each table, ALTER COLUMN on all columns of a certain data type, and CAST to remove trailing zeros. About 115 tables varying from a few thousand records to a few hundred thousand records. It has been running for almost 24 hours and my approximate calculation until time of completion is about 58 hours.

I have htop up and checking on it regularly.

I should mention this is a …

postgresql optimization memory centos cpu

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

增加 SQL Server 产品上的最大内存设置

我有一个带有 5 个实例的生产盒。

版本:SQL Server 2014 SP3 企业版。

我发现即使机器分配了大约 400GB 的内存,所有 5 个实例的组合MAX MEMORY设置也小于 200GB。

实例不会受到内存压力的影响,但是由于我们已经分配了该内存,所以不使用它是一种浪费。

我想将其增加到更高的值,为操作系统保留 10%(某些实例的分配将高于其他实例)。

不过,我以前从来没有对这个设置做过这么大的增加。

我知道这是一个不需要重启的动态设置,但是,我想知道以下几点:

  • 我应该分两个阶段增加(即增加一半,等待一周然后再次增加)?
  • 如果 SQL Server 突然有更多的内存可以使用,是否会突然中断(或导致性能下降)?

我们没有启用内存设置中的锁定页面,也没有启用跟踪标志 834

sql-server memory configuration sql-server-2014

7
推荐指数
1
解决办法
547
查看次数

同一个表中的多个 BIT 数据类型列

考虑来自 Microsoft SQL 文档页面的以下信息:

SQL Server 数据库引擎优化位列的存储。如果表中有 8 个或更少位列,则这些列存储为 1 个字节。如果有 9 到 16 位列,则这些列存储为 2 个字节,依此类推。

请参阅:https : //docs.microsoft.com/en-us/sql/t-sql/data-types/bit-transact-sql?view=sql-server-2017

所以,如果我创建一个这样的新表:

CREATE TABLE MyTable (
    Id int PRIMARY KEY,
    Value1 bit,
    Value2 bit,
    Value3 bit,
    Value4 bit,
    Value5 bit,
    Value6 bit,
    Value7 bit,
    Value8 bit)
Run Code Online (Sandbox Code Playgroud)

...然后一行中的所有位列(Value1、Value2、...Value8)应占用一个字节。或者?

当我们仔细观察时,一行的 Value1 字段内部可以包含值 0、1 或 NULL。这意味着该字段实际上是三态值或三元值。2 个这样的值可以表示 3*3=9 个值的字典。8 个这样的值是一个包含 6561 个值的字典。

如果我们考虑这样一行的内存占用,8 位应该占用一个字节。这意味着这一字节编码 6561 个值而不是 256 个值。这显然是错误的。

因此,要么 MS SQL 文档具有误导性,要么我们在这里谈论一些量子计算。当然是前者,但我真正想知道的是这个问题的答案:可空位(当然,SQL Server 位默认可以为空)是如何真正存储在 SQL Server 底层结构中的?

null sql-server memory

7
推荐指数
1
解决办法
556
查看次数