Anemometer适应新版pt-query-digest需要的调整

Anemometer已经不更新了,pt-query-digest 3.0.11后续版本生成的checksum包含英文字母,点击SQL的checksum进详情页提示:“Unknown checksum: ……”

说明:
老版本pt-query-digest生成的checksum是纯数字,anemometer为了展示美观(固定长度)等原因,将checksum转成16进制列表展示,进详情页后,再讲16进制转换成10进制查找具体SQL详情。这两次转换无法将有因为字母的checksum正确转换,因此详情页无法找到chencsum。

方案:
去掉checksum的两次转换,列表直接显示原checksum。

修改内容,去除转换

# vi conf/config.inc.php 
$conf['reports']['slow_query_log'] = array(
        'callbacks'     => array(
                'table' => array(
                        //注释此行
                        //'checksum' => function ($x) { return array(dec2hex($x), ''); }
                )
        )

# vi lib/Anemometer.php 
    private function translate_checksum($checksum)
    {
        else if (preg_match('/^[0-9A-Fa-f]+$/', $checksum))
        {
            //改为直接return $checnsum
            //return $this->bchexdec($checksum);  
            return $checksum;
        }

anemometer根据checksum查询时,默认该值为数字,因此where条件后面的变量$checksum未使用单引号,导致报错:Unknown column ……

修改以下文件,$checksum要加单引号:

# vi lib/AnemometerModel.php 
$query = "SELECT `{$checksum_field_name}` FROM `{$this->fact_table}` WHERE `{$checksum_field_name}`='" . $this->mysqli->real_escape_string($checksum) . "'";

$sql .= " WHERE `{$checksum_field_name}`='" . $this->mysqli->real_escape_string($checksum) . "'";

$result = $this->mysqli->query("SELECT * FROM `{$this->fact_table}` WHERE `{$checksum_field_name}`='{$checksum}'");

$sql = "SELECT * FROM `{$table}` WHERE `{$checksum_field_name}`='{$checksum}' ORDER BY `{$time_field_name}` DESC LIMIT {$limit} OFFSET {$offset}";

完。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值