mysql profiling sending data_MySQL:关于RR模式下insert..select sending data状态说明

原标题:MySQL:关于RR模式下insert..select sending data状态说明

作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列的作者。

系列链接:https://www.jianshu.com/nb/43148932

一、案例由来

最近看到有人在问如下:

其中的sending data是什么意思。隔离级别为RR,语句为insert..select。

二、关于sending data

以前就说过这个问题,实际上sending data可能包含如下:

Innodb 层数据的定位返回给MySQL 层

Innodb 层数据的查询返回给MySQL 层

Innodb 层数据的修改(如果是insert..select)

Innodb 层加锁以及等待

等待进入Innodb层(innodb_thread_concurrency参数)

MySQL 层发送数据给客户端三、RR模式下对于insert..selcet 处于 sending data的原因总结

RR模式下insert..select的select表会上S行锁,如果这行处于X锁则会出现 sending data状态

insert..selcet中insert记录如果处于堵塞(唯一性检查)状态会处于 sending data状态

整个过程如果需要操作的数据量较大,处于sending data状态。四、每行数据处理方式

929

T@

4

:

|

|

|

|

|

|

THD

:

:enter_stage

:

'Sending data'

/cdh

/mysqldebug

/percona

-server

-

5.7

.29

-

32

/sql

/sql_executor

.cc

:

202

930T@ 4:||||||>PROFILING::status_change

931T@ 4:||||||<:status_change>

932T@ 4:||||||info :Sendingdata

933T@ 4:||||||>do_select

934T@ 4:|||||||>sub_select

935T@ 4:||||||||>init_read_record

936T@ 4:|||||||||info :using rr_sequential

937T@ 4:|||||||||>ha_rnd_init

938T@ 4:||||||||||>change_active_index

939T@ 4:|||||||||||>innobase_get_index

940T@ 4:|||||||||||

941T@ 4:||||||||||

942T@ 4:|||||||||

943T@ 4:|||||||||>innobase_trx_init

944T@ 4:|||||||||

945T@ 4:||||||||

946T@ 4:||||||||>handler ::ha_rnd_next

947T@ 4:|||||||||>rnd_next

948T@ 4:||||||||||>index_first

949T@ 4:|||||||||||>index_read

950T@ 4:||||||||||||>row_search_mvcc

951T@ 4:|||||||||||||>row_sel_store_mysql_rec

952T@ 4:||||||||||||||>row_sel_store_mysql_field_func

953T@ 4:||||||||||||||

954T@ 4:||||||||||||||>row_sel_store_mysql_field_func

955T@ 4:||||||||||||||

956T@ 4:|||||||||||||

957T@ 4:||||||||||||

958T@ 4:|||||||||||

959T@ 4:||||||||||

960T@ 4:|||||||||

961T@ 4:||||||||

962T@ 4:||||||||>evaluate_join_record

963T@ 4:|||||||||enter :join :0x7ffef8019970join_tab index :0table :testlock cond :0x0

964T@ 4:|||||||||counts :evaluate_join_record join ->examined_rows ++:1

965T@ 4:|||||||||>end_send

966T@ 4:||||||||||>Query_result_insert::send_data

967T@ 4:|||||||||||>fill_record

968T@ 4:||||||||||||>Item_field::save_in_field_inner

969T@ 4:||||||||||||<:save_in_field_inner>

970T@ 4:||||||||||||>Item_field::save_in_field_inner

971T@ 4:||||||||||||<:save_in_field_inner>

972T@ 4:|||||||||||

973T@ 4:|||||||||||>write_record

974T@ 4:||||||||||||>init_alloc_root

975T@ 4:|||||||||||||enter :root :0x7fffe8e48c20

976T@ 4:||||||||||||

977T@ 4:||||||||||||>COPY_INFO::set_function_defaults

978T@ 4:||||||||||||<:set_function_defaults>

979T@ 4:||||||||||||>handler ::ha_write_row

980T@ 4:|||||||||||||>ha_innobase ::write_row

981T@ 4:||||||||||||||>row_ins

982T@ 4:|||||||||||||||row_ins :table :test /testbb

983T@ 4:|||||||||||||||>row_ins_index_entry_step

984T@ 4:||||||||||||||||>row_ins_clust_index_entry

985T@ 4:|||||||||||||||||>row_ins_clust_index_entry_low

986T@ 4:||||||||||||||||||>btr_cur_search_to_nth_level

987T@ 4:||||||||||||||||||

988T@ 4:||||||||||||||||||>thd_report_row_lock_wait

989T@ 4:||||||||||||||||||

990T@ 4:|||||||||||||||||

991T@ 4:||||||||||||||||

992T@ 4:|||||||||||||||

993T@ 4:||||||||||||||

994T@ 4:||||||||||||||>thd_mark_transaction_to_rollback

995T@ 4:||||||||||||||

996T@ 4:|||||||||||||

997T@ 4:||||||||||||

及RR模式下insert select的逻辑大概为查询一行加锁(RC下没有加锁步骤)一行插入一行,直到所有行处理完成。整个过程处于'Sending data'状态下面。因此insert select和普通的insert操作有较大的区别。

关于sending data扩展阅读,参考我的一篇文章:返回搜狐,查看更多

责任编辑:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值