@@ -69,17 +69,21 @@ def __init__(
69
69
resume_stream = self .resume_stream ,
70
70
)
71
71
72
- def speed_report (self , start , rows_num , now = None ):
72
+ def performance_report (self , start , rows_num , rows_per_event_min = - 1 , rows_per_event_max = - 1 , now = None ):
73
73
# time to calc stat
74
+
74
75
if now is None :
75
76
now = time .time ()
77
+
76
78
window_size = now - start
77
79
rows_per_sec = rows_num / window_size
78
80
logging .info (
79
- 'rows_per_sec:%f for last %d rows %f sec' ,
81
+ 'rows_per_sec:%f rows_per_event_min: %d rows_per_event_max: %d for last %d rows %f sec' ,
80
82
rows_per_sec ,
83
+ rows_per_event_min ,
84
+ rows_per_event_max ,
81
85
rows_num ,
82
- window_size
86
+ window_size ,
83
87
)
84
88
85
89
def read (self ):
@@ -91,16 +95,27 @@ def read(self):
91
95
92
96
start = time .time ()
93
97
rows_num = 0
94
- rows_num_since_interim_speed_report = 0
98
+ rows_num_since_interim_performance_report = 0
99
+ rows_per_event = 0
100
+ rows_per_event_min = 0
101
+ rows_per_event_max = 0
102
+
95
103
96
104
# fetch available events from MySQL
97
105
for mysql_event in self .binlog_stream :
98
106
if isinstance (mysql_event , WriteRowsEvent ):
107
+
108
+ rows_per_event = len (mysql_event .rows )
109
+ if rows_per_event < rows_per_event_min :
110
+ rows_per_event_min = rows_per_event
111
+ if rows_per_event > rows_per_event_max :
112
+ rows_per_event_max = rows_per_event
113
+
99
114
if self .subscribers ('WriteRowsEvent' ):
100
115
self .write_rows_event_num += 1
101
116
logging .debug ('WriteRowsEvent #%d rows: %d' , self .write_rows_event_num , len (mysql_event .rows ))
102
117
rows_num += len (mysql_event .rows )
103
- rows_num_since_interim_speed_report += len (mysql_event .rows )
118
+ rows_num_since_interim_performance_report += len (mysql_event .rows )
104
119
event = Event ()
105
120
event .schema = mysql_event .schema
106
121
event .table = mysql_event .table
@@ -112,17 +127,24 @@ def read(self):
112
127
logging .debug ('WriteRowsEvent.EachRow #%d' , self .write_rows_event_each_row_num )
113
128
for row in mysql_event .rows :
114
129
rows_num += 1
115
- rows_num_since_interim_speed_report += 1
130
+ rows_num_since_interim_performance_report += 1
116
131
event = Event ()
117
132
event .schema = mysql_event .schema
118
133
event .table = mysql_event .table
119
134
event .row = row ['values' ]
120
135
self .notify ('WriteRowsEvent.EachRow' , event = event )
121
136
122
- if rows_num_since_interim_speed_report >= 100000 :
137
+ if rows_num_since_interim_performance_report >= 100000 :
123
138
# speed report each N rows
124
- self .speed_report (start , rows_num )
125
- rows_num_since_interim_speed_report = 0
139
+ self .performance_report (
140
+ start = start ,
141
+ rows_num = rows_num ,
142
+ rows_per_event_min = rows_per_event_min ,
143
+ rows_per_event_max = rows_per_event_max ,
144
+ )
145
+ rows_num_since_interim_performance_report = 0
146
+ rows_per_event_min = 0
147
+ rows_per_event_max = 0
126
148
else :
127
149
# skip non-insert events
128
150
pass
@@ -134,7 +156,7 @@ def read(self):
134
156
now = time .time ()
135
157
if now > start + 60 :
136
158
# and processing was long enough
137
- self .speed_report (start , rows_num , now )
159
+ self .performance_report (start , rows_num , now )
138
160
139
161
if not self .blocking :
140
162
break # while True
0 commit comments