Ank*_*kit 9 mysql database-performance amazon-rds laravel laravel-4
我在这里面临一些非常奇怪的问题.我们在AWS EC2上托管了一个laravel API,我们使用RDS(mysql 5.6).我最近在RDS上启用了performance_schema.以下是我注意到的行为
所以看起来只有当我们的Laravel应用程序执行查询时,它们才会被跟踪.
我们的Laravel版本是4.2.我试图找出最近两天的原因,任何帮助都将是一种解脱.
我在上述所有步骤中使用的用户都是相同的,并且拥有所有数据库的所有权限.
- 编辑 -
我进行了许多其他测试,他们都只指出了一个与Laravel有关的结论.我在托管laravel的同一台服务器上创建了一个简单的php文件.在此文件中,我使用相同的用户/密码连接到相同的实例/数据库.我在这个文件中所做的只是在$ pdo上运行一个非常简单的查询.
$stmt = $pdo->query('SELECT name FROM trades');
while ($row = $stmt->fetch())
{
echo $row['name'] . "\n";
}
Run Code Online (Sandbox Code Playgroud)
它出现在查询分析[ https://prnt.sc/j3ochd]中(我手动检查了performance_schema.events_statements_summary_by_digest)
但是我可以点击我们的laravel api,它实际上返回了交易表本身的条目(非常类似于我上面运行的查询).但这会出现在我的查询分析报告(Percona PMM)或events_statements_summary_by_digest中
您必须将options数据库>连接设置中的参数传递为PDO::ATTR_EMULATE_PREPARES => true
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
'options' => [
PDO::ATTR_EMULATE_PREPARES => true
]
],
Run Code Online (Sandbox Code Playgroud)
]
默认情况下,laravel会将此选项标记为PDO::ATTR_EMULATE_PREPARES => false提高查询性能.
这是快速详细信息.
PDO :: ATTR_EMULATE_PREPARES启用或禁用预准备语句的模拟.某些驱动程序不支持本机预处理语句或对它们的支持有限.使用此设置可强制PDO始终模拟预准备语句(如果驱动程序支持TRUE和模拟准备),或尝试使用本机预准备语句(如果为FALSE).如果驱动程序无法成功准备当前查询,它将始终回退到模拟预准备语句.
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |