我将使用flexAsynch对MySQL Cluster进行基准testing,请遵循本指南,详细信息如下:
mkdir /usr/local/mysqlc732/ cd /usr/local/src/mysql-cluster-gpl-7.3.2 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysqlc732/ -DWITH_NDB_TEST=ON make make install
一切工作正常,直到这一步:
# /usr/local/mysqlc732/bin/flexAsynch -t 1 -p 80 -l 2 -o 100 -c 100 -n FLEXASYNCH - Starting normal mode Perform benchmark of insert, update and delete transactions 1 number of concurrent threads 80 number of parallel operation per thread 100 transaction(s) per round 2 iterations Load Factor is 80% 25 attributes per table 1 is the number of 32 bit words per attribute Tables are with logging Transactions are executed with hint provided No force send is used, adaptive algorithm used Key Errors are disallowed Temporary Resource Errors are allowed Insufficient Space Errors are disallowed Node Recovery Errors are allowed Overload Errors are allowed Timeout Errors are allowed Internal NDB Errors are allowed User logic reported Errors are allowed Application Errors are disallowed Using table name TAB0 NDBT_ProgramExit: 1 - Failed
ndb_cluster.log :
警告 – 无法为127.0.0.1处的API分配nodeid。 返回的eror:'没有findmysqld(API)的空闲节点id“。
我也用-DWITH_DEBUG=1 -DWITH_NDB_DEBUG=1重新编译了。 如何在debugging模式下运行flexAsynch ?
# /usr/local/mysqlc732/bin/flexAsynch -h FLEXASYNCH Perform benchmark of insert, update and delete transactions Arguments: -t Number of threads to start, default 1 -p Number of parallel transactions per thread, default 32 -o Number of transactions per loop, default 500 -l Number of loops to run, default 1, 0=infinite -load_factor Number Load factor in index in percent (40 -> 99) -a Number of attributes, default 25 -c Number of operations per transaction -s Size of each attribute, default 1 (PK is always of size 1, independent of this value) -simple Use simple read to read from database -dirty Use dirty read to read from database -write Use writeTuple in insert and update -n Use standard table names -no_table_create Don't create tables in db -temp Create table(s) without logging -no_hint Don't give hint on where to execute transaction coordinator -adaptive Use adaptive send algorithm (default) -force Force send when communicating -non_adaptive Send at a 10 millisecond interval -local 1 = each thread its own node, 2 = round robin on node per parallel trans 3 = random node per parallel trans -ndbrecord Use NDB Record -r Number of extra loops -insert Only run inserts on standard table -read Only run reads on standard table -update Only run updates on standard table -delete Only run deletes on standard table -create_table Only run Create Table of standard table -drop_table Only run Drop Table on standard table -warmup_time Warmup Time before measurement starts -execution_time Execution Time where measurement is done -cooldown_time Cooldown time after measurement completed -table Number of standard table, default 0
由于flexAsynch使用asynchronousNDB API,因此我必须在config.ini添加一个空闲插槽:
[MYSQLD] NodeId: 13 Hostname=10.2.3.201
然后重新启动pipe理节点和所有数据节点:
Connected to Management Server at: 10.2.3.201:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=3 @10.2.3.200 (mysql-5.5.30 ndb-7.2.12, Nodegroup: 0, Master) id=4 @10.2.3.202 (mysql-5.5.30 ndb-7.2.12, Nodegroup: 0) [ndb_mgmd(MGM)] 2 node(s) id=1 @10.2.3.201 (mysql-5.5.30 ndb-7.2.12) id=2 @10.2.3.203 (mysql-5.5.30 ndb-7.2.12) [mysqld(API)] 9 node(s) id=5 @10.2.3.201 (mysql-5.5.30 ndb-7.2.12) id=6 @10.2.3.201 (mysql-5.5.30 ndb-7.2.12) id=7 @10.2.3.201 (mysql-5.5.30 ndb-7.2.12) id=8 @10.2.3.201 (mysql-5.5.30 ndb-7.2.12) id=9 @10.2.3.203 (mysql-5.5.30 ndb-7.2.12) id=10 @10.2.3.203 (mysql-5.5.30 ndb-7.2.12) id=11 @10.2.3.203 (mysql-5.5.30 ndb-7.2.12) id=12 @10.2.3.203 (mysql-5.5.30 ndb-7.2.12) id=13 (not connected, accepting connect from 10.2.3.201)
重新运行flexAsynch ,现在它工作正常:
insert average: 59674/s min: 59590/s max: 59759/s stddev: 0% update average: 60077/s min: 58445/s max: 61709/s stddev: 2% delete average: 137487/s min: 134205/s max: 140770/s stddev: 2% read average: 100763/s min: 98413/s max: 103013/s stddev: 2% NDBT_ProgramExit: 0 - OK