当前位置:首页 > 运维 > 正文内容

支付系统下MySQL超时问题

MuWind1年前 (2023-03-11)运维88

现在跑的支付系统在处理客户问题查询订单的时候经常查询超时锁表,导致需要刷新网页。

支付系统的在数据库的特性是高更新频率,当我在排查问题的时候看到了query cache,去google了一下:

MySQL查询缓存是MySQL中比较独特的一个缓存区域,用来缓存特定Query的整个结果集信息,且共享给所有客户端。为了提高完全相同的Query语句的响应速度,MySQL Server会对查询语句进行Hash计算后,把得到的hash值与Query查询的结果集对应存放在Query Cache中。当MySQL Server打开Query Cache之后,MySQL Server会对接收到的每一个SELECT 语句通过特定的Hash算法计算该Query的Hash值,然后通过该hashi值到Query Cache中去匹配。

如果没有匹配,将这个hash值存放在一个hash链表中,并将Query的结果集存放到cache中,存放hashi值链表的每个hash节点存放了相应Quey结果集在cache中的地址,以及该query所涉及到一些table相关信息;

如果通过hash值匹配到了一样的Query,则直接将cache中相应的Query结果集返回给客户端

目前MySQL Query Cache只会cache select语句,其他类似show ,use的语句不会被cache MySQL 的每个Query Cache都是以SQL文本作为key来存储的,在应用Query Cache之前,SQL文本不会做任何处理。也就是说,两个SQL语句,只要相差哪怕一个字符(例如大小写不一样,多一个空格,多注释),那么这两个SQL将使用不同的Cache地址。如: 下面三条SQL将会被存储在三个不同的缓存里,虽然他们的结果都是一样的

select * FROM people where name='surfchen'; 
select * FROM people where /*hey~*/ name='surfchen'; SELECT * FROM people where name='surfchen';

MySQL缓存机制简单的说就是缓存sql文本及查询结果,如果运行相同的SQL,服务器直接从缓存中取到结果,而不需要再去解析和执行SQL。如果表更改了,那么使用这个表的所有缓存查询将不再有效,查询缓存中值相关条目被清空。这里的更改指的是表中任何数据或是结构发生改变,包括INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等,也包括那些映射到改变了的表使用MERGE表的查询。显然,这对于频繁更新的表,查询缓存是不适合的,而对于一些不常改变数据且有大量相同SQL查询的表,查询缓存会节约很大的性能。


“支付系统下MySQL超时问题” 的相关文章

OpenWrt无法保存配置无法生效的解决方法

原因:意外断电导致硬盘卡在只读状态进入openwrt后台按回车输入下面命令,重新挂载即可:mount -o remount rw /...

zblog强制打开调试模式

zblog强制打开调试模式

之前写zblog of cloudflare插件的时候,写错了代码,因为没开调试模式我也不知道哪里报错,这里记录一下:修改 zb_system/function/c_system_base.php,将第 22 行的//注释删除掉,再保存即可。...

CentOS Python后台运行

nohup python /data/python/server.py > python.log3 2>&1 &说明:1、1是标准输出(STDOUT)的文件描述符,2是标准错误(STDERR)的文件描述符 &nb...

CentOS设置开机启动

AIO出现了硬盘问题,重启后发现离线下载服务没有开机自启,快速给开一下:先写一个开机自启的脚本:#!/bin/sh #chkconfig: 2345 80 90 #description:aria2开机自启 aria2c --conf-path=/e...

数据科学基础-Python的一些注意事项

数据科学环境:Anaconda,这里用的是Python3.10,电脑没那么大空间的可用miniconda来代替常见数据类型数据类型DataType例子Example整数Integer(Int)100浮点数Floating Point Numbers(Float)3.1415926字符串Stringh...

Cloudflare ZeroTrust Tunnel提示反向解析无效

报错如下:Error looking up Cloudflare edge IPs: the DNS query failed error="lookup _v2-origintu...

发表评论

访客

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