实际上,一个NDB节点能存放的数据量是会受到DataMemory和IndexMemory两个参数设置的约束,两者任何一个达到限制数量后,都无法再增加能存储的数据量。如果继续存入数据系统会报错“table is full”。
FileSystemPath:指定redo日志,undo日志,数据文件以及meta数据等的存放位置,默认位置为DataDir的设置,并且在 ndbd初始化的时候,参数所设定的文件夹必须存在。在第一次启动的时候,ndbd进程会在所设定的文件夹下建立一个子文件夹叫ndb_id_fs,这里 的id为节点的ID值,如节点id为3则文件夹名称为ndb_3_fs。当然,这个参数也不一定非得设置在[NDBD DEFAULT]参数组里面让所有节点的设置都一样(不过建议这样设置),还可以设置在[NDBD]参数组下为每一个节点单独设置自己的 FileSystemPath值;
BackupDataDir:设置备份目录路径,默认为FileSystemPath/BACKUP。
接下来的几个参数也是非常重要的,主要都是与并行事务数和其他一些并行限制有关的参数设置。
MaxNoOfConcurrentTransactions:设置在一个节点上面的最大并行事务数目,默认为4096,一般情况下来说是足够了的。这个参数值所有节点必须设置一样,所以一般都是设置在[NDBD DEFAULT]参数组下面;
MaxNoOfConcurrentOperations:设置同时能够被更新(或者锁定)的记录数量。一般来说可以设置为在整个集群中相同时间内可能被 更新(或者锁定)的总记录数,除以NDB节点数,所得到的值。比如,在集群中有两个NDB节点,而希望能够处理同时更新(或锁定)100000条记录,那 么此参数应该被设置为:100000 / 4 = 25000。此外,这里的记录数量并不是指单纯的表里面的记录数,而是指事物里面的操作记录。当使用到唯一索引的时候,表的数据和索引两者都要算在里面, 也就是说,如果是通过一个唯一索引来作为过滤条件更新某一条记录,那么这里算是两条操作记录。而且即使是锁定也会产生操作记录,比如通过唯一索引来查找一 条记录,就会产生如下两条操作记录:通过读取唯一索引中的某个记录数据会产生锁定,产生一条操作记录,然后读取基表里面的数据,这里也会产生读锁,也会产 生一条操作记录。MaxNoOfConcurrentOperations参数的默认值为32768。当我们额度系统运行过程中,如果出现此参数不够的时 候,就会报出“Out of operation records in transaction coordinator”这样的错误信息;
MaxNoOfLocalOperations:此参数默认是MaxNoOfConcurrentOperations * 1.1 的大小,也就是说,每个节点一般可以处理超过平均值的10%的操作记录数量。但是一般来说,MySQL建议单独设置此参数而不要使用默认值,并且将此参数 设置得更较大一些;
以下的三个参数主要是在一个事务中执行一条query的时候临时用到存储(或者内存)的情况下所使用到的,所使用的存储信息会在事务结束(commit或者rollback)的时候释放资源;
MaxNoOfConcurrentIndexOperations:这个参数和MaxNoOfConcurrentOperations参数比较类似, 只不过所针对的是Index的record而已。其默认值为8192,对伊一般的系统来说都已经足够了,只有在事务并发非常非常大的系统上才有需要增加这 个参数的设置。当然,此参数越大,系统运行时候为此而消耗的内存也会越大;
MaxNoOfFiredTriggers:触发唯一索引(hash index)操作的最大的操作数,这个操作数是影响索引的操作条目数,而不是操作的次数。系统默认值为4000,一般系统来说够用了。当然,如果系统并发 事务非常高,而且涉及到索引的操作也非常多,自然也就需要提高这个参数值的设置了;
TransactionBufferMemory:这个buffer值得设置主要是指定用于跟踪索引操作而使用的。主要是用来存储索引操作中涉及到的索引 key值和column的实际信息。这个参数的值一般来说也很少需要调整,因为实际系统中需要的这部分buffer量非常小,虽然默认值只是1M,但是对 于一般应用也已经足够了;
下面要介绍到的参数主要是在系统处理中做table scan或者range scan的时候使用的一些buffer的相关设置,设置的恰当可以既节省内存又达到足够的性能要求。
MaxNoOfConcurrentScans:这个参数主要控制在Cluster环境中并发的table scan和range scan的总数量平均分配到每一个节点后的平均值。一般来说,每一个scan都是通过并行的扫描所有的partition来完成的,每一个 partition的扫描都会在该partition所在的节点上面使用一个scan record。所以,这个参数值得大小应该是“scan record”数目 * 节点数目。参数默认大小为256,最大只能设置为500;