首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel的mysql查询在performance_schema.events_statements_summary_by_digest中未被跟踪

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

Stack Overflow用户
提问于 2018-04-08 04:20:59
回答 1查看 566关注 0票数 10

我在这里面临着一些非常奇怪的问题。我们有一个托管在AWS EC2上的laravel,我们使用RDS (MySQL5.6)。我最近在RDS上启用了performance_schema。以下是我注意到的行为

  1. 我们在RDS实例上有两个数据库。一个用于wordpress,另一个用于我们的laravel。Wordpress数据库查询被理解得很好。但是从我们的laravel应用程序中运行的查询却不是。
  2. 由于某种原因,当我将MySql工作台连接到RDS实例并在我们的Laravel数据库上执行查询时,它们就会出现在语句摘要中。
  3. 我登录到我的EC2机器,连接到RDS上的MySQL,执行一些查询,这些查询在语句摘要中被跟踪。

因此,看起来只有当从我们的Laravel执行查询时,才不会跟踪.。

我们的Laravel版本是4.2。我正试图找出过去两天的原因,任何帮助都将是一种解脱。

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

-编辑--

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

代码语言:javascript
复制
$stmt = $pdo->query('SELECT name FROM trades');
        while ($row = $stmt->fetch())
        {
            echo $row['name'] . "\n";
        }

它出现在查询分析[https://prnt.sc/j3ochd]中(我也手动检查了[https://prnt.sc/j3ochd])。

但是,我可以点击我们的laravel,它实际上是从table本身返回条目(非常像我上面运行的查询)。但这会出现在我的查询分析报告( Percona )或events_statements_summary_by_digest中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-12 09:05:40

必须将数据库>连接设置中的options参数作为PDO::ATTR_EMULATE_PREPARES => true传递

配置> database.php

代码语言:javascript
复制
'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启用或禁用已准备好的语句的仿真。有些驱动程序不支持本机准备的语句,或者对它们的支持有限。使用此设置可以强制PDO始终模拟准备好的语句(如果驱动程序支持TRUE和仿真器准备),或者尝试使用本机准备语句(如果为FALSE)。如果驱动程序无法成功地准备当前查询,则始终返回到模拟准备语句。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49714386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档