我只是切换到mysqlnd以便能够使用http://php.net/manual/en/book.mysqlnd-ms.php但是我发现与libmysql相比,性能会有一些严重下降。
NewRewlic在切换到mysqlnd https://db.tt/68r9RfhJ
后显示在PHP上花费了100多分钟我已经创建了一个基准来重现问题,这很简单:
$dbh = new PDO("mysql:host=$host; dbname=$dbname;", $user, $pass);
for ($i = 0; $i < 1000; $i++) {
$sth = $dbh->prepare("SELECT * FROM Orders LIMIT 100");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
}
执行时间:
版本信息:
任何人都能解释一下它背后的原因是什么以及如何解决它?
setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false)
)的缓冲,由于变化的特点和可能的副作用,我无法在生产中轻松完成。答案 0 :(得分:0)
mysqlnd并不慢。它在内存上效率更高。 PHP不是通过复制所有数据从mysql中获取结果,而是成为与mysql对话并将数据存储在内存中的相同过程。因此,您最终使用了一半的内存,但增加的计算成本可能是必须在PHP进程中分配该内存。你可能只是看到了从newql到mysql的转变。我非常怀疑你在这方面的表现有什么值得关注的。