社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

PT-Kill:让您的MySQL数据库性能飙升!

IT大咖说 • 3 年前 • 630 次点击  

◆概述

生产环境数据库出现运行时间过长的SQL,会影响数据库性能,如果同时出现多个类似SQL,则会影响数据库的可用性,从而导致业务不可用或体验差的情况。DBA人工干预需要一定的时间,因此需要借助工具进行监控并自动kill超预期执行的SQL。PT-Kill能够实时监控MySQL数据库的运行情况,准确捕获慢查询、死锁等问题,帮助您及时发现并解决数据库性能问题。

◆PT-Kill的使用场景

1. 慢查询优化

当您的数据库出现慢查询时,PT-Kill可以帮助您快速定位问题,找出导致慢查询的原因(如索引不当、查询语句复杂度高等),并给出针对性的优化建议。

2. 高并发处理

在高并发场景下,PT-Kill可以通过智能调整参数,有效提高数据库吞吐量,确保数据库在高负载情况下依然稳定运行。

3. 锁等待分析

PT-Kill可以分析MySQL数据库中的锁等待情况,帮助您发现并解决死锁、长时间锁等待等问题,保证数据库的顺畅运行。

4. 连接管理

通过PT-Kill,您可以轻松管理MySQL数据库的连接,如查看当前连接数、分析连接泄露等问题,确保数据库连接资源得到合理利用。

◆PT-Kill的优势

1. 跨平台支持

PT-Kill支持多种操作系统,包括Linux、Windows、macOS等,让您可以在不同平台上轻松使用。

2. 易于安装和使用

PT-Kill提供了简单易懂的安装和使用说明,让您可以快速上手,轻松解决数据库性能问题。

3. 持续更新和完善

PT-Kill由Percona公司持续更新和完善,您可以放心使用,期待更多强大功能。

◆安装部署

https://www.percona.com/downloads/percona-toolkit/LATEST/

yum install percona-toolkit-3.5.2-2.el7.x86_64.rpm -y

◆参数说明

◆1.线程或者会话的重要参数

举几个匹配例子如下:
(1)按照命令command查杀线程
--match-command多个command之间用 | 分隔,否则会失效。
command类型:Query、Sleep、Binlog Dump、Connect、Delayed insert、Execute、Fetch、Init DB、Kill、Prepare、Processlist、Quit、Reset stmt、Table Dump

(2)按state 来杀掉线程
state类型有:Locked、login、copy to tmp table、Copying to tmp table、Copying to tmp table on disk、Creating tmp table、executing、Reading from net、Sending data、Sorting for order、Sorting result、Table lock、Updating
注意state 的内容一定要严格匹配大小写,否则会杀不掉。注意--match-state多个state之间用 | 分隔,否则会失效。

(3)按info关键字来查杀线程
通过按info来杀掉线程,注意info的内容一定要严格匹配大小写,否则会杀不掉。注意--match-info多个info之间用 | 分隔,否则会失效。
--ignore-info 不匹配
--match-info 匹配
info可以使用select、update、insert、delete来进行匹配,并可使用"|"进行多项匹配,如"select|SELECT|delete|DELETE|update|UPDATE"

(4)按照访问来源host/ip查杀线程
--ignore-host/--match-host
(5)按照DB来查杀线程
--ignore-db/--match-db
(6)按照数据库用户

--ignore-user/--match-user

◆2.行为参数

Action:
--kill 杀掉连接并且退出
--kill-query 只杀掉连接执行的语句,但是线程不会被终止
--print 打印满足条件的语句

◆3.其它重要参数

--interval 运行检查query的间隔,
--victim 有三种情况:
oldest (默认值),只杀最老的查询(最先发起的最长时间) 。这是防止被查杀是不是真的长时间运行的查询,他们只是长期等待 。这种种匹配按时间查询,杀死一个时间最高值 。
all 杀掉所有满足的线程
all-but-oldest 杀死所有,但最长的保留不杀
--busy-time 批次查询已运行的时间超过这个时间的线程;
--idle-time 杀掉sleep 了多少时间的连接线程,必须在--match-command sleep时才有效

◆使用示例

  1. 查杀select大于30s的会话

# 只打印-查杀select大于30s的会话

pt-kill --host=127.0.0.1 --port=3306 --user=root --password=rootpwd --match-db='machine' --match-info "select|SELECT" --busy-time 30 --victims all --interval 10 --daemonize --print --log=/tmp/pt_select.log

# 执行杀操作-查杀select大于30s的会话

pt-kill --host=127.0.0.1 --port=3306 --user=root --password=rootpwd --match-db='machine' --match-info "select|SELECT" --busy-time 30 --victims all --interval 10 --daemonize --kill --log


    
=/tmp/pt_select_kill.log
  1. 查杀某IP来源的会话

# 只打印-查杀某IP来源的会话

pt-kill --host=127.0.0.1 --port=3306 --user=root --password=rootpwd --match-db='machine' --match-host "192.168.65.129" --busy-time 30 --victims all --interval 10 --daemonize --print --log=/tmp/pt_select.log

# 执行杀操作-查杀某IP来源的会话

pt-kill --host=127.0.0.1 --port=3306 --user=root --password=rootpwd --match-db='machine' --match-host "192.168.65.129" --busy-time 30 --victims all --interval 10 --daemonize --kill --log=/tmp/pt_select_kill.log
  1. 查杀指定用户的会话

# 只打印-查杀指定用户的会话

pt-kill --host=127.0.0.1 --port=3306 --user=root --password=rootpwd --match-db='machine' --match-user "u2" --busy-time 30 --victims all --interval 10 --daemonize --print --log=/tmp/pt_select.log

# 执行杀操作-查杀指定用户的会话

pt-kill --host=


    
127.0.0.1 --port=3306 --user=root --password=rootpwd --match-db='machine' --match-user "u2" --busy-time 30 --victims all --interval 10 --daemonize --kill --log=/tmp/pt_select_kill.log
  1. 杀掉正在进行指定操作的sql

# 只打印-杀掉正在进行filesort的sql

pt-kill --host=127.0.0.1 --port=3306 --user=root --password=rootpwd --match-db='machine' --match-command Query --match-state "Sorting result" --run-time 1 --busy-time 30 --victims all --interval 10 --daemonize --print --log=/tmp/pt_select.log

# 执行杀操作-杀掉正在进行filesort的sql

pt-kill --host=127.0.0.1 --port=3306 --user=root --password=rootpwd --match-db='machine' --match-command Query --match-state "Sorting result" --run-time 1 --busy-time 30 --victims all --interval 10 --daemonize --kill --log=/tmp/pt_select_kill.log

# 只打印Creating sort index

pt-kill --host=127.0.0.1 --port=3306 --user=root --password=rootpwd --match-db='machine' --match-command Query --match-state "Creating sort index" --run-time


    
 1 --busy-time 30 --victims all --interval 10 --daemonize --print --log=/tmp/pt_select.log

# 执行杀操作Creating sort index

pt-kill --host=127.0.0.1 --port=3306 --user=root --password=rootpwd --match-db='machine' --match-command Query --match-state "Creating sort index" --run-time 1 --busy-time 30 --victims all --interval 10 --daemonize --kill --log=/tmp/pt_select_kill.log

◆小结

PT-Kill是一款强大且实用的MySQL性能优化工具,无论您是数据库新手还是专家,都能轻松上手并从中受益。通过实时监控、自动优化、查询分析等多种功能,PT-Kill可以帮助您快速解决各种数据库性能问题,让您的MySQL数据库性能得到极大提升。


来源:https://www.toutiao.com/article/7238099749755175457/?log_from=064df26042a15_1685408598582

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com





来都来了,走啥走,留个言呗~




 IT大咖说  |  关于版权 

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!


相关推荐


推荐文章

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/155727