USDT自动充值

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

原题目:MySQL数据库CPU问题一则

作者:张政俊,中欧基金DBA

Mysql 一样平常泛起 CPU 负载过高问题的时刻,我们都市去看下故障时代的慢sql日志,然后找出全表扫描、索引不合理、函数运算过多的sql,让开发同砚优化下。着实不行的话,那就升级CPU硬件,替换更高频率的CPU,1路的升级成2路,2路的升级成四路。

这次泛起的问题由于关乎到天天的营业处置,以是许多措施无法第一时间到位,好比硬件采购,以是只能先从数据库端思量,定位详细的瓶颈,看看有没有参数优化空间。

排查时代走了不少弯路,但幸亏最终解决了问题。现在最先回首下整个问题处置的历程:

一. 问题泛起

晚上营业高峰期有一套数据库集群的主库泛起 threads running 过多的告警,应用也频仍泛起响应速率慢的告警。这时刻processlist列表中非sleep的sql已达到1000+,数据库已经没法处置,后续进来的sql所有聚积在里面。1分钟后,处于running状态的sql达到了2700+。

此时使用kill下令杀sql,都市处于killed状态,sql历程并不会正真的竣事。

top下令看到CPU有压力,然则没打满,iowait不高。

free下看到内存尚有20G余量,且基本没用到swap。

iostat下看到磁盘读写并不高,没有压力。

二. 问题处置

第一次处置,主要从三个角度去思索:

1. 慢sql优化

把故障时代的慢sql日志拿了出来,剖析了下TOP30的慢sql。部门sql确实扫了全表(表中数据量不多),然后许多sql都有count、order by逻辑,这些操作确实会开销cpu。

这些sql单独拿出来执行,实在并不是很慢,大约在1,200毫秒左右,实在是可以接受的。而且我们开发资源对照重要,若是要去优化这些营业焦点sql,没有两三周是完不成的。

由于天天都市有这个义务,以是sql优化的优先级先往后推推。

2. 营业降低并发

直接降低营业的并发数,这个措施看起来最简朴有用,我们也确实这么了,直接砍了一半的并发量。部门应用服务器jdbc设置中的Maxactive也减半。

3. 数据库参数修改

把 innodb_flush_method 参数从默认的 fdatasync 改为 O_DIRECT。

目的是直接将 write 操作从 innodb buffer 刷到磁盘,中心不通过 os 缓存去中转。这样写入操作(insert,update,delte)响应时间会变很长,然则可少削减了io和cpu的开销,物理内存也可以降低使用率。

image

三. 问题重现

准备工作完成,然则当下一次义务跑的时刻,数据库又泛起了和上一次一样的情形。

不外,这一次在重启数据库前打了pstack日志。

四. 问题重新定位 1. 系统信息

为了更深入地定位问题,这次剖析了 sar 日志:

故障时代发生了大量的上下文切换:

CPU 响应行列达到了100+,平均负载也到达100+:

runq-sz:Run queue length (number of tasks waiting for run time).

image

至此,可以一定确定问题在 CPU 层了。

2. pstack 日志

在pstack日志中,发现了许多 btr_search_info_update & btr_search_info_update_slow:

image

圈出来的都是用来确立 AHI 的函数。

看下 btr_search_info_update 的挪用链:

btr_cur_search_to_nth_level→ btr_search_info_update→ btr_search_info_update_slow→ btr_search_build_page_hash_index

在 btr_search_info_update_slow 中,凭据统计信息作出决定,挪用 btr_search_build_page_hash_index 把当前页面的纪录加入AHI的hash table。

3. AHI 自适应哈希索引

,

Usdt第三方支付接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

现在追踪定位到了 AHI ,那么接下来深入了解下什么是 AHI。

innoDB存储引擎会监控对表上辅助索引页的查询。若是观察到确立hash索引可以提升性能,就会在缓冲池确立hash索引,称之为自适应哈希索引(Adaptive Hash Index,AHI)

AHI是通过缓冲池的B+ Tree组织而来,使用索引键的前缀来构建哈希索引,前缀可以是随便长度。因此构建速率很快,而且不需要对整张表构建hash索引。InnoDB存储引擎会自动凭据接见的频率和模式来自动地为某些热门页确立hash索引。

凭据InnoDB官方文档说明,启用了AHI后,读写的速率会提升2倍,辅助索引的毗邻操作性能可以提高5倍。

查询语句使用 AHI 的时刻有以下优点:

  • 可以直接通过从查询条件直接定位到叶子结点,削减一次定位所需要的时间;

  • 在 buffer pool 不足的情形下,可以只针对热门数据页确立缓存,从而制止数据页频仍的 LRU;

但 AHI 也有它的问题,有这么一段说明:

With some workloads, the speedup from hash index lookups greatly outweighs the extra work to monitor index lookups and maintain the hash index structure. Access to the adaptive hash index can sometimes become a source of contention under heavy workloads, such as multiple concurrent joins.

在多并发毗邻的场景下,哈希索引的使用频率大大超过了监视哈希索引和维护哈希结构的频率,从而导致资源竞争,也就会消耗分外的CPU。

  • AHI监控:包罗 AHI 方式查询的次数(adaptive_hash_searches)和使用 bree 查询的次数(adaptive_hash_searches_btree)

  • AHI维护:当物理纪录的位置或者所在 block 的地址发生变化时,AHI 也需要对其举行响应的维护,可参考函数 btr_search_update_hash_ref & btr_search_drop_page_hash_index & buf_LRU_drop_page_hash_for_tablespace

4. 查看5.6.26源码

我们当前使用的是 5.6.26 版本的数据库,看下该版本的源码:

image

可以看到 rw_lock_s_lock(&btr_search_latch) 其中 btr_search_latch 是把全局锁。

五. AHI的问题解决

Mysql 5.6.26 版本是通过 innodb_adaptive_hash_index 参数来控制 AHI 的开关。

到这里不能说直接 OFF 以下这个参数就可以了,另有两个问题需要确认下:

  1. 这个全局锁之后优化了吗?

  2. 5.6.26下,这个参数到底有没有作用?

1. AHI 全局锁的优化

AHI 使用全局读写锁会导致资源竞争,这个bug显示,该问题已在5.7.7版本中修复:https://bugs.mysql.com/bug.php?id=62018

Fix bug https://bugs.mysql.com/bug.php?id=62018 (innodb adaptive hash index mutex contention) by partitioning btr_search_latch into a latch array indexed by index id. Add system variable innodb_adaptive_hash_index_partitions to control the number of partitions.

解决的方案就是对AHI举行锁拆分。把它设计成分区的形式,每个分区都有自力的latch来珍爱。分区巨细是由 innodb_adaptive_hash_index_parts 参数设置,默以为8,最大为512。

这样看来,高版本确实已经做了优化。

2. 5.6版本里关闭参数是否有用

我们现在使用的是 5.6.26 版本,会不会存在关闭 innodb_adaptive_hash_index 然则 btr_search_latch 还存在的情形。

https://bugs.mysql.com/bug.php?id=50461

这个bug显示,在5.5版本下照样存在这个问题的,many uses of btr_search_latch with innodb_adaptive_hash_index is OFF

在最后的官方回复,该问题已经修复,merge vers: 5.6.1-m4,以是5.6.26版本下关闭 innodb_adaptive_hash_index 参数是有用的。

再去源码中看下关闭 AHI 的详细实现:

btr_search_disable 会释放 AHI 所使用的 buffer_pool 的内存。

六. 总结

这个问题总结下,就是在开启 AHI 后,遇到了大量并发毗邻,由于 AHI 会持有全局锁,导致了数据库大量锁自旋,消耗了大量的CPU。

现在数据库已关闭 AHI,该营业跑了两天,数据库一切正常。等年后还需要把数据库版本升上去,5.6确实有点落伍了。

数据库遇到类似 CPU 问题,可以完成以下操作,对追溯问题泉源是很有辅助的:

  • vmstat 1 1000

  • top -Hu mysql

  • perf top -a -g

  • show engine innodb status G

  • show processlist

  • 重启前打pstack 日志(确定重启前才气打,其他时刻不能乱打)

Allbet Gaming声明:该文看法仅代表作者自己,与本平台无关。转载请注明:usdt无需实名买入卖出(www.caibao.it):MySQL数据库CPU问题一则
发布评论

分享到:

ipfs矿机网(www.ipfs8.vip):雀巢冠能携手小米智能生态营销,配合探索智能养宠新时代
5 条回复
  1. Allbet
    Allbet
    (2021-02-19 00:01:20) 1#

    USDT充值接口菜包钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台。免费提供Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜包Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。亮点很多

    1. 联博以太坊高度
      联博以太坊高度
      (2021-03-05 21:38:58)     

      环球UG官网www.ugbet.us欢迎进入环球UG官网(UG环球),环球UG官方网站:www.ugbet.net开放环球UG网址访问、环球UG会员注册、环球UG代理申请、环球UG电脑客户端、环球UG手机版下载等业务。来了来了我来了

  2. 新2代理网址
    新2代理网址
    (2021-06-29 00:02:55) 2#

    USDT场外交易网www.Uotc.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U担保开放usdt otc API接口、支付回调等接口。

    第一次看,讲的啥

  3. 新2手机网址
    新2手机网址
    (2021-08-08 00:07:13) 3#

    IPFS招商www.ipfs8.vip)是Filecoin致力服务于使用Filecoin存储和检索数据的官方权威平台。IPFS官网实时更新FiLecion(FIL)行情、当前FiLecion(FIL)矿池、FiLecion(FIL)收益数据、各类FiLecion(FIL)矿机出售信息。并开放FiLecion(FIL)交易所、IPFS云矿机、IPFS矿机出售、IPFS矿机合租、IPFS算力合租、IPFS招商等业务。

    满意,耐心看

  4. 新2代理网址(www.22223388.com)
    新2代理网址(www.22223388.com)
    (2021-09-20 00:04:26) 4#

    投屏,就是谁人“虫洞”。让小我私人数据有用“穿越”到整个家庭的IoT中枢并与之发生强互动毗邻。而在非家庭场景的办公环境下,投屏手艺的边缘盘算能力则会将数据举行漫衍式处置,实现统一网络下或远程毗邻的同频共振。推荐入坑,别犹豫

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。