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使用的同一个数据库)

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

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

9个月前 评论

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