有赞数据库经典优化案例.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《有赞数据库经典优化案例.pptx》由用户(无敌的果实)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 经典 优化 案例
- 资源描述:
-
1、有赞数据库经典优化案例-案例列表 如果事务过程中发生了网络异常 TCP重传会对数据库产生什么影响 大量删除导致的SQL慢查 一次奇怪的SQL慢查的分析 一次SQL RT增加的问题排查 利用strace利器解决性能问题 如何去定位MySQL性能问题的根源如果事务中发生了网络异常以下案例均在事务开始之后 假如强制关闭应用 假如client机器突然崩溃宕机/断电 假如网络发生抖动/网卡发生故障如果事务中发生了网络异常模拟 client突然宕机Client192.168.56.102Server192.168.56.10110:00:00 begin;select * from zandb.t1for
2、 update;断电10:00:10 power off如果事务中发生了网络异常MySQL Server事务信息如果事务中发生了网络异常MySQL Server 主机TCP连接信息如果事务中发生了网络异常启动一个新的client,对t1表进行加锁需要等待如果事务中发生了网络异常服务端为什么没有退出这个事务呢?TCP 新建连接 需要三次握手TCP 关闭连接 需要四次挥手如果事务中发生了网络异常如果事务中发生了网络异常网络异常的时候,TCP连接的状态还是ESTABLISHED,说明了任何一方都没有发送FIN包,服务端还在等待CLIENT发送数据,此时的MySQL事务无法直接退出。如果事务中发生了网
3、络异常事务什么时候会退出?1. MySQL参数 wait_timeout(默认8小时)表示的是MySQL的一个连接空闲超过8小时,MySQL自动断开该连接如果事务中发生了网络异常事务什么时候会退出?2. 等待TCP超时TCP 超时参数/proc/sys/net/ipv4/tcp_keepalive_time = 7200(等待空闲时间秒)/proc/sys/net/ipv4/tcp_keepalive_intvl = 75(探测间隔秒)/proc/sys/net/ipv4/tcp_keepalive_probes = 9(探测次数)如果事务中发生了网络异常事务什么时候会退出?2. 等待TCP超
4、时修改TCP超时# echo 60 /proc/sys/net/ipv4/tcp_keepalive_time# echo 7 /proc/sys/net/ipv4/tcp_keepalive_intvl# echo 5 /proc/sys/net/ipv4/tcp_keepalive_probes如果事务中发生了网络异常事务什么时候会退出?开始抓包# tcpdump host 192.168.56.102 -s 0 -w /tmp/tcp_timeout.pcap如果事务中发生了网络异常事务什么时候会退出?3. 主动kill 异常会话mysql kill thread_id;TCP重传会对数
5、据库产生什么影响 超时重传TCP每发送一个报文段,就对这个报文段设置一次计时器。当计时器超时而没有收到确认时,就重传该报文。 快重传在发送端一连收到4个ack报文,其中3个重复报文时,就立即重传相应的报文而不等到定时器超时。TCP重传会对数据库产生什么影响 数据库大量慢查模拟40%的重传$sudo tc qdisc add dev eth0 root netem loss 40%TCP重传会对数据库产生什么影响 数据库大量慢查TCP重传会对数据库产生什么影响 数据库大量慢查在网络发生重传的时候,SQL的执行结果发送给客户端的时候需要通过TCP重传来完成,SQL的执行state表现为Sendin
6、g to client。如果一个block在net_write_timeout时间内都没有完成发送,SQL执行将会中断,抛出1161错误(Got timeout writingcommunication packets)TCP重传会对数据库产生什么影响 大量SQL被kill 每个实例部署了sql killer当实例中存在执行时间超过1秒的SQL,立即执行killquery thread_id。 收到大量SQL被kill的告警TCP重传会对数据库产生什么影响 大量SQL被kill 日志里面的thread id都是同一个 执行时间超过killer的阈值,以1秒递增TCP重传会对数据库产生什么影响
7、大量SQL被kill在执行 kill query thread_id 时,MySQL 做了两件事:1. 把对应的session的运行状态值(killed )改成 THD:KILL_QUERY2. 给对应的session的执行线程发一个信号。被kill的线程需要在埋点的地方/可唤醒的等待判断线程状态TCP重传会对数据库产生什么影响 大量SQL被kill为啥执行kill query thread_id无效 线程没有执行到判断线程状态的逻辑。读写 IO 的函数一直无法返回,线程一直在等待进入innodb等,会导致不能及时判断线程的状态。 终止逻辑耗时较长。例如大事务回滚,临时文件删除等。需要等这些收
8、尾工作完成后,SQL语句才会退出。大量删除导致的SQL慢查现象描述1. 执行sbtest1表的部分查询非常慢,状态为 Sending data2. 执行除sbtest1表外的其他表查询都非常快大量删除导致的SQL慢查分析问题1. 数据库的隔离级别为RR2. 查询监控慢查的量是大量删除操作之后开始的3. 询问业务方,得知该表会经常执行删除旧数据的操作4. History list length 非常大,达到几万,并且一直在增长5. 查询innodb_trx 表发现有一个事务,很久没有提交大量删除导致的SQL慢查搭建模拟测试环境,利用sysbench创建一张48730893行的sbtest1表Se
9、ss1Sess2Sess3t1t2t3begin;select * from sbtest1 limit 1;delete from sbtest1 order by id limit1000;()select * from sbtest1 limit 1()select * from sysbench.sbtest1 order byid desc limit 1;t4select * from sbtest2 limit 1()select * from sysbench.sbtest1 whereid=21134001 limit 1;(select * from sysbench.sb
10、test1 wherek=25990706 limit 1;大量删除导致的SQL慢查 执行sbtest1主键扫描很慢 执行sbtest2 主键扫描很快大量删除导致的SQL慢查通过profile,发现大部分时间耗费在sending data大量删除导致的SQL慢查Sending dataThe thread is reading and processing rows for a SELECT statement, andsending data to the client. Because operations occurring during this statetend to perfor
11、m large amounts of disk access (reads), it is often thelongest-running state over the lifetime of a given query.表示在读取以及处理行数据以及发送数据到客户端,由于数据只有一行,且当时网络正常,那么时间就是耗费在读取和处理select的数据大量删除导致的SQL慢查主键记录deleted:1deleted:1deleted:1deleted:1deleted:1deleted:1deleted:1deleted:1deleted:0deleted:0deleted:01DATA_TRX_
展开阅读全文