Basically, a chain is only as strong as its weakest link.

When private virtual servers are setup (using VMWare to setup ESX Clusters) all bare-metal servers in the Cluster are supposed to have the same amount of RAM.

MySQL Cluster should be treated with the same kind of kid gloves. If any servers (even just 1) have less memory that others in a Cluster, that would be like a limiting factor. It would not surprise me if a server with 2GB RAM causes other servers in the MySQL Cluster (even if those other servers each have 8GB RAM) to behave as if they had 2GB at most.

At the very least, you should

- upgrade your RAM on data nodes to match the SQL nodes
- Use as many disk-based tables as possible
- Remove all superfluous indexes (indexes not being used)
- For more information
 - https://dba.stackexchange.com/questions/8889/mysql-sharding-vs-mysql-cluster/8950#8950
 - http://messagepassing.blogspot.com/2011/03/data-distribution-in-mysql-cluster.html

As a side note, please keep in mind that MySQL Cluster also has the capability of storing data on disk for each server running as a storage node