laravel10连接多个sql server数据库,查询性能太低的问题

1. 运行环境

服务器和数据库都在国外,但在同一个区域.

1). 当前使用的 Laravel 版本?

laravel10.0

2). 当前使用的 php/php-fpm 版本?

PHP 版本:8.2.25

php-fpm 版本:

3). 当前系统

debian12
docker25.0.5

4). 业务环境

在测试环境,并没有使用任何负载均衡,因为内部在测试

5). 相关软件版本

使用Nginx1.25.2
数据库: sql server 2008

2. 问题描述?

在一个查询中, 使用了三个数据库
第一次查询时, 都要创建一次数据库连接
三个数据库, 就要创建三次连接
而且当查询结束后, 停几秒后再查询, 好像又要创建创建连接
导致查询的效率很慢
之前这个功能是用.net开发的, 整个查询下来才400毫秒左右
但现在使用laravel10翻写后, 每次查询下来, 短的在3秒左右, 时间长的话, 又时可以达到 10秒以上了.(sql语句都没有问题, 不牵扯索引和优化, 和.net使用的同一个数据库)
使用pdo_sqlsqv,sqlsqv
本想着使用持久连接, 但好像不支持这个设置

'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('SQLSRV_DATABASE_URL'),
            'host' => env('SQLSRV_DB_HOST', 'localhost'),
            'port' => env('SQLSRV_DB_PORT', '1433'),
            'database' => env('SQLSRV_DB_DATABASE', 'forge'),
            'username' => env('SQLSRV_DB_USERNAME', 'forge'),
            'password' => env('SQLSRV_DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
            'encrypt' => env('DB_ENCRYPT', 'yes'),
            'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
            'options' => [
                \PDO::ATTR_EMULATE_PREPARES => false, // 禁用模拟预处理
                \PDO::ATTR_PERSISTENT => true, // 开启持久连接
                \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, // 设置错误模式为抛出异常
                \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, // 设置默认的 fetch 模式
                \PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 30, // 设置查询超时时间
                \PDO::SQLSRV_ATTR_DIRECT_QUERY => true, // 根据需要启用直接查询模式

            ]
        ],

增加\PDO::ATTR_PERSISTENT => true设置后会报错:
SQLSTATE[IMSSP]: An unsupported attribute was designated on the PDO object.

3. 您期望得到的结果?

期望能提高查询速度, 尽量能控制在1秒左右, 不知道有什么其他方法可以提高效率

4. 您实际得到的结果?

使用laravel10翻写后, 每次查询下来, 短的在3秒左右, 时间长的话, 又时可以达到 10秒以上了.(sql语句都没有问题, 不牵扯索引和优化, 和.net使用的同一个数据库)

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

能否通过再database配置中创建3个连接方式sqlsrv,sqlsrv1,sqlsrv2,在Model中设置不同的connection,这样用三个模型去查询是不是会更快一些?

10个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!