gpt4 book ai didi

php - 拉维尔 4.2 : Slow queries when using an external MySQL server

转载 作者:搜寻专家 更新时间:2023-10-31 22:02:27 25 4
gpt4 key购买 nike

当 MySQL 在应用程序之外的另一台服务器上时,查询非常慢。这与预期的延迟(网络瓶颈等)无关;我在使用 Codeigniter 时从未遇到过这个问题。它看起来也不像是 DNS 问题,我在我测试的每台 vagrant 机器和服务器上都遇到了这个问题。

为了弄清楚发生了什么,我编写了一个简单的测试,运行相同的查询但使用不同的方法:

  1. PDO 实例是使用 DSN 手动创建的
  2. PDO 实例由 DB::getPdo() 返回
  3. 查询生成器

测试结果截图:here .

这是代码:

Route::get('/test', function(){


$num_queries = 10;


// manually creating a PDO instance with DSN
Debugbar::measure('$dbh = new PDO("mysql:host=$hostname;port=$port;dbname=$db", $username, $password)', function() use ($num_queries){

$hostname = Config::get('database.connections.mysql.host');
$port = Config::get('database.connections.mysql.port');
$db = Config::get('database.connections.mysql.database');
$username = Config::get('database.connections.mysql.username');
$password = Config::get('database.connections.mysql.password');

$dbh = new PDO("mysql:host=$hostname;port=$port;dbname=$db", $username, $password);

for($i = 1; $i <= $num_queries; $i++)
{
$sth = $dbh->prepare("SELECT * FROM users WHERE id = ?");
$sth->execute(array($i));
$sth->fetch(PDO::FETCH_ASSOC);
}
});


// using DB::getPdo()
Debugbar::measure('$dbh = DB::getPdo();', function() use ($num_queries){

$dbh = DB::getPdo();

for($i = 1; $i <= $num_queries; $i++)
{
$sth = $dbh->prepare("SELECT * FROM users WHERE id = ?");
$sth->execute(array($i));
$sth->fetch(PDO::FETCH_ASSOC);
}
});


// using the query builder
Debugbar::measure('Query builder', function() use ($num_queries){

for($i = 1; $i <= $num_queries; $i++)
{
DB::table('users')->where('id', $i)->get();
}
});

return "<h1>$num_queries ".($num_queries == 1 ? 'query' : 'queries')."</h1>";
});

注意 DB::getPdo() 对多个查询的扩展有多糟糕。还有其他人经历过吗?这里发生了什么?我应该指出,当 MySQL 数据库与应用程序位于同一台服务器上时,我不会遇到这些问题。

最佳答案

静态调用使用相同的 PDO 实例,因此每次都在幕后使用相同的实际数据库连接。

其他人每次都创建一个新连接,并涉及相关的开销。

缓慢的查询将是其他原因的结果(可能是生产索引 - 使用 EXPLAIN 调试查询)。

这些调试测试将您引向错误的道路。

关于php - 拉维尔 4.2 : Slow queries when using an external MySQL server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26074886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com