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 / user-44358

eddie_cat's questions

Martin Hope
eddie_cat
Asked: 2015-09-10 05:32:32 +0800 CST

Procedimento armazenado de repente muito lento, atualizando as estatísticas não ajudando

  • 3

Como diz o título, tenho um procedimento armazenado que de repente começou a ser executado muito lentamente. Anteriormente, levava cerca de 5 segundos para ser executado, agora leva sete minutos ou mais. Isso parece ter começado quando alterei o procedimento, mas a alteração que fiz não deveria ter afetado o desempenho, pois tudo o que fiz foi alterar o alias em duas colunas que estão sendo retornadas. Não tenho certeza se alterar o procedimento realmente causou isso, no entanto, porque um procedimento semelhante que também costumava ser muito rápido está tendo os mesmos problemas.

Tentei atualizar as estatísticas nas tabelas relevantes e não ajudou. Eu tive esse mesmo problema na semana passada e consegui consertá-lo fazendo isso, mas agora é impossível. Também tentei usar with recompilesem sucesso e excluí o procedimento e o adicionei novamente.

Esta é a linha que está demorando muito mais do que antes:

select PK_ShipDataSubsystemConfigID
,timestamp
,cast((
        select top 1 Longitude
        from [RemoteServer].[dbo].[Ships].LocationAttributes la
        inner join [RemoteServer].[dbo].[Ships].Locations l on l.ShipLocationId = la.ShipLocationId
        where l.SampleDateTime <= timestamp
            and l.SampleDateTime <= @ToDT
            and ShipId = @ShipId
        order by SampleDateTime desc
        ) as varchar(20)) as Longitude
,'Vessel Position Lng'
from FuelCalc
inner join ShipDataSubsystemConfig s on s.PK_ShipDataSubsystemConfigID =       FuelCalc.FK_ShipDataSubsystemConfigId
where timestamp > @FromDT
and timestamp < @ToDT
and FuelCalc.FK_ShipId = @ShipId
order by timestamp desc

A execução da seleção interna sozinha agora leva pelo menos 2 segundos, para que eu possa entender por que todo o procedimento está demorando tanto. Eu estou querendo saber se tem algo a ver com ser uma chamada para um servidor vinculado. Tentei criar uma view juntando as tabelas Locations e LocationAttributes para ver se fazia diferença, mas não deu.

Alguma ideia? Perguntei aos meus colegas de trabalho e eles estão apenas dizendo que preciso escrever uma consulta mais eficiente (o que pode ser verdade), mas realmente não acho que isso esteja causando meu problema específico, visto que estava funcionando bem até que de repente não estava . Eu olhei para o plano de execução, mas tudo o que diz é que a consulta remota está demorando 100% do tempo, mas não mostra o plano com mais detalhes do que isso.

sql-server t-sql
  • 1 respostas
  • 1542 Views
Martin Hope
eddie_cat
Asked: 2015-03-27 09:08:34 +0800 CST

Como posso mapear um login para um banco de dados usando T-SQL (não SSMS)

  • 16

Estou escrevendo um programa que exige que eu atribua todas as permissões e tudo no código. Eu fiquei preso nesta parte:

insira a descrição da imagem aqui

Eu só quero fazer o equivalente a clicar na pequena caixa em "Map" para o banco de dados msdb e atribuir esse usuário à função SqlAgentUser. Eu preciso de um usuário para poder adicionar/editar trabalhos do SQL Server Agent. Posso obter as configurações corretas usando o SSMS, mas não consigo descobrir como fazer isso em SQL bruto.

Eu olhei ALTER LOGIN mas não estou vendo nada que faça o que eu preciso. Eu suspeito que eu simplesmente não sei os termos corretos para o Google. Não costumo fazer esse tipo de coisa.

Qualquer ajuda é muito apreciada!

sql-server t-sql
  • 2 respostas
  • 56615 Views
Martin Hope
eddie_cat
Asked: 2014-08-19 11:49:59 +0800 CST

Mensagens do FlushCache que aparecem no log em horários específicos

  • 24

Temos tido muitos problemas de desempenho de banco de dados ultimamente e tenho tentado ver se consigo descobrir o motivo. Não temos um DBA (sou desenvolvedor de software), então estou meio que improvisando, e muito do que encontro online parece uma língua estrangeira para mim.

Reiniciamos o SQL Server todas as manhãs porque essa é a única maneira de funcionar durante o dia útil. Percebi que todas as manhãs, por volta das 5 da manhã, começamos a receber esta mensagem a cada dois minutos no log:

FlushCache: limpou 11848 bufs com 7432 gravações em 97168 ms (evitou 8139 novos bufs sujos) para db 9:0

última meta pendente: 4, avgWriteLatency 32

taxa de transferência média: 0,72 MB/s, saturação de E/S: 11635, alternâncias de contexto 18849

Os números diferem a cada vez, é claro, mas é a mesma mensagem repetidamente nesse padrão até que eu reinicie o servidor. Não tenho certeza de como interpretar isso, tenho tentado pesquisar no Google sobre isso e tudo o que reuni é que isso significa que pode haver algo errado com a E / S e que algo está demorando mais do que deveria. Recentemente, mudamos para o uso de SSD, então não achei que deveria ser um problema de gravação.

Alguém poderia dar uma luz sobre isso?

sql-server sql-server-2012
  • 1 respostas
  • 60902 Views
Martin Hope
eddie_cat
Asked: 2014-07-25 12:26:51 +0800 CST

Cursores aninhados, vários conjuntos de resultados

  • 0

Estou usando um procedimento armazenado do SQL Server para gerar um relatório do Excel. Basicamente cada "entrada" no relatório tem três partes: Objeto, Observação e Pontos. As observações têm uma referência à chave primária de um objeto e os pontos têm uma referência a uma observação. Essa é a relação entre as partes. (Desculpe se minha terminologia estiver errada, estou acostumado a escrever em C# ou Java, mas ainda aprendendo SQL.)

Eu quero que a saída seja assim:

-Object

  -All Observations linked to that Object

    - Under each observation there should be all the points linked to that observation

E repita para cada objeto. Eu tenho esse trabalho usando um cursor para gerar todas as observações com cada objeto, mas não consigo fazer com que os pontos apareçam em cada observação.

Eu li em toda a Internet que os cursores são ruins e presumo que isso significa que os cursores aninhados são muito ruins. Mas isso é o que eu tenho até agora. Se você souber de uma maneira melhor de fazer isso, por favor me diga. Estou aberto para refatorar totalmente isso, se necessário.

  DECLARE @Object_Cursor cursor
  DECLARE @Observation_Cursor cursor
  DECLARE @i int
  DECLARE @j int
  DECLARE @row int = 1
  SET @Object_Cursor = CURSOR FOR (SELECT PK_ObjectId FROM Objects)
  OPEN @Object_Cursor
  FETCH NEXT FROM @Object_Cursor INTO @i
    While @@FETCH_STATUS = 0
    Begin
    Select 
        PK_ObjectID,
        Name,
        Timestamp
    From Objects where PK_ObjectID = @i


  SET @Observation_Cursor = CURSOR FOR (SELECT @PK_ObservationID FROM Observations)
  OPEN @Observation_Cursor
  FETCH NEXT FROM @Observation_Cursor INTO @j
    While @@FETCH_STATUS = 0
    Begin
    Select
        Timestamp,
        Note,
        User
        from Observations
        where FK_ObjectId = @i
        order by FK_ObjectID

    Select Lat, Lng 
    From Pts
    Where FK_ObservationID = @j
    Fetch Next From @Observation_Cursor into @j
    END

    FETCH NEXT FROM @Object_Cursor into @i
    END

    Close @Observation_Cursor
    DEALLOCATE @Observation_Cursor
    CLOSE @Object_Cursor
    DEALLOCATE @Object_Cursor

Sinto que a ordem em que estou executando esses loops está errada de alguma forma, mas não consegui obtê-la. A saída atual é:

 -Object    
   -Observations for that object
    -empty points result set

Esses resultados são repetidos várias vezes para o mesmo objeto antes de ir para o próximo, e os pontos estão sempre vazios.

Qualquer ajuda ou indicação em outra direção é muito apreciada.

sql-server cursors
  • 1 respostas
  • 1859 Views

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