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,而是分别查询出来了!

Mycat之日志分析跨分片事务以及存储过程的执行过程的更多相关文章

  1. [转]数据库中间件 MyCAT源码分析——跨库两表Join

    1. 概述 2. 主流程 3. ShareJoin 3.1 JoinParser 3.2 ShareJoin.processSQL(...) 3.3 BatchSQLJob 3.4 ShareDBJo ...

  2. Mycat之日志分析 select * from travelrecord order by id limit 100000,100 的执行过程

    解释:mycat在执行分页排序的时候,分成2步走.如果M很大,会改写成 limit 0,m+n, 然后在每个MYSQL分片上排序后还需要在mycat汇总输出,所以会很慢.下面是详细执行计划以及日志输出 ...

  3. 源码分析之struts1自定义方法的使用与执行过程

    最近有人问我,你做项目中用户的一个请求是怎么与struts1交互的,我说请求的url中包含了action的名字和方法名,这样就可以找到相应方法,执行并返回给用户了. 他又问,那struts1中有什么方 ...

  4. Mycat跨分片Join

    1 前言 Mycat目前版本支持跨分片的join,主要实现的方式有四种. 全局表 ER分片 HBT(参考MyCAT人工智能解决跨分片SQL.docx) ShareJoin ShareJoin在开发版中 ...

  5. MyBatis 源码分析 - SQL 的执行过程

    * 本文速览 本篇文章较为详细的介绍了 MyBatis 执行 SQL 的过程.该过程本身比较复杂,牵涉到的技术点比较多.包括但不限于 Mapper 接口代理类的生成.接口方法的解析.SQL 语句的解析 ...

  6. MyCAT日志分析

    MyCAT日志对于了解MyCAT的运行信息不可获取,譬如MyCAT是否采用读写分离,对于一个查询语句,MyCAT是怎样执行的,每个分片会分发到哪个节点上等等. 默认是info级别,通过log4j.xm ...

  7. Dubbo学习系列之十六(ELK海量日志分析框架)

    外卖公司如何匹配骑手和订单?淘宝如何进行商品推荐?或者读者兴趣匹配?还有海量数据存储搜索.实时日志分析.应用程序监控等场景,Elasticsearch或许可以提供一些思路,作为业界最具影响力的海量搜索 ...

  8. 分库分表后跨分片查询与Elastic Search

    携程酒店订单Elastic Search实战:http://www.lvesu.com/blog/main/cms-610.html 为什么分库分表后不建议跨分片查询:https://www.jian ...

  9. ELK+Kafka集群日志分析系统

    ELK+Kafka集群分析系统部署 因为是自己本地写好的word文档复制进来的.格式有些出入还望体谅.如有错误请回复.谢谢! 一. 系统介绍 2 二. 版本说明 3 三. 服务部署 3 1) JDK部 ...

随机推荐

  1. 内存保护机制及绕过方案——通过覆盖SEH异常处理函数绕过/GS机制

    通过SEH链绕过GS保护机制 ⑴.  原理分析: i.异常处理结构(SEH)处理流程如下: SEH是基于线程的,每一个线程都有一个独立的SEH处理结果,在线程信息块中的第一个结构指向线程的异常列表,F ...

  2. LeetCode OJ:Merge Two Sorted Lists(合并两个链表)

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  3. UI-自定义TabBar

    MyCustomTabBar.h文件 #import <UIKit/UIKit.h> @interface MyCustomTabBar : UITabBarController @end ...

  4. 通过TortoiseSVN checkout的文件前面没有“状态标识”

    问题描述:安装完成VisualSVN Server.VisualSVn和TortoiseSVN后,然后通过SVN Server新建Repository(仓库),用Visual Studio新建一个So ...

  5. 使用第三方图表工具——Chart.js

    效果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  6. asp.net mvc获得请求体所有内容

    代码如下 Stream req = Request.InputStream; req.Seek(0, System.IO.SeekOrigin.Begin); string json = new St ...

  7. 前端之jQuery03 插件

    jQuery.fn.extend(object) 扩展 jQuery 元素集来提供新的方法(通常用来制作插件) 增加两个插件方法: // jQuery 扩展机制 // 自己扩展两个方法 // 把我这个 ...

  8. shell 中并发执行

    http://bbs.51cto.com/thread-1104907-1-1.html http://www.51testing.com/html/28/116228-238978.html htt ...

  9. PS基础教程[7]如何为照片瘦身

    有没有对自己的身材有所抱怨,有没有想过让自己的照片便得苗条一些,其实只有你想不到的,没有我们做不到的,PS中可以很简单的将我们的身体进行美化瘦身,本次经验我们就来学习一下简单的操作. 方法 1.打卡P ...

  10. Java实现7种常见的排序算法

    数据结构中的内部排序:不需要访问外存便能完成,是一个逐步扩大记录的有序序列长度的过程. 可以分为5类: 1.插入排序:直接插入排序,稳定排序,时间复杂度为O(n^2)非递减有序,设置r[0]为哨兵进行 ...