summaryrefslogtreecommitdiff
path: root/sql/rpl_rli.h
diff options
context:
space:
mode:
authorLuis Soares <luis.soares@oracle.com>2011-11-11 17:26:56 +0000
committerLuis Soares <luis.soares@oracle.com>2011-11-11 17:26:56 +0000
commit595a007d4e570f935ffc396aeb62480c2f414741 (patch)
tree0ac14b7cf5867002b4c6db32ddd297c5ea169bc9 /sql/rpl_rli.h
parent4714b9d1c6a440cef0a7bd4027b37f0c35bbca81 (diff)
downloadmariadb-git-595a007d4e570f935ffc396aeb62480c2f414741.tar.gz
BUG#11760927: 53375: RBR + NO PK => HIGH LOAD ON SLAVE (TABLE
SCAN/CPU) => SLAVE FAILURE When a statement containing a large amount of ROWs to be applied on the slave, and the slave's table does not contain a PK, it can take a considerable amount of time to find and change all the rows that are to be changed. The proper slave enhancement will be implemented in WL 5597. However, in this bug we are making it clear to the user what the problem is, by printing a message to the error log if the execution time, for a given statement in RBR, takes more than LONG_FIND_ROW_THRESHOLD (set to 60 seconds). This shall help the DBA to diagnose what's happening when facing a slave server that is quiet for no apparent reason... The note is only printed to the error log if log_warnings is set to be greater than 1.
Diffstat (limited to 'sql/rpl_rli.h')
-rw-r--r--sql/rpl_rli.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/sql/rpl_rli.h b/sql/rpl_rli.h
index fb62279c4c1..c8a0f549e0f 100644
--- a/sql/rpl_rli.h
+++ b/sql/rpl_rli.h
@@ -452,8 +452,49 @@ public:
(m_flags & (1UL << IN_STMT));
}
+ time_t get_row_stmt_start_timestamp()
+ {
+ return row_stmt_start_timestamp;
+ }
+
+ time_t set_row_stmt_start_timestamp()
+ {
+ if (row_stmt_start_timestamp == 0)
+ row_stmt_start_timestamp= my_time(0);
+
+ return row_stmt_start_timestamp;
+ }
+
+ void reset_row_stmt_start_timestamp()
+ {
+ row_stmt_start_timestamp= 0;
+ }
+
+ void set_long_find_row_note_printed()
+ {
+ long_find_row_note_printed= true;
+ }
+
+ void unset_long_find_row_note_printed()
+ {
+ long_find_row_note_printed= false;
+ }
+
+ bool is_long_find_row_note_printed()
+ {
+ return long_find_row_note_printed;
+ }
+
private:
+
uint32 m_flags;
+
+ /*
+ Runtime state for printing a note when slave is taking
+ too long while processing a row event.
+ */
+ time_t row_stmt_start_timestamp;
+ bool long_find_row_note_printed;
};