【发布时间】:2017-04-24 04:18:14
【问题描述】:
你好,所以,
我目前正在尝试运行处理 apx ~50k 记录的存储过程。它将记录排序到不同的表中,删除一些记录等。
但是,相对较长的预处理语句总是会导致以下错误:
> [2016-12-08 19:28:24] local.INFO: PDOException: SQLSTATE[HY000]:
> General error: 20003 Adaptive Server connection timed out [20003]
> (severity 6) [(null)] in
> /vendor/laravel/framework/src/Illuminate/Database/Connection.php:479
> Stack trace:
> #0 /vendor/laravel/framework/src/Illuminate/Database/Connection.php(479):
> PDOStatement->execute()
> #1 /vendor/laravel/framework/src/Illuminate/Database/Connection.php(762):
> Illuminate\Database\Connection->Illuminate\Database\{closure}(Object(Illuminate\Database\SqlServerConnection),
> 'EXEC dbo.cleanD...', Array)
> #2 /vendor/laravel/framework/src/Illuminate/Database/Connection.php(725):
> Illuminate\Database\Connection->runQueryCallback('EXEC dbo.cleanD...',
> Array, Object(Closure))
> #3 /vendor/laravel/framework/src/Illuminate/Database/Connection.php(480):
> Illuminate\Database\Connection->run('EXEC dbo.cleanD...', Array,
> Object(Closure))
> #4 /vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(317):
> Illuminate\Database\Connection->statement('EXEC dbo.cleanD...')
> #5 /vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(237):
> Illuminate\Database\DatabaseManager->__call('statement', Array)
让我明白的是,通过使用 laravel 块,我能够毫无意外地插入大约 5 万条记录:
$data = $data->chunk(500);
foreach ($data as $rows) {
Log::info("INSERT START: " . date('l jS \of F Y h:i:s A'));
DB::table("the.db")->insert($rows->toArray());
}
但只要存储过程运行(可能需要大约 2-4 分钟)
我收到上述错误。我尝试了很多不同的解决方案,包括将存储过程分解为更小的存储过程,但仍然出现错误。
总是同样的错误:
General error: 20003 Adaptive Server connection timed out [20003] (severity 6) [(null)] in /vendor/laravel/framework/src/Illuminate/Database/Connection.php:479
我偷偷怀疑某处(在 laravel?php.ini?)我可能不得不为 数据库
设置超时限制任何帮助,提前谢谢!
【问题讨论】:
-
是否有可能将查询分解为几个较小的查询?另外,您可以使用 SQL Server 作业吗?
-
我做到了,不幸的是,花费最多时间的脚本需要保持在一起
-
如果可能的话,可能值得考虑将其设为 Job,特别是如果它按固定时间表运行。
-
这是一个每月上传一次的巨大 excel 表并被处理,我可能会重做逻辑(我刚从这里开始)我之前的人做了所有的“业务逻辑”数据库
-
是的,一旦有时间,我绝对会建议您-数据库通常对于数据处理类型的任务非常快,对于业务逻辑非常慢(而且显然,将它们分开是更好的架构,您不这样做)不希望在数据库层中出现业务逻辑,原因与它不应该出现在 UI 中的原因相同)。
标签: php sql sql-server laravel