【发布时间】:2018-12-06 01:12:02
【问题描述】:
我正在本地机器(我的笔记本电脑)上使用 LAMP 设置开发 Laravel 应用程序。
出于测试目的,我尝试使用Aws RDS 的mysql 服务而不是我本地的mysql server。发现,只有一个没有连接的 db 调用的 API 调用(查询:show tables) - 平均需要 12 秒。这是荒唐的。当我使用本地 mysql 服务器时,它大约是 600 毫秒。到目前为止,尚未启用 PDO::ATTR_PERSISTANT。
登录Illuminate\Database\Connectors\Connector.php [里面createConnection()方法],我发现,每个请求都会调用这个方法。这适用于两个mysql服务器。
然后,我将PDO::ATTR_PERSISTANT 设置为true。但是响应时间是相似的。
仔细查看后,发现在同一个文件中:
/**
* Create a new PDO connection instance.
*
* @param string $dsn
* @param string $username
* @param string $password
* @param array $options
* @return \PDO
*/
protected function createPdoConnection($dsn, $username, $password, $options)
{
if (class_exists(PDOConnection::class) && ! $this->isPersistentConnection($options)) {
return new PDOConnection($dsn, $username, $password, $options);
}
return new PDO($dsn, $username, $password, $options);
}
而PDOConnection - extends PDO,当persistent为假时使用 - 构造函数是:
public function __construct($dsn, $user = null, $password = null, array $options = null)
{
try {
parent::__construct($dsn, $user, $password, $options);
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, ['Doctrine\DBAL\Driver\PDOStatement', []]);
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (\PDOException $exception) {
throw new PDOException($exception);
}
}
看来,将PDO::ATTR_PERSISTANT 设置为true 无效。
这让我很困惑。
- 持久性数据库连接在 Laravel 中的实际作用是什么?
- 响应时间长的原因是什么(使用
Aws RDS的mysql服务)?
【问题讨论】:
标签: mysql laravel-5 amazon-rds