微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

审核PHP的低效查询

我正在研究一个非常大的PHP代码库(主要是程序性的),在过去的10年里,我遇到的开发人员和我们现在正在经历大量的数据库负载.查看一些文件显示正在执行的40到60个MySQL查询.花时间在这个大型令人讨厌的文件中找出它们的用途通常会显示它们已经进行了查询并且结果从未使用过.我觉得如果我能识别代码库中的问题区域,我就可以开始重构了.

我在StackOverflow上看到很多关于各种审计工具的帖子:

> https://stackoverflow.com/questions/4273244/auditing-a-php-codebase?lq=1
> Is there a static code analyzer [like Lint] for PHP files?

我还没有找到任何分析脚本中的查询用法的东西.例如,文件中包含多少SELECT,INSERT和UPDATE查询.更有趣的是,其中有多少包含在循环结构中?我写了一个快速的脏递归文件搜索来识别一些基本问题:

   $it = new RecursiveDirectoryIterator($path);
   foreach(new RecursiveIteratorIterator($it) as $file) 
   {
      if(stristr($file, "/.") == false && stristr($file, "/..") == false)
  {
         $contents = file_get_contents($file);

         // Regular MysqL queries...indicative of sql injection points
         $MysqL_count = substr_count($contents, "MysqL_query(");

         $select_count = substr_count($contents, 'SELECT ');
         $insert_count = substr_count($contents, 'INSERT INTO');
         $update_count = substr_count($contents, 'UPDATE ');

         if($MysqL_count > 0 || $select_count > 0 || $insert_count > 0 || $update_count > 0)
         {
            $out[] = array('file' => $file, 
                           'MysqL_count' => $MysqL_count,
                           'select_count' => $select_count,
                           'insert_count' => $insert_count,
                           'update_count' => $update_count
                          );
         }

         $contents = null;
    }
}

var_dump($out);

但是在循环中找不到任何东西,甚至分析查询以查看它是否包含高阈值的JOINS.我可以写一个这样的工具,但为什么重新发明它已经存在的轮子?

是否有任何工具可以识别可能存在问题/高压力/低效查询PHP文件

我的目标是确定重构遗留过程代码最有益的点.

解决方法:

比许多查询更慢的查询错误的.所以我会试着找到那些.

你可以使用MysqL的慢查询日志功能来做到这一点:
http://dev.mysql.com/doc/refman/5.6/en/slow-query-log.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐