用python3编写的用来分析decoded后的binlog中的事务相关信息,包含每个事务的xid,binlog size,针对每个表的dml次数,方便的找出一段时间内的事务是否激增,事务量是否激增,便于分析相关问题
import sys
import re
def parseblock(block):
insert = []
delete = []
update = []
startscn = 0
stopscn = 0
xid = 0
begin_flag = True
for line in block.split('\n'):
mat1 = re.match(r'.*server id.*end_log_pos.*', line.strip())
if mat1 and begin_flag:
startscn = line.split()[6]
begin_flag = False
if line.startswith('### INSERT INTO'):
insert.append(line[16:].replace('`', '').strip())
if line.startswith('### UPDATE'):
update.append(line[11:].replace('`', '').strip())
if line.startswith('### DELETE FROM'):
delete.append(line[16:].replace('`', '').strip())
mat = re.match(r'.*server id.*end_log_pos(.*)Xid =(.*)', line.strip())
if mat:
stopscn = line.split()[6]
xid = line.split()[-1]
alllist = insert
alllist.extend(update)
alllist.extend(delete)
alllist = list(set(alllist))
print(startscn)
print(stopscn)
size = int(stopscn) - int(startscn)
dml = len(insert)+len(update)+len(delete)
print('Xid:%s Binlog Size:%s(bytes) DML:%s INSERT:%s UPDATE:%s DELETE:%s' % (xid, size, dml, len(insert), len(update), len(delete)))
print('---------------------------------------------------------')
for key in alllist:
print('Table:%s INSERT:%s UPDATE:%s DELETE:%s \n' % (key, insert.count(key), update.count(key), delete.count(key)))
print('\n')
def parseblocks(file):
with open(file, 'r') as f:
a = f.read()
block = re.compile(r'BEGIN./\*!\*/;.*?COMMIT/\*!\*/;', re.DOTALL)
tm = re.compile(r'([0-9].*)')
blocks = block.findall(a)
for i in blocks:
parseblock(i)
if __name__ == '__main__':
parseblocks(sys.argv[1])
运行结果
Xid:9 Binlog Size:114(bytes) DML:2 INSERT:2 UPDATE:0 DELETE:0 --------------------------------------------------------- Table:test.t2 INSERT:2 UPDATE:0 DELETE:0 Xid:17 Binlog Size:709058(bytes) DML:98304 INSERT:98304 UPDATE:0 DELETE:0 --------------------------------------------------------- Table:test.t1 INSERT:98304 UPDATE:0 DELETE:0 Xid:62 Binlog Size:63(bytes) DML:1 INSERT:1 UPDATE:0 DELETE:0 --------------------------------------------------------- Table:test.t1 INSERT:1 UPDATE:0 DELETE:0
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




