Mycat之日志分析跨分片事务以及存储过程的执行过程

1 针对成功事务:

过程说明:

  1.初始化连接,路由到各个分片
  2.开启非阻塞执行更新,然后执行时候每个节点执行2次
  3.执行提交,各节点返回commit
  4.释放连接,先释放datasource然后才说非阻塞连接

执行代码*

 #开启事务更新(全表更新)
mysql> select * from travelrecord;
+----------+-----------+------------+------+------+
| id       | user_id   | traveldate | fee  | days |
+----------+-----------+------------+------+------+
|     1000 | chinesern | 2017-10-11 |  100 |   10 |
| 11000000 | chinesern | 2017-10-11 |  100 |   10 |
|  5100000 | chinesern | 2017-10-11 |  100 |   10 |
+----------+-----------+------------+------+------+
3 rows in set (0.03 sec)

mysql> begin ;
Query OK, 0 rows affected (0.01 sec)

mysql> update travelrecord set user_id='fish';
Query OK, 3 rows affected (0.11 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> commit;
Query OK, 0 rows affected (0.03 sec) 

分析mycat日志

5980929.jpg

58612445.jpg

86308549.jpg

25788968.jpg

41070396.jpg

2 针对失败事务:

情景描述:
1.一个节点开启事务SQL执行,不提交
2. mycat 开启一个事务模拟阻塞,超时后,冲突 手动回滚,并查看mycat日志

rollback过程:
1.获取连接
2.各个节点执行回滚,释放非阻塞连接,最后物理连接。

执行代码*
#在db1执行事务不提交.
[root@localhost bin]# mysql -h 192.168.2.130 -P3306 -u root -proot123
mysql> use db1;
mysql> begin;
mysql>delete from travelrecord where id =1000;

#在mycat里面执行更新,模拟失败
[root@localhost conf]# mysql -h 192.168.2.130 -P8066 -utest -ptest
mysql> begin;
mysql> update travelrecord set user_id='fail';
ERROR 1105 (HY000): Lock wait timeout exceeded; try restarting transaction
mysql> rollback;

分析mycat日志
4202951.jpg

83233210.jpg

45390459.jpg

11036727.jpg

5707465.jpg

87399738.jpg

3516627.jpg

3 创建存储过程
#MYCAT上执行报错
mysql> DELIMITER $$
mysql> CREATE PROCEDURE `proc_count`()
    -> BEGIN
    -> select count(*) from travelrecord;
    -> END$$
ERROR 1064 (HY000): op table not in schema----PROCEDURE

#在各节点上创建存储
mysql> use db1
mysql> DELIMITER $$
mysql> create procedure proc_select() begin declare i int; select count(*) into i from travelrecord;select i;end$
mysql> use db2
mysql> create procedure proc_select() begin declare i int; select count(*) into i from travelrecord;select i;end$
mysql> use db3
mysql> create procedure proc_select() begin declare i int; select count(*) into i from travelrecord;select i;end$ 
4 MYCAT上调用pror_select ,路由到特定节点上。**

查询语句

mysql> /*!mycat:sql=select * from travelrecord where ID=1000*/ call proc_select();
+------+
| i    |
+------+
|    1 |
+------+
1 row in set (0.03 sec)

分析mycat日志
22403341.jpg

5 MYCAT上调用proc_select 路由到所有节点

查询语句

mysql> /*!mycat:sql=select * from travelrecord where ID=1000*/ call proc_select();
+------+
| i    |
+------+
|    1 |
+------+
1 row in set (0.03 sec)

分析MYCAT日志,可以看到 路由到了三个节点上,但是没有merge,而是分别查询出来了!
17296054.jpg

转载于:https://www.cnblogs.com/chinesern/p/7840257.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值