mysql 大事务_MySQL 5.6大查询和大事务监控脚本(Python 2)

可以配置在Zabbix里面,作为监控的模版

#!/usr/bin/env python

#

import MySQLdb,MySQLdb.cursors

import sys,time

from datetime import datetime

innodb_lock_output_file = '/tmp/innodb_lock_output.log'

# socket_dir = '/var/lib/mysql/mysql.sock'

time_step = 1

db_host = '127.0.0.1'

db_port = 23306

db_user = 'zabbix'

db_pass = 'l8ka65'

f = open(innodb_lock_output_file,'a')

current_time_stamp = int(time.time()) - time_step

current_time = time.ctime()

result = ''

# print sys.argv

if len(sys.argv) <> 2:

print "Usage: %s current_lock | current_running" % sys.argv[0]

exit()

db = MySQLdb.connect(host=db_host, user=db_user,

passwd=db_pass, charset='utf8',

port = db_port

# unix_socket=socket_dir

)

conn = db.cursor(MySQLdb.cursors.DictCursor)

db.select_db('information_schema')

now_time_sql = 'select now() as now_time;'

conn.execute(now_time_sql)

current_time = conn.fetchall()[0]['now_time']

result += str(current_time)

result += '\n'

lock_sql = '''

SELECT * FROM INNODB_TRX where TIMESTAMPDIFF(SECOND, trx_started, now()) > 1 ORDER BY trx_started LIMIT 1

'''

running_sql = '''select user,host,db,time,State,info  from PROCESSLIST where TIME > 30 and  COMMAND  <> 'Sleep' and COMMAND <> 'Binlog Dump' and user <> 'system user' and lower(info) not like '%alter%table%' order by TIME DESC LIMIT 1 '''

if sys.argv[1] == 'current_lock':

conn.execute(lock_sql)

query_result = conn.fetchall()

locks = conn.rowcount

if locks > 0:

cur_time = datetime.now()

print (cur_time - query_result[0]['trx_started']).seconds

else:

print 0

# print result

for item in query_result:

for each in item:

# print each

result +=  str(each)

result += '\t'

result += ':==>>>>\t'

result += str(item[each])

result += '\n'

result += '\n'

result += '\n'

# print result

if locks > 0:

f.write(result)

elif sys.argv[1] == 'current_running':

conn.execute(running_sql)

query_result = conn.fetchall()

thread_count = conn.rowcount

if thread_count > 0 :

f.write(result)

for item in conn.fetchall():

f.write(str(item) + '\n')

f.write('\n\n\n\n')

print query_result[0]['time']

else:

print 0

else:

print "Usage: %s current_lock | current_running" % sys.argv[0]

conn.close()

db.close()

f.close()

执行脚本

# python innodb_lock_monitor.py current_running

# python innodb_lock_monitor.py current_lock

慢查询语句会记录在文本文件中

]# tail -300 /tmp/innodb_lock_output.log

blocking_trx_state:==>>>>RUNNING

requesting_SQL:==>>>>delete who_cart,who_cart_ext from who_cart left join who_cart_ext on who_cart.rec_id = who_cart_ext.cart_id

where  who_cart.rec_id=1469638027

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值