mycat分析

mycat分析
mycat分析

1结合Mycat日志,分析select * from travelrecord order by id limit 100000,100 的执行过程,解释下当limit M,N中的M非常大的情况下,为什么查询结果会变慢很多

1.1mycat控制命令台显示,explain出来走了所有的节点

mysql> explain select * from travelrecord order by id limit 100000,100 ;

+-----------+--------------------------------------------------------+

| DATA_NODE | SQL |

+-----------+--------------------------------------------------------+

| dn1 | SELECT * FROM travelrecord ORDER BY id LIMIT 0, 100100 |

| dn2 | SELECT * FROM travelrecord ORDER BY id LIMIT 0, 100100 |

| dn3 | SELECT * FROM travelrecord ORDER BY id LIMIT 0, 100100 |

+-----------+--------------------------------------------------------+

3 rows in set (0.01 sec)

mysql>

看后台mycat.log日志:

02/14 17:52:30.103 DEBUG [$_NIOREACTOR-0-RW] (ServerQueryHandler.java:56) -ServerConnection [id=3, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]explain select * from travelrecord order by id limit 1000000,100

02/14 17:52:30.103 DEBUG [$_NIOREACTOR-0-RW] (EnchachePool.java:76) -SQLRouteCache miss cache ,key:TESTDB select * from travelrecord order by id limit 1000000,100

02/14 17:52:30.105 DEBUG [$_NIOREACTOR-0-RW] (EnchachePool.java:59) -SQLRouteCache add cache ,key:TESTDB select * from travelrecord order by id limit 1000000,100 value:select * from travelrecord order by id limit 1000000,100, route={

1 -> dn1{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}

2 -> dn2{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}

3 -> dn3{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}

}

02/14 17:52:33.880 DEBUG [$_NIOREACTOR-0-RW] (ServerQueryHandler.java:56) -ServerConnection [id=3, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]select * from travelrecord order by id limit 1000000,100 02/14 17:52:33.881 DEBUG [$_NIOREACTOR-0-RW] (EnchachePool.java:76) -SQLRouteCache miss cache ,key:TESTDBselect * from travelrecord order by id limit 1000000,100

02/14 17:52:33.882 DEBUG [$_NIOREACTOR-0-RW] (EnchachePool.java:59) -SQLRouteCache add cache ,key:TESTDBselect * from travelrecord order by id limit 1000000,100 value:select * from travelrecord order by id limit 1000000,100, route={

1 -> dn1{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}

2 -> dn2{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}

3 -> dn3{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}

}

02/14 17:52:33.882 DEBUG [$_NIOREACTOR-0-RW] (NonBlockingSession.java:113) -ServerConnection [id=3, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]select * from travelrecord order by id limit 1000000,100, route={

1 -> dn1{SELECT *

FROM travelrecord

ORDER BY id

02/14 17:52:33.882 DEBUG [$_NIOREACTOR-0-RW] (NonBlockingSession.java:113) -ServerConnection [id=3, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]select * from travelrecord order by id limit 1000000,100, route={

1 -> dn1{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}

2 -> dn2{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}

3 -> dn3{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}

} rrs

02/14 17:52:33.882 DEBUG [$_NIOREACTOR-0-RW] (MultiNodeQueryHandler.java:82) -execute mutinode query select * from travelrecord order by id limit 1000000,100 02/14 17:52:33.882 DEBUG [$_NIOREACTOR-0-RW] (MultiNodeQueryHandler.java:97) -has data merge logic

02/14 17:52:33.882 DEBUG [$_NIOREACTOR-0-RW] (PhysicalDBPool.java:452) -select read source hostM1 for dataHost:wgq_idc_mon_1_12

02/14 17:52:33.883 DEBUG [$_NIOREACTOR-0-RW] (PhysicalDBPool.java:452) -select read source hostM1 for dataHost:wgq_idc_mon_1_12

02/14 17:52:33.883 DEBUG [$_NIOREACTOR-0-RW] (PhysicalDBPool.java:452) -select read source hostM1 for dataHost:wgq_idc_mon_1_12

02/14 17:52:33.883 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=19, lastTime=1455443553868, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=false, threadId=220, charset=latin1, txIsolation=3, autocommit=true, attachment=dn1{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@f35a686,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@b47af37, writeQueue=0, modifiedSQLExecuted=false]

02/14 17:52:33.884 DEBUG [$_NIOREACTOR-1-RW] (MultiNodeQueryHandler.java:241) -on row end reseponse MySQLConnection [id=25, lastTime=1455443553868, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=227, charset=latin1, txIsolation=3, autocommit=true, attachment=dn3{SELECT *

FROM travelrecord

02/14 17:52:33.883 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=19, lastTime=1455443553868, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=false, threadId=220, charset=latin1, txIsolation=3, autocommit=true, attachment=dn1{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100},

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@b47af37, writeQueue=0, modifiedSQLExecuted=false]

02/14 17:52:33.884 DEBUG [$_NIOREACTOR-1-RW] (MultiNodeQueryHandler.java:241) -on row end reseponse MySQLConnection [id=25, lastTime=1455443553868, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=227, charset=latin1, txIsolation=3, autocommit=true, attachment=dn3{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@f35a686,

host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

02/14 17:52:33.884 DEBUG [$_NIOREACTOR-3-RW] (DataMergeService.java:94) -field metadata inf:[ID=ColMeta [colIndex=0, colType=8], DAYS=ColMeta [colIndex=4, colType=3], TRAVELDATE=ColMeta [colIndex=2, colType=10], USER_ID=ColMeta [colIndex=1, colType=253], FEE=ColMeta [colIndex=3, colType=246]]

02/14 17:52:33.884 DEBUG [$_NIOREACTOR-1-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=25, lastTime=1455443553868, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=227, charset=latin1, txIsolation=3, autocommit=true, attachment=dn3{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@f35a686,

host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

02/14 17:52:33.885 DEBUG [$_NIOREACTOR-1-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=25, lastTime=1455443553868, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=227, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

02/14 17:52:33.886 DEBUG [$_NIOREACTOR-3-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=19, lastTime=1455443553868, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=false, threadId=220, charset=latin1, txIsolation=3, autocommit=true, attachment=dn1{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100},

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@b47af37, writeQueue=0, modifiedSQLExecuted=false]

02/14 17:52:33.886 DEBUG [$_NIOREACTOR-3-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=19, lastTime=1455443553868, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=false, threadId=220, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

02/14 17:52:33.886 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:241) -on row end reseponse MySQLConnection [id=42, lastTime=1455443553868, user=root, schema=db2, old shema=db2, borrowed=true, fromSlaveDB=false, threadId=234, charset=latin1, txIsolation=3, autocommit=true, attachment=dn2{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@f35a686,

host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false] 02/14 17:52:33.886 DEBUG [$_NIOREACTOR-3-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=42, lastTime=1455443553868, user=root, schema=db2, old shema=db2, borrowed=true, fromSlaveDB=false, threadId=234, charset=latin1, txIsolation=3, autocommit=true, attachment=dn2{SELECT *

FROM travelrecord

ORDER BY id

LIMIT 0, 1000100}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@f35a686,

host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false] 02/14 17:52:33.886 DEBUG [$_NIOREACTOR-3-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=42, lastTime=1455443553868, user=root, schema=db2, old shema=db2, borrowed=true, fromSlaveDB=false, threadId=234, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

02/14 17:52:33.887 DEBUG [BusinessExecutor5] (DataMergeService.java:296) -prepare mpp merge result for select * from travelrecord order by id limit 1000000,100

02/14 17:52:33.887 DEBUG [BusinessExecutor5] (MultiNodeQueryHandler.java:324) -last packet id:8

路由里面是先查limit 0,1000000条,然后再查出limit 0,1000100条记录,在这个基础上查出100条(prepare mpp merge result for select * from travelrecord order by id limit 1000000,100),所以如果这个M=1000000越来越大,一次性拉的数据就越大,这样就越来越慢了,那么需要查询的数据就比较多

2结合Mycat日志,分析跨分片事务的执行过程,以一个正常的跨分片SQL的事务过程,以及,一个错误SQL为例(比如某个分片上主键冲突或其他SQL错误,导致无法执行成功)分别加, 以说明

2.1 正常的跨分片事务分析

执行情况:

mysql> set autocommit=0

mysql> update order040302 set SN=concat(SN,'-mycat');

Query OK, 2 rows affected (0.01 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> commit;

mycat.log日志显示:

02/18 00:01:24.351 DEBUG [$_NIOREACTOR-1-RW] (ServerQueryHandler.java:56) -ServerConnection [id=4, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]update order040302 set SN=concat(SN,'-mycat') 02/18 00:01:24.356 DEBUG [$_NIOREACTOR-1-RW] (NonBlockingSession.java:113) -ServerConnection [id=4, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]update order040302 set SN=concat(SN,'-mycat'), route={

1 -> dn21{update order04030

2 set SN=concat(SN,'-mycat')}

2 -> dn22{update order040302 set SN=concat(SN,'-mycat')}

} rrs

02/18 00:01:24.356 DEBUG [$_NIOREACTOR-1-RW] (MultiNodeQueryHandler.java:82) -execute mutinode query update order040302 set SN=concat(SN,'-mycat')

02/18 00:01:24.357 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=7, lastTime=1455724884356, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=218, charset=latin1, txIsolation=3, autocommit=true, attachment=dn21{update order040302 set SN=concat(SN,'-mycat')}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@23eca0d1,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@71a27302, writeQueue=0, modifiedSQLExecuted=true]

02/18 00:01:24.358 DEBUG [$_NIOREACTOR-2-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:true from MySQLConnection [id=30,

lastTime=1455724884356, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=200, charset=latin1, txIsolation=3, autocommit=true, attachment=dn22{update order040302 set SN=concat(SN,'-mycat')}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@23eca0d1,

host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/18 00:01:24.359 DEBUG [$_NIOREACTOR-2-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=30, lastTime=1455724884356, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=200, charset=latin1, txIsolation=3, autocommit=true, attachment=dn22{update order040302 set SN=concat(SN,'-mycat')},

respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@23eca0d1,

host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/18 00:01:24.359 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:true from MySQLConnection [id=7, lastTime=1455724884356, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=218, charset=latin1, txIsolation=3, autocommit=true, attachment=dn21{update order040302 set SN=concat(SN,'-mycat')}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@23eca0d1,

host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/18 00:01:24.359 DEBUG [$_NIOREACTOR-3-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=7, lastTime=1455724884356, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=218, charset=latin1, txIsolation=3, autocommit=true, attachment=dn21{update order040302 set SN=concat(SN,'-mycat')}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@23eca0d1,

host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/18 00:01:24.359 DEBUG [$_NIOREACTOR-3-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=7, lastTime=1455724884356, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=218, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

分析结果:update语句是修改所有的节点上的数据,02/18 00:01:24.356处NonBlockingSession启动了分布式事务,下面就分别在02/18 00:01:24.359有2处NonBlockingSession.java:229在dn21、dn22上面执行了2遍,大家看到在2个节点dn21和dn22都执行完毕后,才有(PhysicalDatasource.java:403) -release channel MySQLConnection开始关闭释放连接,也就是说等所有节点都执行完毕后才结束整个事务。

2.2 非正常的sql事务执行,有一处报错的情况下(失败经过)

准备数据,需要一个节点成功,一个节点失败,所以准备拿SN字段的长度来做实验,

一个超过报错,一个没有超过不报错

2.2.1 查看表结构:

mysql> show create table order040302;

+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| order040302 | CREATE TABLE `order040302` (

`ID` int(11) NOT NULL AUTO_INCREMENT,

`CODE` varchar(64) DEFAULT NULL,

`SN` varchar(64) DEFAULT NULL,

`CREATE_TIME` datetime DEFAULT NULL,

PRIMARY KEY (`ID`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 |

+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

mysql>

修改数据,设置成如此,一会就可以update一个节点失败一个节点成功了,在ID=1的节点上因为长度超过64报错,而在ID=2的节点上面则长度小于64而正常执行:

mysql> update order040302 set SN = concat('',SN,'___',SN) where ID=1;

Query OK, 1 row affected (0.01 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> select length(t1.SN),t1.* from order040302 t1;

+---------------+----+------------+-------------------------------------------------------+---------------------+ | length(t1.SN) | ID | CODE | SN | CREATE_TIME |

+---------------+----+------------+-------------------------------------------------------+---------------------+ | 53 | 1 | 0-10000020 | beijing_03-10000020-mycat___beijing_03-10000020-mycat | 2016-02-13 00:40:27 | | 26 | 2 | 1-10000020 | shanghai_10-10000020-mycat

| 2016-02-13 00:40:18 |

+---------------+----+------------+-------------------------------------------------------+---------------------+

2 rows in set (0.00 sec)

mysql> update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN) ;

2.2.2 mycat.log日志如下:

02/22 05:44:39.666 DEBUG [$_NIOREACTOR-0-RW] (ServerQueryHandler.java:56) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)

02/22 05:44:39.821 DEBUG [$_NIOREACTOR-0-RW] (NonBlockingSession.java:113) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN), route={

1 -> dn21{update order04030

2 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}

2 -> dn22{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}

} rrs

02/22 05:44:39.827 DEBUG [$_NIOREACTOR-0-RW] (MultiNodeQueryHandler.java:82) -execute mutinode query update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)

02/22 05:44:39.830 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=7, lastTime=1456091079827, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=245, charset=latin1, txIsolation=3, autocommit=true, attachment=dn21{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@1c70f0b1,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@64b49aaa, writeQueue=0, modifiedSQLExecuted=true]

02/22 05:44:39.831 DEBUG [$_NIOREACTOR-0-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=12, lastTime=1456091079827, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=222, charset=latin1, txIsolation=3, autocommit=true, attachment=dn22{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@1c70f0b1,

host=110.254.11.111, port=3327, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@306b3db1, writeQueue=0, modifiedSQLExecuted=true]

02/22 05:44:39.831 DEBUG [$_NIOREACTOR-3-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=7, lastTime=1456091079827, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=245, charset=latin1, txIsolation=3, autocommit=true, attachment=dn21{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)},

respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@1c70f0b1,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@64b49aaa, writeQueue=0, modifiedSQLExecuted=true]

02/22 05:44:39.832 DEBUG [$_NIOREACTOR-3-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=7, lastTime=1456091079827, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=245, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

02/22 05:44:39.832 DEBUG [$_NIOREACTOR-0-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:true from MySQLConnection [id=12, lastTime=1456091079827, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=222, charset=latin1, txIsolation=3, autocommit=true, attachment=dn22{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@1c70f0b1,

host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/22 05:44:39.832 WARN [$_NIOREACTOR-3-RW] (MultiNodeHandler.java:127) -error response from MySQLConnection [id=7, lastTime=1456091079827, user=root, schema=db3, old shema=db3, borrowed=false, fromSlaveDB=false, threadId=245, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false] err Data too long for column 'SN' at row 1 code:1406

02/22 05:44:39.833 DEBUG [$_NIOREACTOR-0-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=12, lastTime=1456091079827, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=222, charset=latin1, txIsolation=3, autocommit=true, attachment=dn22{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)},

respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@1c70f0b1,

host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/22 05:44:39.834 DEBUG [$_NIOREACTOR-0-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=12, lastTime=1456091079827, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=222, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

02/22 05:44:39.835 DEBUG [$_NIOREACTOR-0-RW] (MultiNodeHandler.java:194) -error all end ,clear session resource

从日志记录里面可以看出:[$_NIOREACTOR-3-RW]dn21节点失败,报错err Data too long for column 'SN' at row 1 code:1406,[$_NIOREACTOR-0-RW]节点dn22成功了,所以最后提示

-error all end ,clear session resource,整个事务退出,清空当前会话资源,结论就是一个节点dn21失败,单节点回退,但是成功的节点dn22不会回退,这是怎么回事呢?查看执行后的数据结果如下:

mysql> select length(t1.SN),t1.* from order040302 t1;

+---------------+----+------------+------------------------------------------------------------+---------------------+ | length(t1.SN) | ID | CODE | SN | CREATE_TIME |

+---------------+----+------------+------------------------------------------------------------+---------------------+ | 53 | 1 | 0-10000020 | beijing_03-10000020-mycat___beijing_03-10000020-mycat | 2016-02-13 00:40:27 | | 58 | 2 | 1-10000020 | fenpianyigechenggong_yigeshibai_shanghai_10-10000020-mycat | 2016-02-13 00:40:18 | +---------------+----+------------+------------------------------------------------------------+---------------------+

2 rows in set (0.06 sec)

mysql>

可见,我这个不是事务,事务会所有一起回退的。mycat窗口中如何开启事务?2.3 如何mysql窗口那样,在mycat窗口开启事务

2.3.1 开启事务,手动提交

mysql> set autocommit=0;

Query OK, 0 rows affected (0.00 sec)

mysql> update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN) ;

ERROR 1105 (HY000): Data too long for column 'SN' at row 1

mysql> commit;

ERROR 1003 (HY000): Transaction error, need to rollback.

mysql>

mysql> select length(t1.SN),t1.* from order040302 t1;

ERROR 1003 (HY000): Transaction error, need to rollback.Data too long for column 'SN' at row 1

mysql>

mysql> rollback;

Query OK, 0 rows affected (0.01 sec)

mysql>

mysql> select length(t1.SN),t1.* from order040302 t1;

+---------------+----+------------+-------------------------------------------------------+---------------------+ | length(t1.SN) | ID | CODE | SN

| CREATE_TIME |

+---------------+----+------------+-------------------------------------------------------+---------------------+ | 53 | 1 | 0-10000020 | beijing_03-10000020-mycat___beijing_03-10000020-mycat | 2016-02-13 00:40:27 | | 26 | 2 | 1-10000020 | shanghai_10-10000020-mycat | 2016-02-13 00:40:18 |

+---------------+----+------------+-------------------------------------------------------+---------------------+

2 rows in set (0.09 sec)

mysql>

2.3.2 后台mycat.log日志如下,run失败信息如下:

02/22 17:54:25.035 DEBUG [$_NIOREACTOR-1-RW] (ServerQueryHandler.java:56) -ServerConnection [id=2, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=false, schema=TESTDB]update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)

02/22 17:54:25.187 DEBUG [$_NIOREACTOR-1-RW] (NonBlockingSession.java:113) -ServerConnection [id=2, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=false, schema=TESTDB]update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN), route={

1 -> dn21{update order04030

2 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}

2 -> dn22{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}

} rrs

02/22 17:54:25.193 DEBUG [$_NIOREACTOR-1-RW] (MultiNodeQueryHandler.java:82) -execute mutinode query update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)

02/22 17:54:25.195 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=7, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=278, charset=latin1, txIsolation=0, autocommit=true, attachment=dn21{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@243cc381,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@4ff5e91e, writeQueue=0, modifiedSQLExecuted=true]

02/22 17:54:25.196 DEBUG [$_NIOREACTOR-1-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=17, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=259, charset=latin1, txIsolation=0, autocommit=true, attachment=dn22{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@243cc381,

host=110.254.11.111, port=3327, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@46e9d255, writeQueue=0, modifiedSQLExecuted=true]

02/22 17:54:25.196 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=7, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=278, charset=latin1, txIsolation=3, autocommit=false, attachment=dn21{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@243cc381,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@4ff5e91e, writeQueue=0, modifiedSQLExecuted=true]

02/22 17:54:25.196 DEBUG [$_NIOREACTOR-1-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=17, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=259, charset=latin1, txIsolation=3, autocommit=false, attachment=dn22{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@243cc381,

host=110.254.11.111, port=3327, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@46e9d255, writeQueue=0, modifiedSQLExecuted=true]

02/22 17:54:25.197 WARN [$_NIOREACTOR-3-RW] (MultiNodeHandler.java:127) -error response from MySQLConnection [id=7, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=278, charset=latin1, txIsolation=3, autocommit=false, attachment=dn21{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)},

respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@243cc381,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@4ff5e91e, writeQueue=0, modifiedSQLExecuted=true] err Data too long for column 'SN' at row 1 code:1406 02/22 17:54:25.197 DEBUG [$_NIOREACTOR-1-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:true from MySQLConnection [id=17, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=259, charset=latin1, txIsolation=3, autocommit=false, attachment=dn22{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@243cc381,

host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/22 17:54:25.199 DEBUG [$_NIOREACTOR-1-RW] (MultiNodeHandler.java:194) -error all end ,clear session resource

2.3.3后台mycat.log日志,rollback操作日志如下:

02/22 17:57:17.432 DEBUG [$_NIOREACTOR-1-RW] (ServerQueryHandler.java:56) -ServerConnection [id=2, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=false, schema=TESTDB]rollback

02/22 17:57:17.434 DEBUG [$_NIOREACTOR-1-RW] (RollbackNodeHandler.java:71) -rollback job run for MySQLConnection [id=7, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=278, charset=latin1, txIsolation=3, autocommit=false, attachment=dn21{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)},

respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@243cc381,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@4ff5e91e, writeQueue=0, modifiedSQLExecuted=true]

02/22 17:57:17.435 DEBUG [$_NIOREACTOR-1-RW] (RollbackNodeHandler.java:71) -rollback job run for MySQLConnection [id=17, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=259, charset=latin1, txIsolation=3, autocommit=false, attachment=dn22{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)},

respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@243cc381,

host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/22 17:57:17.436 DEBUG [$_NIOREACTOR-1-RW] (NonBlockingSession.java:361) -clear session resources org.opencloudb.server.NonBlockingSession@4483dae0

02/22 17:57:17.436 DEBUG [$_NIOREACTOR-1-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=7, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=278, charset=latin1, txIsolation=3, autocommit=false, attachment=dn21{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)},

respHandler=org.opencloudb.mysql.nio.handler.RollbackNodeHandler@2c96cb44,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@4ff5e91e, writeQueue=0, modifiedSQLExecuted=true]

02/22 17:57:17.438 DEBUG [$_NIOREACTOR-1-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=17, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=259, charset=latin1, txIsolation=3, autocommit=false, attachment=dn22{update order040302 set SN = concat('fenpianyigechenggong_yigeshibai_',SN)},

respHandler=org.opencloudb.mysql.nio.handler.RollbackNodeHandler@2c96cb44,

host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/22 17:57:17.438 DEBUG [$_NIOREACTOR-3-RW] (RollbackReleaseHandler.java:58) -autocomit is false,but no commit or rollback ,so mycat rollbacked backend conn MySQLConnection [id=7, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=278, charset=latin1, txIsolation=3,

autocommit=false, attachment=null, respHandler=org.opencloudb.mysql.nio.handler.RollbackReleaseHandler@56683a8d,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@4ff5e91e, writeQueue=0, modifiedSQLExecuted=true]

02/22 17:57:17.439 DEBUG [$_NIOREACTOR-3-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=7, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=278, charset=latin1, txIsolation=3, autocommit=false, attachment=null, respHandler=null, host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

02/22 17:57:17.439 DEBUG [$_NIOREACTOR-1-RW] (RollbackReleaseHandler.java:58) -autocomit is false,but no commit or rollback ,so mycat rollbacked backend conn MySQLConnection [id=17, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=259, charset=latin1, txIsolation=3, autocommit=false, attachment=null, respHandler=org.opencloudb.mysql.nio.handler.RollbackReleaseHandler@429eb61a,

host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/22 17:57:17.440 DEBUG [$_NIOREACTOR-1-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=17, lastTime=1456134865193, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=259, charset=latin1, txIsolation=3, autocommit=false, attachment=null, respHandler=null, host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

看到在执行update的时候,有报错信息:在dn21节点上面err Data too long for column 'SN' at row 1 code:1406,所以按照理论上任何节点发生错误了,就面临rollback的错误信息,任何任何都会提示报错信息,只能执行rollback来恢复。PS:这里目前的mycat版本没有办法做到在update失败后自动rollback,需要手动rollback操作。

3创建一个在多个分片上存在的存储过程,存储过程可以是统计某个表的记录个数并返回,然后用Mycat注解方式完成调用

3.1准备好的简单的存储过程

DELIMITER $$

CREATE

PROCEDURE db3.pro_select()

BEGIN

SELECT COUNT(1) FROM order040302;

END$$

DELIMITER ;

3.2在各mysql节点上执行创建存储过程

dn21节点上的mysql窗口上:

mysql> DELIMITER $$

mysql> CREATE

-> PROCEDURE `db3`.`pro_select`()

-> BEGIN

-> SELECT COUNT(1) FROM order040302;

-> END$$

Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

mysql>

dn22节点上的mysql窗口上:

mysql> DELIMITER $$

mysql> CREATE

-> PROCEDURE `db3`.`pro_select`()

-> BEGIN

-> SELECT COUNT(1) FROM order040302;

-> END$$

Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

mysql>

检查存储过程:

mysql> select * from information_schema.ROUTINES\G

*************************** 1. row *************************** SPECIFIC_NAME: pro_select

ROUTINE_CATALOG: def

ROUTINE_SCHEMA: db3

ROUTINE_NAME: pro_select

ROUTINE_TYPE: PROCEDURE

DATA_TYPE:

CHARACTER_MAXIMUM_LENGTH: NULL

CHARACTER_OCTET_LENGTH: NULL

NUMERIC_PRECISION: NULL

NUMERIC_SCALE: NULL

DATETIME_PRECISION: NULL

CHARACTER_SET_NAME: NULL

COLLATION_NAME: NULL

DTD_IDENTIFIER: NULL

ROUTINE_BODY: SQL

ROUTINE_DEFINITION: BEGIN

SELECT COUNT(1) FROM order040302;

END

EXTERNAL_NAME: NULL

EXTERNAL_LANGUAGE: NULL

PARAMETER_STYLE: SQL

IS_DETERMINISTIC: NO

SQL_DATA_ACCESS: CONTAINS SQL

SQL_PATH: NULL

SECURITY_TYPE: DEFINER

CREATED: 2016-02-22 19:17:12

LAST_ALTERED: 2016-02-22 19:17:12

SQL_MODE: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION ROUTINE_COMMENT:

DEFINER: root@localhost

CHARACTER_SET_CLIENT: latin1

COLLATION_CONNECTION: latin1_swedish_ci

DATABASE_COLLATION: utf8mb4_general_ci

1 row in set (0.00 sec)

mysql>

然后在mycat中执行:

mysql> /*!mycat:sql=select * from order040302 where ID=2*/ call pro_select();

+----------+

| COUNT(1) |

+----------+

| 1 |

| 1 |

+----------+

2 rows in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

mysql>

问题,为啥是2行记录,不知道可以不可以并成一行记录呢?

3.3看后台mycat.log日志:

看到日志中42.293记录,走的route路由进入dn21和dn22节点上面,最终执行的是注解的-execute mutinode query select * from order040302,如下所示:

02/22 20:19:42.292 DEBUG [$_NIOREACTOR-1-RW] (ServerQueryHandler.java:56) -ServerConnection [id=10, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]/*!mycat:sql=select * from order040302*/ call pro_select() 02/22 20:19:42.293 DEBUG [$_NIOREACTOR-1-RW] (NonBlockingSession.java:113) -ServerConnection [id=10, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]select * from order040302, route={

1 -> dn21{call pro_select()}

2 -> dn22{call pro_select()}

} rrs

02/22 20:19:42.293 DEBUG [$_NIOREACTOR-1-RW] (MultiNodeQueryHandler.java:82) -execute mutinode query select * from order040302

02/22 20:19:42.295 DEBUG [$_NIOREACTOR-0-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=4, lastTime=1456143582284, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=280, charset=latin1, txIsolation=3, autocommit=true, attachment=dn21{call pro_select()}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@ba5d1a4,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@939bc30, writeQueue=0, modifiedSQLExecuted=true]

02/22 20:19:42.295 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:241) -on row end reseponse MySQLConnection [id=11, lastTime=1456143582284, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=254, charset=latin1, txIsolation=3, autocommit=true, attachment=dn22{call pro_select()}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@ba5d1a4,

host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/22 20:19:42.295 DEBUG [$_NIOREACTOR-0-RW] (MultiNodeQueryHandler.java:241) -on row end reseponse MySQLConnection [id=4, lastTime=1456143582284, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=280, charset=latin1, txIsolation=3, autocommit=true, attachment=dn21{call pro_select()}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@ba5d1a4,

host=110.254.11.111, port=3317, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@939bc30, writeQueue=0, modifiedSQLExecuted=true]

02/22 20:19:42.296 DEBUG [$_NIOREACTOR-0-RW] (MultiNodeQueryHandler.java:280) -last packet id:6

02/22 20:19:42.295 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:true from MySQLConnection [id=11, lastTime=1456143582284, user=root, schema=db3, old shema=db3, borrowed=true,

fromSlaveDB=false, threadId=254, charset=latin1, txIsolation=3, autocommit=true, attachment=dn22{call pro_select()}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@ba5d1a4,

host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/22 20:19:42.296 DEBUG [$_NIOREACTOR-0-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:true from MySQLConnection [id=4, lastTime=1456143582284, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=280, charset=latin1, txIsolation=3, autocommit=true, attachment=dn21{call pro_select()}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@ba5d1a4,

host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/22 20:19:42.296 DEBUG [$_NIOREACTOR-3-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=11, lastTime=1456143582284, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=254, charset=latin1, txIsolation=3, autocommit=true, attachment=dn22{call pro_select()}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@ba5d1a4,

host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/22 20:19:42.296 DEBUG [$_NIOREACTOR-0-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=4, lastTime=1456143582284, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=280, charset=latin1, txIsolation=3, autocommit=true, attachment=dn21{call pro_select()}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@ba5d1a4,

host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=true] 02/22 20:19:42.296 DEBUG [$_NIOREACTOR-3-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=11, lastTime=1456143582284, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=254, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=110.254.11.111, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

02/22 20:19:42.297 DEBUG [$_NIOREACTOR-0-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=4, lastTime=1456143582284, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=280, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=110.254.11.111, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

性能测试方案讲解

1.引言 说明测试方案中所涉及内容的简单介绍,包含:编写目的,项目背景、参考文档,以及预期的读者等。 1.1.编写目的 本文档描述××系统性能测试的范围、方法、资源、进度,该文档的目的主要有: 1.明确测试目的范围。 2.明确测试范围和目标。 3.明确测试环境需求,包括:测试需要的软、硬件环境以及测试人力需求。 4.确定测试方案,测试的方法和步骤。 5.确定测试需要输出的结果和结果表现形式。 6.分析测试的风险,寻找规避办法。 1.2.项目简介 简要描述与测试项目相关的一些背景资料,如被测系统简介,项目上线计划等。 1.3.参考文档 说明文档编写过程参考引用的资料信息。 2.测试目的、范围与目标 2.1.测试目的

根据项目总体计划明确项目测试目的。常见的测试目的如下(依据项目的实际情况修改。 本次性能测试的主要目的在于: ?测试已完成系统的综合性能表现,检验交易或系统的处理能力是否满足 系统运行的性能要求; ?发现交易中存在的性能瓶颈,并对性能瓶颈进行修改; ?模拟发生概率较高的单点故障,对系统得可靠性进行验证; ?验证系统的生产环境运行参数设置是否合理,或确定该参数; ?获得不同备选方案的性能表现,为方案选择提供性能数据支持。 2.2.测试功能范围 说明本项目需要进行测试的待测系统功能范围,列出被测对象的测试重要性及优先级等,提供一份简要列表。对于交易类功能要细化到每一个交易码;对于页面类功能要细化到每一个发起页面。下面表格供参考,非强制使用。 如果测试目的为方案验证,需要文字列出需要验证的方案项。 明确列出说明本次测试需要关注的测试指标的定义及范围,不需要关注的测试指标也应列出。下面的内容供参考。 本次性能测试需要获得的性能指标如下所列:

产品项目性能测试报告

产品项目性能测试报告文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

文档号: 密级:内部 版本号: 产品(项目)性能测试报告 撰写:××× 审核: ××××测试中心 编写日期:××××年09月11日 修订历史记录

目录

一、测试项目简介 1.1编写目的 本测试分析报告的编写目的在于统计量化××××系统版本中的错误和存在的问题,通过分析错误产生的原因和错误的分布特征,发现软件的缺陷和限制,从而对模块的质量做出一个客观有效的评价。 本测试报告的预期读者是××××系统版本的软件开发人员、项目管理人员、研发管理人员、测试经理、测试人员、维护人员。 1.2项目背景 产品名称:××××系统 软件开发者:××××开发中心 测试环境符合×××系统产品需求规格说明书的要求及××××系统的系统测试环境列表的的要求 具体测试环境描述如下: 表1-1性能测试环境表

1.3测试参考文档 表1-2 测试参考文档

二、性能测试内容概要 测试目标 对××××系统产品在数据库为Mysql 5、应用服务器为Tomcat的架构下的性能情况进行测试。对测试过程中的性能指标数据进行剖析,最终给出该项目的性能指标数据。 测试用例 本次性能测试重点关注多个虚拟用户同时登录及在线过程应用服务器的系统负荷情况,利用性能测试分析工具察看登录及在线人数是否有缺失情况,同时还要测试被测系统的不同人数登录的响应时间,记录其性能指标进行对比,评估测试结果。 测试使用环境:(与功能测试环境一致) ?服务器硬件为******服务器,操作系统:Windows 2003 Server ?数据库管理系统采用 Mysql 5,应用服务器为Tomcat 应用服务器和数据库运行在同一台硬件服务器上 ?测试工具软件为 (SP2) 测试场景 并发测试:模拟不同的VU用户同时执行登陆操作,并使用LoadRunner记录主要参数性能指标。

性能测试分析报告案例

***系统性能测试报告 V1.0 撰稿人:******* 时间:2011-01-06

目录 1.测试系统名称及测试目标参考 (3) 2.测试环境 (3) 3.场景设计 (3) 3.1测试场景 (3) 3.1测试工具 (4) 4.测试结果 (4) 4.1登录 (4) 4.2发送公文 (6) 4.3收文登记 (8)

1.测试系统名称及测试目标参考 被测系统名称:*******系统 系统响应时间判断原则(2-5-10原则)如下: 1)系统业务响应时间小于2秒,用户对系统感觉很好; 2)系统业务响应时间在2-5秒之间,用户对系统感觉一般; 3)系统业务响应时间在5-10秒之间,用户对系统勉强接受; 4)系统业务响应时间超过10秒,用户无法接受系统的响应速度。 2.测试环境 网络环境:公司内部局域网,与服务器的连接速率为100M,与客户端的连接速率为10/100M 硬件配置: 3.场景设计 3.1测试场景 间

间 间 3.1测试工具 ●测试工具:HP LoadRunner9.0 ●网络协议:HTTP/HTTPS协议 4.测试结果 4.1登录 ●运行1小时后实际登录系统用户数,用户登录后不退出,一直属于在线状态,最 终登录的用户达到9984个;

●响应时间 ●系统资源

服务器的系统资源表现良好(CPU使用率为14%,有15%的物理内存值)。磁盘等其他指标都表现正常,在现有服务器的基础上可以满足9984个在线用户。 4.2发送公文 运行时间为50分钟,100秒后300个用户全部加载成功,300个用户开始同时进行发文,50分钟后,成功发文数量如下图所示,成功发文17792个,发文失败37 个;

Iometer性能测试工具测试指南

Iometer性能测试工具测试指南

目录 一、Iometer简介 (3) 二、安装Iometer (3) 1、获得安装文件 (3) 2、安装 (3) 三、测试IO(磁盘、网络)性能 (4) 1. 本地IO性能测试 (4) 2. 网路IO性能测试 (6)

一、Iometer简介 IOMeter是一款功能非常强大的IO测试软件,它除了可以在本机运行测试本机的IO(磁盘)性能之外,还提供了模拟网络应用的能力。为了全面测试被测服务器的IO性能,可以分别选择不同类型的测试脚本。 ●Max_throughput:文件尺寸为64KB,100%读取操作,随机率为0%,用于检测磁盘系统 的最大吞吐量 ●Max_IO:文件尺寸为512B,100%读取操作,随机率为0%,用于检测磁盘系统的最大IO 能力 ●Fielserver:文件尺寸从0.5KB到64KB不等,80%读取操作,随机率为100%,用于模拟 文件服务器的性能 ●WebServer:文件尺寸从0.5KB到512KB不等,100%读取操作,随机率为100%,用于模 拟Web服务器的性能 二、安装Iometer 1、获得安装文件 ●从Iometer官方网站https://www.360docs.net/doc/2c12920234.html,/ 得到安装文件,上面提供不同平台的安装 文件。 ●从当前目录得到安装文件,提供了Windows、Linux的安装文件。 2、安装 安装基本上不需要什么特殊的设置遵循“Next”原则就可以安装成功。

三、测试IO(磁盘、网络)性能 1. 本地IO性能测试 1、启动Iometer.exe,在windows上单击Iometer图标; 2、在Iometer启动的同时会自动运行Dynamo.exe,在Iometer中被叫做一个Manager。如下图; 3、在“Disk Targets”页中选择一个驱动器; 4、在“Access Specifications”页中选择一个需要的测试项目;

性能测试面试题附答案范文

1、哪个函数是用来截取虚拟用户脚本中的动态值?(手工关联) Web_reg_save_param 2、你如何识别系统瓶颈? 从TPS指标分析(即系统每秒处理可处理事务数)当前随着用户数的增长其系统每秒可处理的事务数是否也会增长 3、think_time有什么用? Think_time作用主要有以下几种: 1)降低当前运行时压力,缓解对应用服务器所造成的压力 2)模拟真实生产用户操作,考察对服务器所造成的影响 4、一般什么时候开始进行性能测试 被测系统的正常业务流程通过,即集成测试通过后。 5、进行参数化的目的 1)减少脚本的大小 2)提供不同的值以提高执行脚本的能力,从而更加真实的模拟生产环境的数据 6、容量测试方法中为什么要以逐步递增的的方式进行 虚拟用户数随着负载时间的延长而增加,可以帮助确定系统响应时间减慢的准确时间点以及准确用户数 7、假设在测试过程中发现某些事务的响应时间过长,但分析应用服务、数据库服务以及网络都属于 正常现象,问题可能出现的原因 1)LR客户端机器是否已无法承载当前运行压力导致LR无法及时获取从服务端返回的信息2)Think_time(即思考时间)是否已忽略 3)确定当前被测系统架构,是否为在每次测试过程中清除缓存所导致 8、如何发现应用服务的相关问题? 1)通过某些事务的运行,判断是否在应用代码层未进行调优导致事务响应事件过长 2)通过实时监控工具(nmon等)监控分析: a)系统在运行过程其CPU是否稳定运行或CPU耗用是否过高 b)在系统运行过程中其内存是否存在内存泄露现象 3)打开应用相应日志,分析在运行过程中是否存在交易报错并获取错误原因查看是否由于代码原因导致交易错误发生 9、如何发现数据库的相关问题? 1)通过运行某些相应的已获取的SQL语句,判断是否由于数据库索引所导致的事务响应过长的问题发生 2)通过实时监控工具(nmon等)监控分析: a)在系统运行过程中CPU是否可稳定运行或CPU耗用过高; b)在系统运行过程中其内存是否存在内存泄露等现象。

性能测试实战经典案例分享:一个你不知道的压力测试工具

在项目上线之前,都需要做,目的是看下我们的网站能抗住多少的压力,能承担多少并发,如果不做压力测试,一旦出现大访问量时,我们的网站会挂掉。 一、Webbench测试并发 Webbench是下的一个网站压力测试工具,能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webbench的标准测试可以向我们展示服务器的两项内容:每分钟相应请求数和每秒钟传输数据量。webbench最多可以模拟3万个并发连接去测试网站的负载能力。 测试的环境是 Linux Ubuntu 1、安装 1.1 安装ctags apt-get install exuberant-ctags ctags 为webbench的依赖 1.2 下载安装 官网:~cz210... root@corwien:~# wget ~cz210552/distfiles/webbench- root@corwien:~# tar zxvf webbench- root@corwien:~# cd webbench-1.5/ root@corwien:~/webbench-1.5# make root@corwien:~/webbench-1.5# make install root@corwien:~/webbench-1.5# webbench webbench [option]... URL -f|--force Don't wait for reply from . -r|--reload Send reload request - Pragma: no-cache. -t|--time Run benchmark for seconds. Default 30. -p|--proxy Use proxy server for request. -c|--clients Run HTTP clients at once. Default one. -9|--http09 Use HTTP/0.9 style requests. -1|--http10 Use HTTP/1.0 protocol. -2|--http11 Use HTTP/1.1 protocol. --get Use GET request method. --head Use HEAD request method. --options Use OPTIONS request method. --trace Use TRACE request method. -?|-h|--help This information. -V|--version Display program version. 2、测试

性能测试报告范例

测试目的: 考虑到各地区的用户数量和单据量的增加会给服务器造成的压力不可估计,为确保TMS系统顺利在各地区推广上线,决定对TMS系统进行性能测试,重点为监控服务器在并发操作是的资源使用情况和请求响应时间。 测试内容 测试工具 主要测试工具为:LoadRunner11 辅助软件:截图工具、Word

测试结果及分析 5个用户同时生成派车单的测试结果如下: Transaction Summary(事务摘要) 从上面的结果我们可以看到该脚本运行47秒,当5个用户同时点击生成派车单时,系统的响应时间为41.45秒,因为没有设置持续运行时间,所以这里我们取的响应时间为90percent –time,且运行的事物已经全部通过

事务概论图,该图表示本次场景共5个事务(每个用户点击一次生成派车单为1个事务),且5个事务均已pass,绿色表色pass,如出现红色则表示产生error

从上图可以看到服务器的CPU平均值为14.419% ,离最大参考值90%相差甚远;且趋势基本成一直线状,表示服务器响应较为稳定,5个用户操作5个900托运单的单据对服务器并没有产生过大的压力。

“Hits per Second(每秒点击数)”反映了客户端每秒钟向服务器端提交的请求数量,这里服务器每秒响应9,771次请求;如果客户端发出的请求数量越多,与之相对的“Average Throughput (吞吐量)”也应该越大。图中可以看出,两种图形的曲线都正常并且几乎重合,说明服务器能及时的接受客户端的请求,并能够返回结果。 按照上述策略,我们得出的最终测试结果为: 生成派车单: 1个用户,300个托运单点击生成派车单,响应时间7.34秒 5个用户,900个托运单点击生成派车单,响应时间41.45秒 单据匹配: 单用户1000箱,20000个商品,上传匹配时间8秒 五个用户2500箱,40000个商品,同时上传匹配耗时2分25秒 自由派车: 单条线路917个托运单下载,响应时间1分40秒 上述结果是在公司内网,测试环境上进行的测试,可能与实际会有偏差

XX系统性能测试报告

XXXX系统性能测试报告

1 项目背景 为了了解XXXX系统的性能,特此对该网站进行了压力测试2 编写目的 描述该网站在大数据量的环境下,系统的执行效率和稳定性3 参考文档 4 参与测试人员 5 测试说明 5.1 测试对象 XXXX系统

5.2 测试环境结构图 5.3 软硬件环境 XXXXX 6 测试流程 1、搭建模拟用户真实运行环境 2、安装HP-LoadRunner11.00(以下简称LR) 3、使用LR中VuGen录制并调试测试脚本 4、对录制的脚本进行参数化 5、使用LR中Controller创建场景并执行 6、使用LR中Analysis组件分析测试结果 7、整理并分析测试结果,写测试总结报告 7 测试方法 使用HP公司的性能测试软件LoadRunner11.00,对本系统业务进行脚本录制,测试回放,逐步加压和跟踪记录。测试过程中,由LoadRunner的管理平台调用各前台测试,发起 各种组合业务请求,并跟踪记录服务器端的运行情况和返回给客户端的运行结果。录制登陆业务模块,并模拟30、50、80、100 个虚拟用户并发登陆、添加和提交操作,进行多次连续测试,完成测试目标。 测试评估及数据统计 此次测试通过同一台客户机模拟多个并发用户在因特网环境进行,未考虑因特网的稳定 性的问题。此次测试用户操作流程相对简单,只录制了三个事务,即:用户登录、添加和信息提交,从测试的数据来分析,各项性能指标基本在可控的范围之内。但在测试过程中也发 现一些不容忽视的问题,应予以重视。 1 、模拟80 个用户并发操作时,出现1 个未通过的事务,具体原因需结合程序、网络和服务器综合分析,系统的稳定性并非无可挑剔。 2 、用户登陆事务的平均响应时间与其他两个事务相比等待的时间要长,且波动也较大, 在网速变慢、用户数增加的外部条件下,有可能会影响到系统的稳定性。建议优化系统登录页面程序,提高系统的稳定性。

性能测试报告范例 - X项目AB系统性能测试报告

X项目AB系统性能测试报告 项目编号:XXXXXX-ACP101项目名称:X项目 编写:XXX编写日期: 审核:XX审核日期: 批准:批准日期:

1.前言 1.1.测试目标 本次性能测试的目的:通过测试获取与主机、后台流程平台交互过程中终端服务器处理性能及资源消耗情况。评估目前处理性能是否满足业务需求。 2.测试方法 压力测试采用自动化测试来实现,使用业界主流的压力测试工具LoadRunner8.1及其方法论完成对被测系统进行测试和结果分析。 压力测试工具LoadRunner通过使用虚拟用户模拟真实用户的操作,发起交易,完成对被测系统的加压,监控并记录被测系统的交易响应能力,各服务器的资源使用情况,获取交易响应时间、吞吐率等各项性能指标,并根据测试结果分析系统的性能瓶颈,评估系统的整体性能。 压力测试的测试方法主要包括:在被测系统中录制压力测试中使用的交易脚本,形成可以多次重复并发运行的测试脚本,由LoadRunner的控制台调度这些脚本,并发地执行交易,从而模拟真实生产系统的压力,形成对被测系统的加压,并监控和记录被测系统在这样的压力状况下表现出来的各项特征,例如:交易响应时间变化趋势、吞吐率变化趋势和系统资源(CPU)利用率的变化趋势等,获取被测系统在大压力情况下的各项性能指标。 2.1.测试准备 (1)开发测试交易,交易首先进行圈存,然后发任务给流程平台 (2)使用grinder交易执行过程作为测试交易的脚本 (3)使用下列测试数据(帐号)进行维护。测试时随机获取不同行所的账号进行测试。 压力测试账号

(4)准备一台台式机作为调试测试脚本、发起测试的客户端。配置:CPU intel core 2duo cpu(2.93GHz);2GB Memory;os windows xp sp3.IP为10.2.45.92(5)安装被测试交易到被测试的ABS终端服务器上。 2.2.被测试系统的系统配置 系统名称Ip地址os CPU Memory (GB) Network(M)应用程序参数 ABS10.2.39.13AIX5.3 64bit POWER5 2.3*2 41000Java:1.4.2(64 bit)SR9 mem:ms256; mx1536 Log:error Gateway10.2.39.14AIX5.3 64bit POWER5 2.3*2 41000Java:1.4.2(64 bit)SR9 mem:ms256; mx1280 Log:error 2.3.资源监控 本次压力测试监控的资源是操作系统AIX资源。 利用NMON软件对服务器系统的CPU%进行监控、并把这些数据作为为测试结果的一部分进行收集,便于进行事后分析。

交换机性能参数测试操作手册

交换机性能参数测试操作手册 文档编号: 版本:1.1 日期:2005-8-7

一、目的 为了便于以后用SMB来测试交换机的相关性能的操作,特地撰写了该测试操作手册,给大家提供参考。 二、测试范围 该手册可用于用SMB对二层、三层交换机的性能测试。性能具体分为rfc 2544提及的吞吐量(Throughput)、延迟(Latency)、丢包率(Packet Loss)、背靠背(Back-to-back)四个主要指标和rfc 2889涉及到的转发能力(Forwarding)、拥塞控制(Congestion Control)包括线头阻塞(HOLB)和背压(Backpressure)、地址深度(Address Caching)、地址学习(Address Learning)、错误帧处理能力(Error Filting)、广播转发能力(Broadcast forwarding)、广播延迟(Broadcast Latency)以及Forward Pressure 能力的八个性能指标。 Rfc2544性能指标是利用Smartbits Application软件来测试的,rfc2889涉及的性能指标是用AST软件来测试的。 下面将以自研产品S3448型交换机(48口)为例,分别对上面列的性能指标的测试进行操作说明。 三、性能测试 3.1 测试硬件设备 1. S3448交换机一台; 2. SMB6000B一台; 3. PC机一台,并安装Smartbits Application和AST软件。 4. 线缆若干。 3.2 软件设备 Smartbits Application软件; AST软件。

软件测试 测试用例实例(含:功能测试用例、性能测试用例、兼容性测试用例)

测试用例实例 (含:功能测试用例、性能测试用例、兼容性测试用例) 目录 一、功能测试用例................................................................................. - 2 - 二、性能测试......................................................................................... - 9 - 2.1预期性能测试用例.................................................................... - 9 - 2.2 用户并发测试用例................................................................. - 10 - 2.3 大数据量测试用例................................................................. - 10 - 2.4 疲劳强度测试用例................................................................. - 11 - 2.5 负载测试测试用例................................................................. - 11 - 三、兼容性测试................................................................................... - 11 - 用例编号TestCase_LinkWorks_WorkEvaluate 项目名称LinkWorks 模块名称WorkEvaluate模块 项目承担部门研发中心-质量管理部 用例作者 完成日期2005-5-27 本文档使用部门质量管理部 评审负责人 审核日期 批准日期 注:本文档由测试组提交,审核由测试组负责人签字,由项目负责人批准。 历史版本: 版本/状态作者参与者起止日期备注 V1.1

测试报告范例

文档级别:X级模板编号:TNET-QR-RD004 模板版本:V1.0 XXXX公司 系统名称V1.0 测试报告(功能+性能)

版本记录 状态:C-创建文档,A-增加内容,M-修改内容,D-删除内容

目录 引言 (4) 1.1编制目的 (4) 1.2词汇表 (4) 1.3背景 (4) 2 测试管理 (4) 2.1测试范围与主要内容 (4) 2.2测试方法 (4) 2.3测试环境与测试辅助工具 (5) 2.4测试准则 (5) 2.5测试接受准则 (5) 2.6 BUG的定义标准 (5) 2.7人员与任务表 (6) 2.8缺陷管理与改错计划 (7) 3 测试概要 (7) 3.1测试执行 (7) 3.2测试用例 (8) 3.2.1 功能性 (8) 3.2.2 易用性 (8) 4 测试结果 (8) 4.1B UG量表格统计 (8) 4.2柱形图统计 (9) 4.3B UG趋势图 (9) 4.4B UG引入阶段 (10) 4.5B UG状态分布 (10) 5 测试结论 (11) 5.1功能性 (11) 5.2易用性 (11) 5.3兼容性 (11) 6 附录. 本计划审批意见 (11)

引言 1.1编制目的 略 1.2词汇表 1.3背景 随着互联网的发展,人们对于网络依赖,XX系统的实现提供手机端的访问,及各功能在便捷设备上的使用,提供客户更快更优质的服务。 2测试管理 2.1测试范围与主要内容 略 2.2测试方法 黑盒测试: 1.系统测试 2.兼容性测试 3.性能测试 4.压力测试 5.容错性测试 6.升级测试 7.用户体验测试 8.UI测试 9.易用性测试 10.集成测试

性能测试计划模板(实例)

XXXX系统 性能测试方案 软件产品名称:XXXX 软件开发部门:XXXX 软件测试部门:XXXX 编写:XXX 日期:2008 年11 月8 日审核:XXX 日期:2008 年11 月10 日批准:日期:年月日

1.引言 1.1测试方案概述 方案名称:xxxx系统性能测试方案 测试部门:xxxxxxxx科技发展有限公司 1.2目的 本测试方案将对国美电器供应链系统的测试方法、测试工具、测试范围、测试的软件硬件环境、测试进度、测试人员的分工和职责以及测试流程进行详细的定义和整体的描述。 1.3系统概述 产品名称: xx供应链系统JL SCM 开发部门: xxxx有限公司 在企业的信息化建设中,北京国美电器有限公司将在全国范围内实施“金力供应链系统JL SCM”,该系统中采用了 Sybase 最新版本的企业智能型关系数据库产品Adaptive Server Enterprise 12.5 (ASE12.5)及复制服务器产品Sybase Replication Server,由武汉金力软件有限公司开发并协助实施。国美电器实施的“金力供应链系统JL SCM”,从现代企业理念、物流体系和全方位服务的角度,完全解决了企业的决策、计划、管理、核算、经营、物流、服务、人事及电子商务等问题。 2.术语和定义 性能测试:在一定约束条件下(指定的软件、硬件和网络环境等)确定系统

所能承受的最大负载压力的测试过程。 场景:一种文件,用于根据性能要求定义在每一个测试会话运行期间发生的事件。 虚拟用户:在场景中, LoadRunner 用虚拟用户代替实际用户。模拟实际用户的操作来使用应用程序。一个场景可以包含几十、几百甚至几千个虚拟用户。 虚拟用户脚本:用于描述虚拟用户在场景中执行的操作。 事务:表示要度量的最终用户业务流程。 3.测试流程 负载测试通常由五个阶段组成:计划、脚本创建、场景定义、场景执行和结果分析。 计划负载测试:定义性能测试要求,例如并发用户的数量、典型业务流程和所需响应时间。 创建虚拟用户脚本:将最终用户活动捕获到自动脚本中。 定义场景:使用 LoadRunner Controller 设置负载测试环境。 运行场景:通过 LoadRunner Controller 驱动、管理和监控负载测试。 分析结果:使用 LoadRunner Analysis 创建图和报告并评估性能。 4.测试目标与策略 4.1测试目标 1)确定系统能承载的最大容量; 2)定位系统性能瓶颈; 3)确定系统典型事务响应时间; 4)出具可信的独立的第三方的性能测试报告。

金蝶BOS性能测试分析分享

金蝶B O S性能测试分析 分享 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

金蝶BOS性能测试分析流程 目录 1.1. 简介 最近通过版本的4-5月份集成测试与云平台的性能测试两个案例分析,发现性能测试只定位发现问题的工作方式不利于问题的快速处理,进而错过问题的最佳处理时机,给后续的发版带来很高的风险,4-5月份的集成测试只反馈CPU高消耗的现象与WEB的jprofile分析文档,因开发人员过忙与缺少实际环境而把问题一直耽搁着,这个问题本来在6月1号就发现了,结果到了7月5号迫不得已才组织人员协同分析定位问题,问题定位后也快速解决了问题;而云平台的性能测试我一直跟踪并协助定位性能问题,问题定位后,开发迅速修改代码,整个过程发现的几个重大性能问题都得到了快速的解决,通过对比这两个性能测试案例,得出只有快速定位问题才能高效的解决问题,只反馈问题现象,缺乏足够的依据,开发人员很难快速修复问题。

为了在BOS性能测试过程中快速定位问题以及在调优测试中快速找到性能提升点,特意整理在分析性能问题过程中涉及到的一些工具与方法,以便快速解决问题,本文将从用例分析、问题现象、问题分析、问题定位、辅助工具等方面规范性能问题的分析过程以及工作过程中的输出文档。 1.2. 参考资料 2.1. 概述 处理任何问题都有一套方法,性能测试分析过程也一样,我们平常测试发现的问题只是问题的表现,我们要透过现象逐步分析到问题的本质,透过本质我们才能快速解决问题,下面我就按经验来整理一下性能问题的分析思路与通用流程。 2.2. 分析思路 我们通过一个倒金字塔模型来整理一个分析思路,由上至下逐步聚焦问题,测试过程中首先是会发现问题,发现性能问题后,我们第一步要确认是否是测试用例设计不当而导致的,如果不是我们就要用后续提到的各种工具与方法出具问题分析结果,根据分析数据推断出可能存在的代码可疑点,然后与开发一起如果修改问题。 2.3. 步骤结果输出 2.4. 分析流程 下图整理一个在性能测试过程中发现性能问题而进行问题定位的分析流程,本流程里不涉及到硬件绝对瓶颈的问题,如磁盘空间不足,另外应用服务器跟数据库服务器的参数都按照产品配置说明进行了正确配置,本流程图只用来指导分析软件本身存在的问题。

整机可靠性测试手册

"

目录 》 1简介 (4) 2.整机测试项目 (5) .电性能测试 (5) ESD测试 (5) 环境测试 (5) 寿命测试 (4) 机械强度测试 (4) 3.整机测试标准 (6) 3.1电性能测试标准 (6) 《 3.2 ESD静电测试标准 (5) 3.3 环境测试标准 (7) 3.4 寿命测试标准 (8) 3.5 机械强度测试标准 (9)

1 简介 1.1目的 为了规范世融通公司产品测试的各项工作,使公司产品研发、品质管理按照共同的测试项目和测试标准进行测试,以使项目各阶段品质保证能达到手机的测试要求,特制定本测试手册。 1.2】 1.3适用范围 本手册适用于本公司所有项目的整机测试。 1.4责任 公司产品研发、品质保证都需按本测试手册进行相关测试,对问题进行分析,确定责任部门,由责任部门提出改善对策。 2 整机测试项目 电性能测试 按照产品检验规范和行业相关标准,测试手机的各项重要电性能指标; ESD测试 测试手机在静电环境中的性能; : 环境测试 模拟公司各产品使用的各种恶劣环境,测试其性能是否达到要求;主要包括高/低温试验、湿热试验、防尘试验等。 寿命测试 测试产品各易损部件的工作寿命是否达到规格要求;主要包括读卡器,打印机,制票机等产品试验。

机械强度测试 测试括读卡器,打印机,制票机等机械结构的强度;主要包含振动测试、跌落测试等。 3.整机测试标准 电性能测试标准 依照公司规范、行业相关标准,测试公司产品的电性能。 ) 参考标准: 1.公司的产品行业环境要求和试验方法。 2.公司产品根据公司可靠测试设备测试。 3.根据公司可靠性设备进行安全要求和产品验证进行试验 ESD静电测试标准 产品在接充电器和不接充电器的情况下,分别测试产品在常用使用状态下的ESD性能,待机和运行状态是必须要测试的状态。 接触放电为±6KV,对裸露的金属件续放电各10次后对地放电,应无数据丢失和功能损坏等;接触放电每点每个测试电压连续放电10次(加严测试±20次); 空气放电±10KV,主机底壳等处进行放电,被选点每点每个测试电压放电10次(加严测试±20次),每放电一次需对地放电,状况应良好,应无数据丢失和功能损坏。 注:测试后功能恢复正常,及外观检查应良好(电镀层不应有掉镀层等不良现象)。 完成后作好记录。所需手机数为2部。 ; 参考标准: 行业可靠性技术要求和测试方法 ESD实验室环境要求: 环境温度:+15~+35℃ 相对湿度:ESD实验室湿度应严格控制到30%~60%RH 大气压力:86~106kPa

性能测试案例分析

1.简要场景描述: 被测项目的数据库服务采用ORACLE 10g,测试功能点选择的是一个新建录入保存业务。当并发20用户时,数据库资源占用正常,处理业务响应时间正常,当并发40用户时,数据库服务器CPU占用率突增到100%,系统几乎不响应。 2.对ORACLE 10g进行监控: 2.1首先打开监控开关: exec dbms_monitor.serv_mod_act_trace_enable (service_name=>''); 在oracle安装目录\product\10.2.0\admin\gsp\udump目录下每个session形成.trc文件。 2.2通过tkprof进行分析: 根据日期选择相应的.trc文件,在命令行下通过tkprof进行分析: tkprof servname_ora_2336.trc utput=servname_ora_2336.txt SORT=(EXEELA, PRSELA, FCHELA) 形成结果文件servname_ora_2336.txt。 2.3查看分析结果文件: 发现存在大量的建临时表语句,耗用了大量的CPU资源,而且花费的时间很长。 create table myHelp4879f036d (Rowp int PRIMARY KEY,OID varchar(1000),Code varchar(1000),Name varchar(1026),ZJM varchar(100),Path varchar(40)) call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 0 0.00 0.00 0 0 0 0 Execute 1 19.06 196.34 24 751455 1552 0 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 1 19.06 196.34 24 751455 1552 0

Android性能测试报告

性能测试报告 ―――――――――――――――――――― 宜通关研发部 云路网络科技有限公司

目录 1. 测试目的 (3) 2. 测试地点 (3) 3. 测试环境 (3) 3.1.客户端环境 (3) 3.2.测试工具 (3) 3.3. M ONKEY的特征 (3) 4. 测试过程说明 (4) 4.1.测试案例 (4) 5. 测试结果 (5) 6. 性能测试总结 (6)

1.测试目的 本报告是针对在Android客户端的稳定性,CPU使用率,UI的渲染时间以及发生的未知的错误,发现现有系统中可能存在的性能方面问题,提出可行性建议,以尽可能降低后续工作风险,为运用的稳定运行提供保证。 主要测试目标如下: 1、获得是否无响应问题,崩溃问题,内存泄露问题,异常问题(包含空指针, NullPointerException)。 2、获得APP在不同负载下的资源消耗情况,为硬件配置提供依据。 1.测试地点 公司。 2.测试环境 2.1.客户端环境 本次测试使用的设备清单如下: 设备名称设备型号操作系统网络内存CPU 测试次数魅族魅蓝3s 5.1 3G 16G 2G 100000 OPPO R7 Plus 5.0 WiFi 32G 3G 10000 2.2.测试工具 测试项目测试工具 性能测试工具monkey 2.3. Monkey的特征 1、测试的对象仅为应用程序包,有一定的局限性。 2、 Monky测试使用的事件流数据流是随机的,不能进行自定义。 3、可对Test的对象,事件数量,类型,频率等进行设置。

3.测试过程说明 3.1.测试案例 下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送10000个伪随机事件: monkey -p com.winlu.etg --ignore-crashes -s 100 --throttle 100 -v -v -v 100000 >D:\monkeylog.txt & com.winlu.etg (包名) -ignore-crashes 忽略崩溃,继续测试,若不做此限制,monkey测试出现崩溃时会自动停止测试 --throttle延时1000=1秒 -v -v -v 100000随机点击次数 -s 100为随机数的事件序列定一个值,若出现问题下次可以重复同样的系列进行排错 >D:\monkeylog.txt把monkey日志打出到设备储存,当测试发现出现错误时,就应该重新执行测试,把日志打出观看 & 即使把数据线从电脑上拔开,monkey测试依然会在设备上进行 举例: Android SDK 连接真机设备,Window打开CMD,命令行输入:adb shell,进入shell界面后:

性能测试方案

web项目性能测试方案 任务: 测试JBOSS环境下UBSS项目的性能 目标:测试缴费部分(前台缴费,IC卡充值)在并发数从50-100递增的性能指标,不要求对结果进行分析 步骤: 1.搭建测试环境,要求与真实环境大概一致(关注在现有license情况下,UBSS系统支持的最大并发数) 2.准备数据脚本(SQL和存储过程) 3.准备测试脚本(Vuser scrīpts,scenario) 4.进行性能测试 测试范围 针对UBSS项目,抽取对系统影响最大、最为典型的业务交易,构建场景,以此评判系统的整体性能和实际性能表现 a.用户前台缴费 b.标准用户IC卡充值 测试内容 1.基准测试 概念:检查每个业务的基准响应时间(系统整体空闲,无额外进程运行并占用系统资源)方法:单用户运行业务多次,获取该业务的平均响应时间 序号功能名称并发用户数循环次数操作间隔循环间隔 1-1 前台缴费 1 100 3 3 1-2 IC卡充值 1 100 3 3 2.单个交易负载测试 概念:设定负载序列,并发用户数为X{20,30,50,....},收集系统单个交易在不同负载级别的性能表现 方法:设置并发用户数等于X,关键步骤处设置并发点,每个用户运行N个iteration,获取平均响应时间和吞吐量 用户登陆方式:每2秒登陆2个 序号功能名称并发用户数循环次数操作间隔循环间隔 2-1 前台缴费 5 50 3 3 2-2 前台缴费10 50 3 3 2-3 前台缴费15 50 3 3 注:响应时间超过30S 2-4 前台缴费20 50 3 3 注:阻塞,不进行测试 2-5 IC卡充值 5 50 3 3 2-6 IC卡充值10 50 3 3 2-7 IC卡充值15 50 3 3 2-8 IC卡充值20 50 3 3 3.组合交易负载测试 概念:多个交易组合在一起,设定负载序列,并发数为X{20,30,50,....},收集系统在不同负载级别的性能表现 方法:设置并发总数,各用户数按比例分配,每个用户运行N分钟,获取平均响应时间和吞吐量 序号功能名称并发用户总数比例持续时间操作间隔循环间隔

app测试指导手册

APP测试指导手册 编写目的 本手册编写旨在帮助刚刚入手的移动端测试人员了解移动端项目,并且了解刚刚接触一个移动端的项目如何入手,有哪些问题需要明确,有哪些问题需要注意,欢迎补充 移动端产品(项目)介绍 移动端产品(项目)展现在眼前的就是一个实际的app应用,支撑这个app应用的是它的后台。后台一般有两种,一种是实际部署的后台管理系统,管理系统的基本信息和业务信息,前台仅仅做展示,查看用,如通讯录APP,掌上直播点播;另一种是后台部署的系统和前台有数据交互的,一般这种系统分为pc展现端和APP展现端,pc端和APP端的展现端存在数据交互,有共同的后台管理系统支撑这两个前台应用,如人大APP,一乡一法庭。 1功能测试 1.1安装 目前公司的app基本是机遇两大移动操作系统android和ios开发的,android开发的app 安装文件后缀为apk,ios开发的app安装后缀名是ipa App客户端程序的安装方式主要有如下几种: 1、手机端浏览器输入下载地址 2、通过二维码扫描(需要单独维护二维码信息,一般二维码是封装了下载地址,所以 如果系统提供了此功能,在实施文档中必须说明二维码如何生成如何维护) 3、Android平台,通过Usb连接电脑方式安装 4、App store下载安装(正式发布,目前接触的项目没有正式发布的。如果接触的项目 需要在APP store上发布,需要在发布时间前预留出时间,因为提交申请到APP store 后审核比较严格,需要的时间较长,具体时间需要提前确认) 目前公司开发了一个APP推送平台,测试过程中可以让开发把apk放在推送平台上,测试人员通过这个平台取包,同时在test上进行备份,这样方便开发和测试的交互 需求分析时需要确认系统支持哪几种安装方式,是否符合项目的要求 测试重点(围) 1、安卓主要是测试移动端不同版本的操作系统是否能正常安装。Android及IOS不同

软件测试用例实例(非常详细)汇总

软件测试用例实例(非常详细)汇总

1、兼容性测试 在大多数生产环境中,客户机工作站、网络连接和数据库服务器的具体硬件规格会有所不同。客户机工作站可能会安装不同的软件例如,应用程序、驱动程序等而且在任何时候,都可能运行许多不同的软件组合,从而占用不同的资源。 测试 目的 配置说明操作系 统 系统 软件 外设应用软件结果 服务器Windo w2000( S) Windo wXp Windo w2000( P) Windo w2003 用例编号TestCase_LinkWorks_W orkEvaluate 项目名称LinkWorks

1.1.

1.2. 疲劳强度测试用例 强度测试也是性能测试是的一种,实施和执行此类测试的目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。测试目的 测试说明 前提条件连续运行8小时,设置添加 10用户并发 测试需求输入/ 动作 输出/响应是否正常运行 功能1 2小时 4小时 6小时 8小时功能1 2小时 4小时 6小时

8小时 一、功能测试用例 此功能测试用例对测试对象的功能测试应侧重于所有可直接追踪到用例或业务功能和业务规则的测试需求。这种测试的目标是核实数据的接受、处理和检索是否正确,以及业务规则的实施是否恰当。主要测试技术方法为用户通过GUI (图形用户界面)与应用程序交互,对交互的输出或接受进行分析,以此来核实需求功能与实现功能是否一致。 用例标识LinkWorks_ WorkEvaluate _02 项目 名称 https://www.360docs.net/doc/2c12920234.html, 开发人员模块 名称 WorkEvaluate 用例参考工作考核系统界面设计

相关文档
最新文档