我有一个内存为 2Gb 的 MySql 服务器。什么是最好的配置,然后使用最好的结果?如何将此内存“分配”到 MySql 服务器?
我正在探索 MySQL 5.5.18 版中不同数据库引擎的效率,以查看哪个最适合与 500 万行数据集的范围查询一起使用:
SELECT P.col1, P.col2, P.col3, P.col4, P.col5, P.col6, P.col7, P.col8, P.col9
, P.col10, P.col10 * R.col3 as 'combi'
FROM PRODUCT P INNER JOIN RATE R ON R.col2 = P.col2
WHERE P.col3 = 'y'
AND P.col4 >= 1000
AND P.col5 >= 5
AND P.col6 BETWEEN 10 AND 100
AND P.col7 >= 0
AND P.col8 >= 7
AND P.col9 >= NOW()
AND P.col10 * R.col3 BETWEEN 50 AND 80
ORDER BY P.col8 DESC LIMIT 100;
Run Code Online (Sandbox Code Playgroud)
基于对Stackoverflow 的 …
我在生产中的两个 SQL Server 2005 实例上设置了警报。只要Free Pages性能计数器低于 5000 页标记,就会发送这些警报之一。
两台服务器通常都有超过 300000 个空闲页面,但有时其中一台服务器会暂时远远低于 2000 甚至 1000 个空闲页面,然后再次上升。同样,这只发生在其中一台服务器上。
据我所知,这种行为不会降低该服务器的性能,因为在我看来,每当服务器在空闲页面上耗尽时,它都会从缓冲区中释放旧数据页面并填充空闲缓冲区列表. 至少从理论上讲。
我不明白的是,为什么惰性写入器没有维护更大的空闲缓冲区列表,而是“等待”SQL Server 在释放更多缓冲区之前在空闲页面上变得如此短缺。
所以我的问题实际上是双重的:
1. 我如何确定是什么/谁导致 SQL Server 空闲页面不足?
2.如何检查什么是真正回事?
我有一台带有多个 CPU 和 16GB RAM 的专用生产服务器。
如何配置它以利用服务器资源以获得更好的性能?网站流量不断增加,MySQL 开始使用大量 CPU。
这是我当前的MySQL 服务器配置。
我还计划优化数据库,并检查查询以改善缓慢的查询。
一位数据库开发人员认为我们遇到了内存问题。他发现一些标准查询的运行时间有所增加——从不到 10 秒增加到大约两分半钟。他查看了服务器上的任务管理器,发现内存使用率很高,现在想要获取一些当前分配给操作系统的内存并将其释放给 SQL Server。
我们使用的是 SQL Server 2008,64 位机器,未启用 AWE,最小 4096 MB,最大 10240 MB。
我发现 Brent Ozar 的A Sysadmin's Guide to Microsoft SQL Server Memory表明任务管理器不可靠。我还发现我们的页面预期寿命并不表示内存压力。(通过Pinal Dave 的查询检查。)
我还应该看哪里?我还应该检查什么?我想向数据库开发人员报告以确认他的怀疑或证明他们不正确。
编辑:修改了我的实际问题。我欣赏并同意,由于内存问题以外的原因,这些查询很可能会变慢。然而,我处于一种情况,我需要证明内存不是全面的罪魁祸首。也就是说,证明少数查询由于其他原因而变慢并不能完成我的任务。我想了解我可以从哪里获得此类信息以及我应该检查哪些指标。
我运行一个大型论坛,该论坛维护用于后端数据存储的 MySQL 数据库。“会话”表跟踪登录的用户和来宾。目前大约有 10 万条记录,所以不是那么大。但是,当我们修剪旧记录时,这个会话表会出现在慢查询日志中:
# Time: 120719 10:05:11
# User@Host: xxx[xxx] @ [10.x.x.x]
# Thread_id: 369051896 Schema: forumdb Last_errno: 0 Killed: 0
# Query_time: 8.352811 Lock_time: 0.000028 Rows_sent: 0 Rows_examined: 19635 Rows_affected: 19635 Rows_read: 0
# Bytes_sent: 13 Tmp_tables: 0 Tmp_disk_tables: 0 Tmp_table_sizes: 0
SET timestamp=1342710311;
DELETE FROM session
WHERE lastactivity < 1342709401;
Run Code Online (Sandbox Code Playgroud)
我已经确认 lastactivity 表上有一个 BTREE 索引:
mysql> SHOW INDEX FROM session FROM forumdb;
+---------+------------+--------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | …Run Code Online (Sandbox Code Playgroud) 我正在 MongoDB 中为大型集合(~300GB)构建索引,db 终端窗口继续打印:
[DataFileSync] flushing mmaps took 10920ms for 151 files
Run Code Online (Sandbox Code Playgroud)
刷新 mmap 所需的时间通常约为 10 秒,有时甚至更长。我在高性能机器上运行 MongoDB,所以 RAM 可用性不是问题。
数据文件同步消息是什么意思?
有问题吗??
编辑:
刷新例程的真正问题是 MongoDB 在执行此操作时似乎冻结了。
即使是来自同一主机上的终端窗口的简单查询也必须等待刷新完成才能完成,而大约 10 秒(最多 150 秒)太长了。即使服务器上没有运行任何操作并且活动连接为零,例程也会发生(以 1、2 或 3 分钟的不规则间隔)。
我在 Windows Server 2008 R2 上运行 MongoDB 2.2.1 2008R2+。
我最近将一个物理 SQL Server 机器 (2012) 迁移到 ESX (5.1),只是为了便于管理。它是并且将是服务器上唯一的来宾。正如预期的那样,在大多数情况下只有在启动时才会出现边际性能下降。这就是我的问题。
我注意到,在虚拟化下,缓冲池占用的内存比其物理对应物慢得多。
在 2 天内运行 SQL 服务器的物理安装已分配所有 120GB 的内存分配(最大服务器内存)。但是,在虚拟机管理程序中运行几乎完全相同的设置(我还为来宾提供了完全保留的内存),它花了 7 周的时间才达到 50GB。这也是令人痛苦的缓慢,例如每天 Gb 上升,这转化为几天的缓慢查询。
因此,虽然我在多客人盒子上看到过这种情况并将其归因于内存压力,但我对为什么在单个客人盒子上发生这种情况感到困惑。我知道 vmware 会压缩和重复数据删除内存,但是其中大部分是唯一数据。
所以我的问题是:
1) 为什么会发生这种情况?我对导致这种情况的确切机制感兴趣。
2) 有没有一种方法可以在完全内存分配的情况下启动 SQL 服务器?我记得类似跟踪标志的东西,但还没有找到 64 位的任何东西。这是必要的吗?
提前致谢。
我在重新启动后的前几天注意到的另一件事是 PLE 在 500 - 900 范围内保持非常低,这会随着缓冲池的增长而增加。
使用 PostgreSQL,我们有数百个并发进程进行常规数据库访问。我们的数据分布在多个数据库服务器上,每个服务器都有一个与 PgBouncer 的连接池。问题在于所有服务器上的 RAM 使用率(通过top- 不确定这是否是确定这一点的最佳方法)往往会攀升至接近或 100%。我很确定这很糟糕。
我已经尝试了 pgbouncer / postgres 的几种配置,最终(在我的系统运行几分钟后)RAM 使用量上升到这一点。
我的问题是:
非常感谢!如果需要更多信息,请告诉我,我会尽快发布。
编辑: 运行 vmstat 1 一段时间后,我得到以下信息:
procs -----------内存----------- ---swap--- -----io---- --system--- -----cpu ----- rb swpd 免费 buff 缓存 si so bi bo in cs us sy id wa st 0 34 241048 20124 10208 2636248 340 80 1820 2968 3846 2864 12 14 0 73 1 0 56 240980 19256 10224 2636860 360 140 2568 6100 5773 4874 …
如果我反复注意到 SQL Server 报告了大量可用内存,我是否可以在不影响性能的情况下从服务器中删除大约该数量的内存?或者,它可以/应该更多地用于缓存吗?
对于此特定示例,服务器在 Windows Server 2012 上运行 SQL Server 2012 标准版。它具有 20 GB 的物理内存并承载超过 100 GB 的数据。SQL Server 是服务器上运行的唯一应用程序。
SQLServer;缓冲区管理器
缓冲区缓存命中率 99.737 %
页寿命 874 秒
SQLServer:内存管理器
数据库缓存内存 6,744 MB
可用内存 5,937 MB
优化器内存 5 MB
SQL 缓存内存 29 MB
目标服务器内存 19,015 MB
总服务器内存 18,407 MB
memory ×10
mysql ×4
sql-server ×4
performance ×2
btree ×1
delete ×1
innodb ×1
mongodb ×1
postgresql ×1
vmware ×1