gsb*_*gsb 8 mysql memory ndbcluster
从 MySQL 5.1 开始,数据不再需要完全在内存中。
我读过索引列(我认为整个索引结构)必须仍在内存中(MySQL High Availability,2010,第 533 页,“MySQL Cluster 将所有索引列保留在主内存中”)。
鉴于此,如果没有足够的内存(即,一个巨大的数据库(> 100GB 或 1TB),在具有低内存配置的服务器上运行(例如,2 个数据节点,每个节点具有 1GB 的 RAM))会发生什么情况?
小智 5
MySQL Cluster 支持仅在磁盘上存储非索引列,并使用最近访问的数据的 LRU 缓存。但是,索引列始终保存在内存中。
MySQL Cluster 根据 DataMemory 和 IndexMemory 参数预分配所有内存。它不会动态地向底层操作系统请求更多内存。
这意味着您需要在集群中配置足够的内存来保存内存中的所有索引列。如果您的数据集足够大,以至于索引列大于可用集群内存,则您无法将该数据集加载到集群中。在某些时候,您将耗尽空间,并且您的插入事务将被中止。
配置 DataMemory 和 IndexMemory 时,最好将自己限制为略小于每个系统中的物理内存。应为操作系统和其他进程保留一些物理内存。
理论上,MySQL Cluster 可以配置为通过交换设备使用虚拟内存(例如多于物理内存),但正如其他答案所述,这不是专门设计的用例。将内存中的结构交换到磁盘通常不是最优的,因为内存中的随机访问模式会导致对磁盘的随机访问,从而导致整个系统的交换抖动和速度减慢。对于 MySQL Cluster,最可能的结果是由于交换数据节点无法足够快地响应信号而导致心跳故障和集群故障。
为了有效地支持大于聚合内存的索引,MySQL Cluster 需要支持磁盘索引格式(可能是 B 树等),并具有与磁盘访问属性一致的缓存和访问模式。
| 归档时间: |
|
| 查看次数: |
7271 次 |
| 最近记录: |