AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 285398
Accepted
Vladimir Baranov
Vladimir Baranov
Asked: 2021-02-15 18:10:19 +0800 CST2021-02-15 18:10:19 +0800 CST 2021-02-15 18:10:19 +0800 CST

Não é possível buscar uma linha do provedor OLE DB "SQLNCLI11" para o servidor vinculado

  • 772

Eu tenho dois SQL Servers em duas máquinas diferentes em algum lugar na nuvem (talvez Azure).

Um deles é o Microsoft SQL Server 2012 (SP3-CU10) (KB4025925) - 11.0.6607.3 (X64) 8 de julho de 2017 16:43:40 Copyright (c) Microsoft Corporation Standard Edition (64 bits) no Windows NT 6.3 (Build 9600: ) (Hipervisor)

Neste servidor existe um link para o segundo servidor.

O segundo servidor ( aae-sqldw-02) é o Microsoft SQL Server 2016 (SP1-CU15-GDR) (KB4505221) - 13.0.4604.0 (X64) 15 de junho de 2019 07:56:34 Copyright (c) Microsoft Corporation Enterprise Edition: licenciamento baseado em núcleo (64 -bit) no Windows Server 2016 Datacenter 10.0 (Build 14393: ) (Hypervisor)

No primeiro servidor estamos executando uma consulta "simples":

TRUNCATE TABLE [dbo].[LocalTable]

INSERT INTO [dbo].[LocalTable]
    ([DatabaseName]
    ,[SalesContractNumber]
    ,... 60 columns
    )
SELECT
    convert(varchar(128), DatabaseName) collate Latin1_General_CI_AS
    ,convert(varchar(60), SalesContractNumber) collate Latin1_General_CI_AS
    ,... 60 columns
FROM [aae-sqldw-02].[Fin_DWH].[dbo].[RemoteView]
WHERE DatabaseName = 'somename'

Esta consulta às vezes falha com um erro:

Cannot fetch a row from OLE DB provider "SQLNCLI11" for linked server "aae-sqldw-02".

ou com este erro:

Cannot fetch the rowset from OLE DB provider "SQLNCLI11" for linked server "aae-sqldw-02". .

Eu sei que o segundo servidor está sob uma carga muito pesada a maior parte do dia. Ele literalmente maximiza sua E/S de disco (255 MB/s). A solução de força bruta é simplesmente movê-lo para um plano mais caro com mais IO. Essa mudança precisa de muita burocracia e levará muito tempo. Além disso, não há garantia de que o próximo nível será suficiente.

carga do servidor

Existe alguma coisa que eu possa fazer com os recursos fornecidos agora?

Quando uma consulta é concluída com êxito, pode levar de 1 a 3 horas. A consulta retorna cerca de 3 milhões de linhas, cerca de 4 GB de dados, portanto, não muito.

Quando uma consulta falha com Cannot fetch a row, nas últimas vezes ela falhou após 9.294 segundos (2,5 horas), 12.326 segundos (3,5 horas).

Quando uma consulta falha com Cannot fetch the rowset, ela falhou após 606 segundos, 611 segundos.

Portanto, 600 segundos sugerem algum tempo limite padrão de 10 minutos (para conexão?) Nos casos em que a conexão foi bem-sucedida, ela começou a buscar os dados, mas falhou no processo. Talvez o servidor vinculado não tenha conseguido enviar a próxima linha com rapidez suficiente e algum outro tempo limite foi ativado.

Quando uma consulta foi bem-sucedida, levou 3841 segundos da última vez.

Aqui estão as configurações para o servidor vinculado:

EXEC master.dbo.sp_addlinkedserver @server = N'aae-sqldw-02', @srvproduct=N'SQL Server'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'aae-sqldw-02',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO

EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'collation compatible', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'dist', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'pub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'rpc', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'rpc out', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'sub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'connect timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'collation name', @optvalue=null
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'lazy schema validation', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'query timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'use remote collation', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'aae-sqldw-02', @optname=N'remote proc transaction promotion', @optvalue=N'true'

O que você acha, faria alguma diferença se eu definir explicitamente a query timeoutopção para algo como 5 horas? Pode piorar as coisas?

Obviamente, a correção adequada seria observar o que está acontecendo no servidor e otimizar as consultas para reduzir a carga geral, mas há algo que eu possa fazer em um nível de servidor / banco de dados mais alto, para que a consulta seja concluída, mesmo que leva muito tempo?

Precisamos executar essa consulta uma vez por semana e agora temos que tentar novamente várias vezes até que ela seja concluída com sucesso.

sql-server sql-server-2012
  • 1 1 respostas
  • 3756 Views

1 respostas

  • Voted
  1. Best Answer
    J.D.
    2021-02-16T06:15:13+08:002021-02-16T06:15:13+08:00

    De acordo com nossa discussão nos comentários, acho que este documento da Microsoft pode ser o que você está procurando, exceto que tenho a sensação de que isso é aplicável apenas a uma instância local e você não poderá ajustar isso no Azure.

    Também encontrei uma postagem do StackOverflow tangencialmente relacionada em que a resposta aceita era aumentar as DTUs para uma carga de trabalho de E/ S altamente intensiva , mesmo que você apenas dimensionasse temporariamente para executar essa consulta e reduzisse quando ela fosse concluída. (Mais uma vez, escalar para um nível baseado em NVMe pode compensar momentaneamente aqui.)

    Infelizmente, os erros que você está recebendo não têm muitas informações concretas e têm causas bastante variadas. O único que achei que pode ser relevante para o seu caso é esta postagem do StackExchange em que o problema ocorreu devido a impasses ocorrendo no servidor vinculado. Talvez você esteja se deparando com o mesmo problema? (O que teoricamente poderia ser uma questão de tempo resultante do rastreamento do servidor para outras consultas em execução simultânea quando o E/ S está no máximo.)

    Fora isso, a única outra opção que acho que você tem é ajustar a própria consulta para melhorar o desempenho. Mesmo sendo limitado a ~250 MB/s de IO aqui, 4 GB de dados devem ser processados ​​em cerca de 16 segundos + qualquer gargalo que possa ser adicionado para a latência da rede. Mas 1+ horas definitivamente parece fora, mesmo para 3 milhões de linhas (os impasses parecem mais suspeitos talvez). Para o erro que você está recebendo, que não é diretamente um erro de tempo limite , considere conversar com um representante do Azure para ver se há mais sobre seu problema subjacente.

    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve