MyCAT日志分析

MyCAT日志对了解MyCAT的运转信息不可得,譬如MyCAT是否采用读写分离,对于一个查询语句,MyCAT是什么样执行之,每个分片会散发到谁节点上等等。

默认是info级别,通过log4j.xml可将该安装debug级别,这样尽管不过得到更多关于MyCAT运行的内部信息。

下面通过对MyCAT的启航暨履行一个查询语句来分析MyCAT的运行流程。

 

Here We Go!

Mycat的启动日志输入如下:

图片 1

processors指的凡CPU的核数,aio thread pool
size指的凡AIO线程池,为CPU核数的片加倍

-sysconfig params:指的凡mycat的启航参数,可每当server.xml中修改。

内idleTimeout=1800000因的凡外部应用及mycat最可怜空闲连接时长为30min,超过30min,则外部应用及mycat的连日将给断开。

      dataNodeHeartbeatPeriod=10000 节点心跳检测的效率也10s一潮。

9066凡是MyCAT的管制端口

8066是MyCAT的默认端口,类似于MySQL的3306端口。

 

接通下去初始化MyCAT连接池,默认最小也10只连

可通过schema.xml中dataHost处定义

-init backend myqsl source ,create connections total 10 for hostM1 index
:0:初始化后端MySQL连接,master节点是hostM1,可因conf目录下dnindex.properties文件指定。

重复下的输出信息就是是创造连接,释放channel。

图片 2

 

创造了后,会输出如下信,代表连接创建了

图片 3

 

推行心跳检测,所以要建新的连续,因为我安排的是均等兆片自,所以需要判断localhost,192.168.244.144和192.168.244.146底心灵跳,localhost已启动10只连,所以无欲创造新的连年,但hostS1(即192.168.244.146)和hostS2(即192.168.244.144)需要。

threadID对应之是MySQL中之长河ID

图片 4

 

搭下是前者连接至MyCAT的输出信息,可以望,连接受MyCAT后,会尽show
database,show tables,select @@version_comment limit
1命令。个人感觉这是吗连续之路由分析缓存数据库及表信息。

图片 5

 

紧接下执行一下select * from
travelrecord,查看MyCAT的其中贯彻逻辑

率先会咬定该SQL语句的路由信息(根据下面的出口,MyCAT内部应该用了一个map集合来存储SQL语句之路由信息),如果无,则会首先生成路由信息。

路由的重要性意图是用以确定SQL语句之行路径,包括查询的多寡在怎样分片上。

-SQLRouteCache  miss cache:没有路由信息

-SQLRouteCache add cache:生成路由信息

-execute mutinode query select * from
travelrecord:确认该查询会跨多只分片

-has data merge logic:会设有数量的汇合

图片 6

 

下面就是足以确认实际于哪个节点去念了

为自己安排的凡平预告片打,且balance=”1″,全部之readHost与stand by
writeHost参与select语句之载重均衡,所以hostS1(192.168.244.146)和hostS2(192.168.244.144)均参与select语句之负载均衡。

于履select语句之前,需一并连续,为什么要一并连续为?

MyCAT为了迅速之施用后端的MySQL连接,采用了依据MySQL实例的连接池模式。

每当Mycat的连接池里,当前可用之MySQL连接是放开一个HashMap的数据结构里,Key为当前连续对应之Database,另外还发二级分类,即按连接是电动提交还是手动提交模式进行分,这个计划是为快速之询问匹配的可用连接,具体逻辑如下:

当有用户会话需要一个电动提交的,到分片dn1(对应db1)的SQL连接的时刻,连接池首先找是否发db1臻之可用连接,如果生,看是不是发生全自动提交模式之连,找到就回来,否则回db1及的手动提交模式之连日,若没db1的可用连接,则随机回一个旁db对应之可用连接,若无可用连接,并且连接池还没达到上限,则创造一个初连并返,这个逻辑过程,我们见面意识,用户会话得到的连可能不是他原想如果的,比如Database不对应,或者业务模式不配合,因此在履实际的SQL之前,还有一个机动同步数据库连接的历程,包括工作隔离级别、事务模式、字符集、Database等四只指标,同步完成之后,才见面履实际的SQL指令。

在执行select * from
travelrecord语词时,因为见面涉及到3个分片,故MyCAT选择了三单read
source进行查询,其中,两只以hostS2达标,一个以hostS1高达。对于hostS2的少个连,其中一个晤复用MyCAT之前对hostS2实行心跳检测的连天,另一个消创建。

对此hostS2复用之前的总是,因为前面实施心跳检测的当儿即便利用的db1,所以这次schema
change为false,不用修改。

要是对此hostS1复用之前的连天,因为事先使用的凡db1,这次是db3,所以schema
change为true,需修改。

图片 7

 

对此每一个同的总是,需以连接同步后才起来施行查询。

一起发5个received ok response,其中2单针对许达到图被之total syn cmd 2
commands,另外3只照应于上图备受的total syn cmd 3
commands,根据host也克生轻易之应和起来。

图片 8

 

下面开始实施顺序,

第一独革命方框针对的是192.168.244.146遭遇dn3分片上,因为自己满select *
from travelrecord输出只有区区实践,

mysql> select * from travelrecord;
+---------+---------------+------------+------+------+
| id      | user_id       | traveldate | fee  | days |
+---------+---------------+------------+------+------+
|       1 | mysql-server2 | 2016-01-01 |  100 |   10 |
| 5000001 | mysql-server3 | 2016-01-02 |  100 |   10 |
+---------+---------------+------------+------+------+
2 rows in set (0.04 sec)

一味跳片独分片,dn1和dn2,所以dn3的询问没有结果输出,直接出狱connection和channel。

蓝色方框和第二个红色方框的内容是关于192.168.244.144遭dn1的,有结果输出。

-field metadata inf: DataMergeService先合并了出口列的信息。

 -on row end reseponse:代表dn1的结果的输出。

图片 9

 

下是dn2分片的输出,因为dn2分片是刚新建的连续,所以一律用一起,收到两差received
ok response后,返回结果,然后放connection和channel。

末尾是DataMergeService合并有返回的结果。

last packet
id预计是MyCAT将结果上报给前段程序。

迄今,一个查询语句的日记分析了~

图片 10

 

总结:

  1. 实际齐连续的当儿,并无自然会发received ok
    response信息,譬如我以尽SELECT * FROM travelrecord WHERE id =
    1语句时,

每当履行一起连续后,就直出狱了connection和channel,并不曾生出received ok
response信息,也无生on row end reseponse。

总的来说,这个只能通过源码才能够领悟个中原因。

图片 11

2.
平时分析MyCAT日志,一般会采用tailf命令,但反复之心弦跳检测信息并且实在是只干扰,可经过 tailf
mycat.log |grep -Ev “Timer|release channel”过滤掉一部分信。

3. received ok response并无一味是本着连续同步的,在推行drop
table操作时为会见起。

图片 12

用,received ok response应该是实施结果的一个举报。

网站地图xml地图