3

昨天我发布了关于 SQLite 性能问题的问题(Zend Db PDO_sqlite 插入和更新查询中的可怕性能)。经过几次测试似乎只有通过 SoapServer 调用方法时才会出现问题(尝试了原生 PHP SoapServer 和 Zend_Soap_Server 类)。

测试用例 - 调用 10 个使用 SQLite DB INSERT 和 UPDATE DB 操作的方法。

以下是它如何工作的几个案例:

1.通过控制器 - 不使用肥皂服务器。本地主机:~0.3s,远程服务器:~0.3s

2.通过肥皂服务器。第一次通话。本地主机:~1-2s,远程服务器:~7s!

3.通过肥皂服务器。几个电话。本地主机:~1-10s,远程服务器:~7s

第三种情况我不太关心,可能是本地服务器性能问题。重要的是它在远程服务器上工作稳定。

另一方面,简单的 10 次方法调用的 7 秒非常长。显然 - 这 7 秒的一部分是客户端 - 服务器通信,因为案例 1 省略了这一点,但我不认为它应该那么慢!

为了调试,我正在记录所有内容,似乎发生的情况是在案例 1 中调用的相同 SQLite 方法需要 0.00x-0.02 秒,这里持续约 0.15-0.45 秒。

可能是什么问题?使用 SOAP 时速度如此急剧地变慢是正常的吗?(这是我的第一个肥皂服务器项目)。

编辑:我发现的另一个重要日志事实:

信息 -2012-04-26 13:08:07.782679 类:SoapController。方法:SoapController::hadleWSDL。线路:18。

Information-2012-04-26 13:08:08.318641 * 系统启动 *

所以这基本上是两个方法被调用之间的时间。对我来说,使用少量数据进行超过 0.5 秒的客户端-服务器通信似乎很多。这是 handleWSDL 操作的代码:

$options = array(
    'encoding' => 'UTF-8',
    'cache_wsdl' => WSDL_CACHE_BOTH,
    'uri' =>$this->_WSDL_URI
);  
$soap = new Zend_Soap_Server(null, $options); 
$soap->setClass('SoapServerFunction');
$soap->setObject(new SoapServerFunction());
$soap->handle();

应用程序非常简单——SOAP 方法接受 1 个参数,并在此基础上创建 1 个缓存对象,正在处理数据,并以 XML 格式返回部分数据。

提前感谢您提出任何建议,我可以做些什么来使其更快或如何跟踪减速的真正原因。

最好的祝福!

4

1 回答 1

0

Do you use a FQDN for the server's address? In that case it might actually be DNS-related. You might also want to try everything on a real system and not on a virtual host, as you will not have much control over what the physical system is actually doing.

Secondly, I would recommend installing xdebug and use kcachegrind or wincachegrind, which will give you a much more detailled view of what your system is doing.

Thirdly, you may log slow queries by utilizing PostgreSQLs pg_stat_statements().

于 2012-06-13T13:13:38.863 回答