mysql存储过程prepare stmt可以重复使用吗_MySQL运维实战 之 PHP访问MySQL你使用对了吗...

大家都知道,slow query系统做的好不好,直接决定了解决slow query的效率问题

一个数据库管理平台,拥有一个好的slow query系统,基本上就拥有了解锁性能问题的钥匙

但是今天主要分享的并不是平台,而是在平台中看到的奇葩指数五颗星的slow issue

好了,关子卖完了,直接进入正题

一、症状

一堆如下慢查询

# User@Host: cra[cra] @ [xx] Id: 3352884621
# Query_time: 0.183673 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0
use xx_db;
SET timestamp=1549900927;
# administrator command: Prepare;
# Time: 2019-02-12T00:02:07.516803+08:00
# User@Host: cra[cra] @ [xx] Id: 3351119968
# Query_time: 0.294081 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0
SET timestamp=1549900927;
# administrator command: Prepare;

从我们的监控图上可以看到,每天不定时间段的slow query 总数在攀升,但是却看不到任何query 语句

这是我接触到的slow query优化案例中从来没有过的情况,比较好奇,也比较兴奋,至此决心要好好看看这个问题

二、排查

要解决这个问题,首先想到的是,如何复现这个问题,如何模拟复现这个症状

  • MySQL客户端 模拟prepare

* 模拟
root:xx> prepare stmt1 from 'select * from xx_operation_log where id = ?';
Query OK, 0 rows affected (0.00 sec)
Statement prepared
* 结果
# Time: 2019-02-14T14:14:50.937462+08:00
# User@Host: root[root] @ localhost [] Id: 369
# Query_time: 0.000105 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0
SET timestamp=1550124890;
prepare stmt1 from 'select * from xx_operation_log where id = ?';

结论是: MySQL client 模拟出来的prepare 并不是我们期待的,并没有得到我们想要的 administrator command: Prepare

  • perl 模拟prepare

#!/usr/bin/perl
use DBI;
my $dsn = "dbi:mysql:database=${db_name};hostname=${db_host};port=${db_port}";#数据源
#获取数据库句柄
my $dbh = DBI->connect("DBI:mysql:da
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值