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日志

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日志

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日志

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,而是分別查詢出來了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM