十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
小编给大家分享一下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怎么避免长事务”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!