5.6,5.7,8.0: ============ binlog_format='ROW' ################### | | | | | | >mark_columns_per_binlog_row_image | | | | | | | >column_bitmaps_signal | | | | | | | | info: read_set: 0x7f85ac013a98 write_set: 0x7f85ac013ab8 | | | | | | | handler::ha_rnd_next | | | | | | | >rnd_next | | | | | | | | >general_fetch | | | | | | | | | >row_search_mvcc | | | | | | | | | handler::ha_rnd_end | | | | | | index_end | | | | | | | >DsMrr_impl::dsmrr_close | | | | | | | clear_error | | | | | | THD::binlog_query | | | | | | | enter: qtype: ROW  query: 'update t1 set name='003' where id=6' (gdb) bt #0 TABLE::mark_columns_per_binlog_row_image (this=0x7f5a28028720, thd=0x7f5a28000fd0) at /home/ec2-user/mysql-server/sql/table.cc:5751 #1 0x0000000002e40e8e in Sql_cmd_update::update_single_table (this=0x7f5a2802d820, thd=0x7f5a28000fd0) at /home/ec2-user/mysql-server/sql/sql_update.cc:551 #2 0x0000000002e44892 in Sql_cmd_update::execute_inner (this=0x7f5a2802d820, thd=0x7f5a28000fd0) at /home/ec2-user/mysql-server/sql/sql_update.cc:1596 #3 0x0000000002d9ba7b in Sql_cmd_dml::execute (this=0x7f5a2802d820, thd=0x7f5a28000fd0) at /home/ec2-user/mysql-server/sql/sql_select.cc:700 #4 0x0000000002d35cd2 in mysql_execute_command (thd=0x7f5a28000fd0, first_level=true) at /home/ec2-user/mysql-server/sql/sql_parse.cc:3433 #5 0x0000000002d3b93a in mysql_parse (thd=0x7f5a28000fd0, parser_state=0x7f5ac816eb00) at /home/ec2-user/mysql-server/sql/sql_parse.cc:5221 #6 0x0000000002d30ef1 in dispatch_command (thd=0x7f5a28000fd0, com_data=0x7f5ac816fbb0, command=COM_QUERY) at /home/ec2-user/mysql-server/sql/sql_parse.cc:1755 #7 0x0000000002d2f474 in do_command (thd=0x7f5a28000fd0) at /home/ec2-user/mysql-server/sql/sql_parse.cc:1270 #8 0x0000000002ee9ba7 in handle_connection (arg=0x7a020b0) at /home/ec2-user/mysql-server/sql/conn_handler/connection_handler_per_thread.cc:302 #9 0x00000000048db644 in pfs_spawn_thread (arg=0x7baf5a0) at /home/ec2-user/mysql-server/storage/perfschema/pfs.cc:2854 #10 0x00007f5af75b654b in start_thread (arg=0x7f5ac8170700) at pthread_create.c:465 #11 0x00007f5af5cf12ff in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95 (gdb) n 5752 DBUG_ASSERT(read_set->bitmap); (gdb) n 5753 DBUG_ASSERT(write_set->bitmap); (gdb) n 5759 if ((mysql_bin_log.is_open() && in_use && (gdb) n 5760 in_use->is_current_stmt_binlog_format_row() && (gdb) n 5759 if ((mysql_bin_log.is_open() && in_use && (gdb) n 5760 in_use->is_current_stmt_binlog_format_row() && (gdb) n 5759 if ((mysql_bin_log.is_open() && in_use && (gdb) n 5761 !ha_check_storage_engine_flag(s->db_type(), HTON_NO_BINLOG_ROW_OPT))) { (gdb) n 5760 in_use->is_current_stmt_binlog_format_row() && (gdb) n 5759 if ((mysql_bin_log.is_open() && in_use && (gdb) n 5763 if (s->primary_key >= MAX_KEY) bitmap_set_all(read_set); (gdb) n 5765 switch (thd->variables.binlog_row_image) { (gdb) n 5767 if (s->primary_key < MAX_KEY) bitmap_set_all(read_set); (gdb) n 5768 bitmap_set_all(write_set); (gdb) n 5769 break; (gdb) n 5800 file->column_bitmaps_signal(); (gdb) n 5803 DBUG_VOID_RETURN; (gdb) n 5804 } (gdb) n ------------------ (gdb) p *read_set $2 = {bitmap = 0x7fedd400d9d8, n_bits = 2, last_word_mask = 4294967292, last_word_ptr = 0x7fedd400d9d8, mutex = 0x0} (gdb) p *write_set $3 = {bitmap = 0x7fedd400d9dc, n_bits = 2, last_word_mask = 4294967292, last_word_ptr = 0x7fedd400d9dc, mutex = 0x0} (gdb) p *read_set->bitmap $4 = 1 (gdb) p *write_set->bitmap $5 = 2 -- After bitmap_set_all(read_set); and bitmap_set_all(write_set); $6 = {bitmap = 0x7fedd400d9d8, n_bits = 2, last_word_mask = 4294967292, last_word_ptr = 0x7fedd400d9d8, mutex = 0x0} (gdb) p *write_set $7 = {bitmap = 0x7fedd400d9dc, n_bits = 2, last_word_mask = 4294967292, last_word_ptr = 0x7fedd400d9dc, mutex = 0x0} (gdb) p *read_set->bitmap $8 = 4294967295 (gdb) p *write_set->bitmap $9 = 4294967295 -- Decision before calling ha_update_row (gdb) p (table->file->ha_table_flags() & (1 << 1)) $5 = 2 (gdb) n 146 bitmap_is_subset(table->write_set, table->read_set); (gdb) p (table->file->ha_table_flags() & (1 << 1) == 0) $8 = 0 (gdb) p bitmap_is_subset(table->write_set, table->read_set) $9 = true (gdb) p ((table->file->ha_table_flags() & (1 << 1) == 0)) || bitmap_is_subset(table->write_set, table->read_set) $11 = true binlog_format='STATEMENT' ####################### | | | | | | >mark_columns_per_binlog_row_image | | | | | | COPY_INFO::set_function_defaults | | | | | | ha_innobase::update_row | | | | | | | >row_create_update_node_for_mysql | | | | | | | | info: node: 0x7f85ac02d890, pcur: 0x7f85ac1aac78 | | | | | | | row_update_for_mysql_using_upd_graph | | | | | | | | >row_upd_step | | | | | | | | | >row_upd | | | | | | | | | | row_upd: table: iso/t1 | | | | | | | | | | row_upd: info bits in update vector: 0x0 | | | | | | | | | | row_upd: foreign_id: NULL | | | | | | | | | | ib_cur: update-in-place GEN_CLUST_INDEX (896) by 1216536: COMPACT RECORD(info_bits=128, 5 fields): {[6]   Hl (0x000001486c00),[6]      (0x000000129016),[7]      +(0x01000018d3062b),[4]    (0x80000006),[7]0333232(0x30333333323332)} | | | | | | | | | | >trx_undo_page_report_modify | | | | | | | | | | handler::ha_rnd_next | | | | | | | >rnd_next | | | | | | | | >general_fetch | | | | | | | | | >row_search_mvcc | | | | | | | | | handler::ha_rnd_end | | | | | | index_end | | | | | | | >DsMrr_impl::dsmrr_close | | | | | | | clear_error | | | | | | THD::binlog_query | | | | | | | enter: qtype: ROW  query: 'update t1 set name='0333232' where id=6' -- Doing nothing in this function as binlog_format is STATEMENT Thread 39 "mysqld" hit Breakpoint 2, TABLE::mark_columns_per_binlog_row_image (this=0x7fdf202dce80, thd=0x7fdf20110180) at /home/ec2-user/mysql-server/sql/table.cc:5751 5751 DBUG_ENTER("mark_columns_per_binlog_row_image"); (gdb) n 5752 DBUG_ASSERT(read_set->bitmap); (gdb) n 5753 DBUG_ASSERT(write_set->bitmap); (gdb) n 5759 if ((mysql_bin_log.is_open() && in_use && (gdb) n 5760 in_use->is_current_stmt_binlog_format_row() && (gdb) n 5759 if ((mysql_bin_log.is_open() && in_use && (gdb) n 5760 in_use->is_current_stmt_binlog_format_row() && (gdb) n 5759 if ((mysql_bin_log.is_open() && in_use && (gdb) n 5759 if ((mysql_bin_log.is_open() && in_use && (gdb) n 5803 DBUG_VOID_RETURN; (gdb) n 5804 } -- read_set and write_set values (gdb) p *table->write_set $16 = {bitmap = 0x7fdf141a73fc, n_bits = 2, last_word_mask = 4294967292, last_word_ptr = 0x7fdf141a73fc, mutex = 0x0} (gdb) p *table->read_set $17 = {bitmap = 0x7fdf141a73f8, n_bits = 2, last_word_mask = 4294967292, last_word_ptr = 0x7fdf141a73f8, mutex = 0x0} (gdb) p *table->read_set->bitmap $18 = 1 (gdb) p *table->write_set->bitmap $19 = 2 -- Decision before calling ha_update_row Thread 41 "mysqld" hit Breakpoint 2, records_are_comparable (table=0x7fdf1400cd60) at /home/ec2-user/mysql-server/sql/sql_update.cc:145 145 return ((table->file->ha_table_flags() & HA_PARTIAL_COLUMN_READ) == 0) || (gdb) p (table->file->ha_table_flags() & (1 << 1)) $12 = 2 (gdb) n 146 bitmap_is_subset(table->write_set, table->read_set); (gdb) p bitmap_is_subset(table->write_set, table->read_set) $13 = false (gdb) p ((table->file->ha_table_flags() & (1 << 1) == 0)) || bitmap_is_subset(table->write_set, table->read_set) $14 = false ✠