LinkedServer "Недостаточно памяти при чтении кортежей" - PullRequest
0 голосов
/ 05 мая 2020

Мы настроили связанный сервер для доступа к базе данных нашего приложения «PostgreSQL» на SQL Server 2012.

Я получаю следующую ошибку, просто сохраняя данные с определенного связанного сервера на одном из временные таблицы. Я также попытался сохранить в физической таблице, но с той же ошибкой.

Запрос:

if object_id ('tempdb..#quotestpremium') is not null drop table tempdb..#quotestpremium
Select * into tempdb..#quotestpremium from
(Select * from [RWPRODMAIN].[dwh001].[apps_u001].quotestpremium)a
go

Ошибка:

**Database name 'tempdb' ignored, referencing object in tempdb.
Database name 'tempdb' ignored, referencing object in tempdb.
OLE DB provider "MSDASQL" for linked server "RWPRODMAIN" returned message "Out of memory while reading tuples.".
Msg 7399, Level 16, State 1, Line 29
The OLE DB provider "MSDASQL" for linked server "RWPRODMAIN" reported an error. The provider ran out of memory.
Msg 7306, Level 16, State 2, Line 29
Cannot open the table ""dwh001"."apps_u001"."quotespremium"" from OLE DB provider "MSDASQL" for linked server "RWPRODMAIN".** 

В этой таблице 453K записей.

Пожалуйста, поделитесь своим опытом, если вы столкнулись с подобной проблемой.

1 Ответ

1 голос
/ 06 мая 2020

После перезапуска SQL Сервер действительно выглядит лучше. Он создал временную таблицу с 450K + записями. Имеет ли смысл или помогает получить выше любую из вышеперечисленных деталей?

Сторонние драйверы ODB C и поставщики Ole Db печально известны утечкой памяти, а SQL Сервер обычно не работает в течение недель или месяцев между перезапусками. Это очень плохая комбинация. Обычно лучше использовать сторонние драйверы в пакете SSIS или другой краткосрочной внешней программе и избегать их загрузки в адресное пространство SQL сервера.

В качестве альтернативы вы можете периодически перезапускать SQL сервер как обходной путь.

...