AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 9357
Accepted
gsb
gsb
Asked: 2011-12-20 02:38:58 +0800 CST2011-12-20 02:38:58 +0800 CST 2011-12-20 02:38:58 +0800 CST

MySQL 集群 RAM 要求

  • 772

从 MySQL 5.1 开始,数据不再需要完全在内存中。

我读过索引列(我认为整个索引结构)必须仍然在内存中(MySQL High Availability,2010,第 533 页,“MySQL Cluster 将所有索引列保留在主内存中”)。

有鉴于此,如果没有足够的内存(例如,一个巨大的数据库(> 100GB 或 1TB),运行在具有低内存配置的服务器上(例如,2 个数据节点,每个具有 1GB 的 RAM))会发生什么?

mysql memory
  • 4 4 个回答
  • 7381 Views

4 个回答

  • Voted
  1. Morgan Tocker
    2012-01-11T08:26:04+08:002012-01-11T08:26:04+08:00

    MySQL 集群是围绕一个为内存匹配而优化的索引结构构建的;一个 T 树。这与 MySQL 中使用B-tree或B+tree结构的常规存储引擎不同,假设您有一些热点/非统一访问(这通常是一个安全的假设) )。

    如果您想构建某种概念验证,没有什么可以阻止您使用大量交换来弥补您的内存不足。请注意,这不会很好地执行,并且您正在将产品用于它不适合的用例。

    • 4
  2. Best Answer
    Frazer Clement
    2012-01-11T09:53:32+08:002012-01-11T09:53:32+08:00

    MySQL Cluster 支持将非索引列存储在仅磁盘上,并使用 LRU 缓存最近访问的数据。但是,索引列始终保存在内存中。

    MySQL Cluster 根据 DataMemory 和 IndexMemory 参数预先分配所有内存。它不会动态地向底层操作系统请求更多内存。

    这意味着您需要在集群中配置足够的内存以将所有索引列保存在内存中。如果您的数据集足够大以至于索引列大于可用的集群内存,那么您无法将该数据集加载到集群中。在某些时候,您将用完空间,并且您的插入事务将被中止。

    在配置 DataMemory 和 IndexMemory 时,最好将自己限制在略小于每个系统中的物理内存的范围内。应该为操作系统和其他进程保留一些物理内存。

    从理论上讲,MySQL Cluster 可以配置为通过交换设备使用虚拟内存(例如,多于物理内存),但正如其他答案所述,这不是专为用例而设计的。将内存中的结构交换到磁盘通常不是最佳选择,因为内存中的随机访问模式会导致对磁盘的随机访问,从而导致整个系统的交换抖动和减速。使用 MySQL Cluster,最可能的结果是由于交换数据节点对信号的响应速度不够快而导致的心跳故障和集群故障。

    为了有效地支持大于聚合内存的索引,MySQL Cluster 需要支持磁盘索引格式(可能是 B 树等),其缓存和访问模式与磁盘访问属性一致。

    • 4
  3. Derek Downey
    2011-12-20T10:02:05+08:002011-12-20T10:02:05+08:00

    鉴于此,如果没有足够的内存会发生什么

    如果没有足够的内存,这可能是您所期望的。文件将在您的驱动器上制作,您将在驱动器允许的范围内以最快的速度运行。

    请务必正确限制 MySQL,使其不会消耗其他系统进程所需的所有内存。

    • 2
  4. RolandoMySQLDBA
    2011-12-20T09:53:22+08:002011-12-20T09:53:22+08:00

    基本上,一条链条的强度取决于其最薄弱的环节。

    当设置私有虚拟服务器(使用 VMWare 设置 ESX 集群)时,集群中的所有裸机服务器都应该具有相同数量的 RAM。

    MySQL 集群应该以同样的方式对待。如果任何服务器(即使只有 1 个)的内存比集群中的其他服务器少,那将是一个限制因素。如果具有 2GB RAM 的服务器导致 MySQL 集群中的其他服务器(即使这些其他服务器每个都有 8GB RAM)表现得就像它们最多只有 2GB 一样,我也不会感到惊讶。

    至少,你应该

    • 升级数据节点上的 RAM 以匹配 SQL 节点
    • 尽可能多地使用基于磁盘的表
    • 删除所有多余的索引(未使用的索引)
    • 了解更多信息
      • MySQL 分片与 MySQL 集群
      • http://messagepassing.blogspot.com/2011/03/data-distribution-in-mysql-cluster.html

    作为旁注,请记住 MySQL Cluster 还具有将数据存储在磁盘上的能力,每个服务器作为存储节点运行

    • 1

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve