如何在代码点火器3+sql_server2008上调试糟糕的性能


How to debug bad performance on code igniter 3 + sql_server 2008

在一个使用Code Igniter 3.0.1开发的项目中,访问SQL_server 2008数据库时,当使用"真实"数据库时,我的响应时间非常糟糕。(为任何页面提供>5秒)。

在几个测试环境中测试的同一项目运行良好,输出时间为"正常"(<1秒)。

所以我认为真实数据库存在一些性能问题。但其他数据库应用程序似乎都没有任何性能问题。Real DB管理员说:"我们的数据库一切都很好。没有其他人有任何问题

我被卡住了。不知道还能尝试什么。

如何调试以找出性能问题所在?如有任何帮助或提示,我们将不胜感激。


使用的工具和环境的详细版本:

真实环境:Web服务器:windows 7上的XAMPP 5.5.30。数据库服务器:Windows server 2008 R2 Standard上的SQL_server 2008。

几个测试环境:Web服务器:在windows 7和windows 10上使用相同的XAMPP 5.5.30。还使用旧的XAMPP版本进行了测试。数据库服务器:SQL_server 2008 Express和SQL_server 2014 Express。在窗口7和窗口8上。

网络:在与XAMPP相同的计算机和不同的计算机中进行测试。在与真实环境相同的网络中测试,并在其他网络中测试。

DB驱动程序:使用本机驱动程序连接到sql_server:

$db['my_db_name'] = array(
    'dsn'    => '',
    'hostname' => 'my_server'SQLEXPRESS',
    'username' => 'xxx',
    'password' => 'yyy',
    'database' => 'zzz',
    'dbdriver' => 'sqlsrv',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => TRUE,
    'cache_on' => FALSE,
    'cachedir' => 'application/cache',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'autoinit' => TRUE,
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

有几种方法可以在本地开始研究这个问题:

  • 安装一个探查器(Xdebug的功能是二合一),并使用缓存研磨查看器(phpStorm支持此功能,但还有其他工具)来查看瓶颈
  • 使用NewRelic这样的APM来深入研究不同的调用和查询(我不知道像Xdebug或xhprof这样的评测器是否能像查询一样深入)
  • 确保数据库的索引和结构正确(在我看来,这是最有可能的,因为问题出在数据库调用上)