php - 审计 PHP 的低效查询

标签 php mysql

我正在处理一个非常大的 PHP 代码库(主要是程序代码库),该代码库是在过去 10 年中由我之前的开发人员拼凑而成的,现在我们正承受着沉重的数据库负载。查看一些文件会发现执行了 40 到 60 个以上的 MySQL 查询。花时间去追踪它们在这个令人讨厌的大文件中的用途通常表明它们进行了查询并且从未使用过结果。我觉得如果我能找出代码库中的问题区域,我就可以开始重构。

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

不过,我还没有找到任何分析脚本中查询使用情况的东西。例如,文件中包含多少 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

关于php - 审计 PHP 的低效查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13315159/

相关文章:

javascript - 数据表在分页应用之前旋转并加载整个数据集

php - 用于显示数据的 Mysql 查询

php - 本地主机 ubuntu xampp "There was an SQL error: No database selected"

MYSQL - 引用的表/字段名称与未引用的名称

php - 如何防止数据库搜索在空字符串上运行?

php - DataTable 服务器请求分页

php - 处理 PHP DateTime 中格式正确但无效的日期

mySQL 在一天中的几个小时到午夜之间收集数据,并以日期增量进行

php - mysql插入和phpmyadmin中的中文字符

mysql - 如何使用 Visual Basic 6 进行 MySQL 查询