Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel API的mysql查询未在性能\u schema.events\u语句\u summary\u by\u摘要中得到跟踪_Mysql_Laravel_Laravel 4_Amazon Rds_Database Performance - Fatal编程技术网

Laravel API的mysql查询未在性能\u schema.events\u语句\u summary\u by\u摘要中得到跟踪

Laravel API的mysql查询未在性能\u schema.events\u语句\u summary\u by\u摘要中得到跟踪,mysql,laravel,laravel-4,amazon-rds,database-performance,Mysql,Laravel,Laravel 4,Amazon Rds,Database Performance,我在这里面临着一些非常奇怪的问题。我们在AWS EC2上有一个laravel API,我们使用RDS mysql 5.6。我最近在RDS上启用了性能模式。以下是我注意到的行为 我们的RDS实例上有两个数据库。一个用于wordpress,一个用于我们的laravel API。Wordpress数据库查询得到了很好的理解。但从我们的laravel应用程序运行的查询不是。 出于某种原因,当我将MySql Workbench连接到RDS实例并在我们的Laravel数据库上执行查询时,它们会出现在语句摘要

我在这里面临着一些非常奇怪的问题。我们在AWS EC2上有一个laravel API,我们使用RDS mysql 5.6。我最近在RDS上启用了性能模式。以下是我注意到的行为

我们的RDS实例上有两个数据库。一个用于wordpress,一个用于我们的laravel API。Wordpress数据库查询得到了很好的理解。但从我们的laravel应用程序运行的查询不是。 出于某种原因,当我将MySql Workbench连接到RDS实例并在我们的Laravel数据库上执行查询时,它们会出现在语句摘要中。 我登录到我的EC2机器,在RDS上连接到MySQL并执行一些查询,它们在语句摘要中得到跟踪。 因此,看起来只有当从我们的Laravel应用程序执行查询时,它们才不会被跟踪

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

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

-编辑-

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

$stmt = $pdo->query('SELECT name FROM trades');
        while ($row = $stmt->fetch())
        {
            echo $row['name'] . "\n";
        }
它出现在查询分析中[我手动检查了性能\u模式。事件\u语句\u摘要\u以及\u摘要]

但是,我可以点击我们的laravel api,它实际上会从交易表本身返回条目,这与我上面运行的查询非常相似。但这会出现在我的查询分析报告Percona PMM或事件声明摘要中,您必须将数据库>连接设置中的选项参数作为PDO::ATTR\u EMULATE\u PRE传递PARES=>true

config>database.php ]

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

下面是关于它的快速细节


PDO::ATTR_EMULATE_PREPARES启用或禁用已准备语句的模拟。有些驱动程序不支持本机编写的语句,或者对它们的支持有限。使用此设置可以强制PDO在驱动程序支持TRUE和emulated prepared的情况下始终模拟prepared语句,或者在FALSE的情况下尝试使用本机prepared语句。如果驱动程序无法成功地准备当前查询,它将始终返回到模拟准备好的语句。

我不知道准备的相关性如何。无论是否准备好,请选择。。。最终被发送到服务器,服务器将在需要时记录它。@RickJames我很困惑,但vikash似乎是正确的。在进行此更改之后,do查询似乎开始出现在摘要中。[似乎也是如此。在比较了SQL prompt和C API中预处理语句的插入的当前行为之后,我们发现在这两种情况下,预处理语句中使用的实际查询的插入都没有得到验证done@vikash-pathak我在某个地方读到如果我做了改变所有字段都将以字符串形式返回。有点担心这是否会以某种方式破坏我们现有的应用程序。但对于我提出的问题,您的解决方案似乎是可行的。所以接受
'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
        ]
    ],