Mysql本地执行快,测试也快,生产贼慢(已解决)

引出问题

一个很简单的sql,生产环境查询竟然要这么久
在这里插入图片描述


我本地只需要0.2s,测试环境也只需要不到1秒钟。
这差距也太大了。
执行的sql如下:

select date_day,detain_flag,reserve_flag,into_type,out_type,usable_flag from table where line_no='11' and  date_day BETWEEN '2021-01' 
nd '2022-02' and is_del=0 AND type=1 ;

前置说明:
其中 line_no、date_day 是加了联合索引的,类型都是varchar。
detain_flag,reserve_flag,into_type,out_type,usable_flag类型为int(1)和varchar(30)
目前是6台机器上有mysql集群。
表中有50万数据,符合条件是3万,表数据大小是160M。


对比

如果只执行

select date_day from table where line_no='11' and  date_day BETWEEN '2021-01' 
nd '2022-02';

是很快的。
在这里插入图片描述


但是执行

select 	date_day,detain_flag,reserve_flag,into_type,out_type,usable_flag from plan_train_use_schedule where line_no='11' and  date_day BETWEEN '2021-05' and '2022-03'; 

后依然很慢,
差别就是返回的字段中多了几个。
在这里插入图片描述


然后又这样执行

select 	`code` from plan_train_use_schedule where line_no='13' and  date_day BETWEEN '2021-05' and '2022-03' and is_del=0 AND type=1;

后依然很慢,
差别就是查询的条件中字段中多了几个。
在这里插入图片描述


我的猜想

我猜是因为回表导致的慢,但是这特娘的也太慢了吧,其他库有个600万数据的表,是很快的。我这个库有毒?

这两个命令能查出如下图的数据,需要先执行你的sql,然后下面的命令依次执行
show profiles;
show profile for query 26;
在这里插入图片描述

我现在怀疑是跟缓冲池大小有关,因为本地跟测试相对来讲没人用,所以默认的125M内存够用了,但是生产环境一直在用,所以发生回表操作的话需要把数据重新刷进去的,所以导致慢。但是需要重启mysql,暂且没试,查询的命令是:

show variables like ‘%query_cache%’;
show variables like ‘innodb_buffer_pool%’;

在这里插入图片描述

如图,Mysql的配置都是默认的。感觉有点坑爹。

我想改下试试。但是需要重启,不好操作。


分割线 2022年1月12日13:25:20

以下操作可能需要参考这篇文章:
win10查找Mysql5.6版本的配置文件my.ini并修改innodb_buffer_pool_size

虽然生产不好操作,但是我自己电脑可以操作哇。

我查了下自己电脑Mysql的配置

show variables like ‘innodb_buffer_pool%’;

结果为

innodb_buffer_pool_instances = 8
innodb_buffer_pool_size = 125M

此时查询速度很快的,0.2秒,配置为125M

然后我改了下,查询速度需要20+秒,配置为6M
在这里插入图片描述

然后我又改了下,变成2G,查询只要0.01秒,配置为2G

在这里插入图片描述

可以看到明显的差别。

只等去生产环境试一下看是否解决问题了。


完美解决,吼吼 2022年1月12日14:23:51

此时生产环境一台机器配置如下

在这里插入图片描述

执行sql查询时间为0.4秒,不吹牛逼,这特么的提升了100倍是有的
在这里插入图片描述


序1

2022年9月26日17:08:09

今天遇到的问题,使用navcat 查询很慢, 但是登录到服务器去执行同样的sql是正常的。怀疑是网络问题造成的。

在这里插入图片描述
在这里插入图片描述

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要在本地调试 MySQL,可以按照以下步骤: 1. 安装 MySQL 服务器和客户端,在本地运行 MySQL。可以从官方网站或其他渠道下载安装包进行安装。 2. 启动 MySQL 服务器,以便可以连接到 MySQL 数据库。在 Windows 上,可以在服务中启动 MySQL 服务;在 Linux 上,可以使用命令行启动。 3. 连接到 MySQL 数据库,可以使用客户端工具如 MySQL Workbench 或者命令行工具如 mysql。使用命令行工具时,可以运行以下命令: ``` mysql -u <username> -p <password> -h <hostname> <database> ``` 其中,<username> 是 MySQL 用户名,<password> 是 MySQL 密码,<hostname> 是 MySQL 服务器主机名或 IP 地址,<database> 是要连接的数据库名。 4. 执行 SQL 查询或其他操作,例如创建表、插入数据等。可以使用客户端工具或者命令行工具来执行。 5. 如果遇到问题需要调试,可以使用 MySQL 的日志功能来记录 SQL 查询和错误信息。可以在 MySQL 配置文件中启用日志,例如在 my.cnf 文件中添加以下配置: ``` [mysqld] log-error=/var/log/mysql/mysql-error.log log=/var/log/mysql/mysql.log ``` 其中,log-error 指定错误日志的文件路径,log 指定一般日志的文件路径。 6. 如果还需要更深入的调试,可以使用 MySQL 源码进行调试。可以按照上面回答的 "使用 Visual Studio 进行源码级调试" 进行操作。 需要注意的是,MySQL 的调试需要一定的专业知识和经验,建议先在生产环境外进行测试和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值