mysql怎么避免长事务

小编给大家分享一下MySQL怎么避免长事务,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

成都创新互联公司专业为企业提供大通网站建设、大通做网站、大通网站设计、大通网站制作等企业网站建设、网页设计与制作、大通企业网站模板建站服务,10多年大通做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

1、确认是否使用了set autocommit=0。

这个确认工作可以在测试环境中开展,把 MySQL 的 general_log 开起来,然后随便跑一个业务逻辑,通过 general_log 的日志来确认。

2、确认是否有不必要的只读事务。

有些框架会习惯不管什么语句先用 begin/commit 框起来。有些是业务并没有这个需要,但是也把好几个 select 语句放到了事务中。这种只读事务可以去掉。

3、业务连接数据库的时候,控制每个语句执行的最长时间,避免单个语句意外执行太长时间。

实例

#!/bin/bash
 
mysql -N -h227.0.0.1 -userver_234 -pserver_234 -P8002 -e "select now(),(unix_timestamp(now()) - unix_timestamp(a.trx_started)) diff_sec,b.id,b.user,b.host,b.db,d.sql_text from information_schema.innodb_trx a inner join
information_schema.processlist b
on a.trx_mysql_thread_id=b.id and b.command = 'sleep'
inner join performance_schema.threads c on b.id = c.processlist_id
inner join performance_schema.events_statements_current d on d.thread_id = c.thread_id;" | while read a b c d e f g h
do
if [ "$c" -gt 30 ]
then
echo $(date +"%y-%m-%d %h:%m:%s")
echo "processid[$d] $e@$f in db[$g] hold transaction time $c sql:$h"
fi
done >> /tmp/longtransaction.txt

看完了这篇文章,相信你对“mysql怎么避免长事务”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


分享文章:mysql怎么避免长事务
本文地址:http://scyanting.com/article/jgcspo.html