gpt4 book ai didi

mysql - Laravel API 的 mysql 查询未在 performance_schema.events_statements_summary_by_digest 中被跟踪

转载 作者:可可西里 更新时间:2023-11-01 06:28:46 25 4
gpt4 key购买 nike

我在这里遇到了一些非常奇怪的问题。我们在 AWS EC2 上托管了一个 laravel API,并且我们使用 RDS (mysql 5.6)。我最近在 RDS 上启用了 performance_schema。以下是我注意到的行为

  1. 我们的 RDS 实例上有两个数据库。一个用于 wordpress,一个用于我们的 laravel API。 Wordpress 数据库查询正在被很好地消化。但是从我们的 laravel 应用程序运行的查询不是。
  2. 出于某种原因,当我将 MySql Workbench 连接到 RDS 实例并在我们的 Laravel 数据库上执行查询时,它们会正常显示在语句摘要中。
  3. 我登录到我的 EC2 机器,连接到 RDS 上的 MySQL 并执行了一些查询,它们在语句摘要中被跟踪。

所以看起来只有当查询从我们的 Laravel 应用程序执行时,它们才不会被跟踪。

我们的 Laravel 版本是 4.2。我试图找出过去两天的原因,任何帮助都会让我松一口气。

我在上述所有步骤中使用的用户都是相同的,并且拥有所有数据库的所有权限。

--编辑--

我进行了许多其他测试,它们都只指出一个结论,它与 Laravel 有关。我在托管 laravel 的同一台服务器上创建了一个简单的 php 文件。在此文件中,我使用相同的用户/密码连接到相同的实例/数据库。我在这个文件中所做的唯一一件事就是像这样在 $pdo 上运行一个非常简单的查询。

$stmt = $pdo->query('SELECT name FROM trades');
while ($row = $stmt->fetch())
{
echo $row['name'] . "\n";
}

它出现在查询分析中 [ 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

配置>数据库.php

'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
]
],

]

默认情况下,laravel 将此选项标记为 PDO::ATTR_EMULATE_PREPARES => false 以提高查询性能。

这是关于它的快速详细信息。

PDO::ATTR_EMULATE_PREPARES 启用或禁用准备好的语句的模拟。某些驱动程序不支持 native 准备好的语句或对它们的支持有限。使用此设置强制 PDO 始终模拟准备好的语句(如果驱动程序支持 TRUE 和模拟准备),或者尝试使用 native 准备好的语句(如果 FALSE)。如果驱动程序无法成功准备当前查询,它将始终回退到模拟准备好的语句。

关于mysql - Laravel API 的 mysql 查询未在 performance_schema.events_statements_summary_by_digest 中被跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49714386/

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