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-80299

Dryadwoods's questions

Martin Hope
Dryadwoods
Asked: 2024-01-24 17:48:13 +0800 CST

MS SQL Server - Tabela com lógica de fila - Como posso ter certeza de que tarefas paralelas não recuperarão o mesmo ID?

  • 8

Eu tenho uma tabela sys_QueueJobque armazena dados lógicos da fila.

Achei que bastaria ter uma atualização com retorno... Porém, agora não tenho certeza se isso é 100% seguro.

Como posso ter certeza de que, independentemente de muitas solicitações paralelas, não retornarão o mesmo ID?

UPDATE sys_QueueJob
SET ExecutionStartedOn = GETDATE()
OUTPUT DELETED.Id as Result
WHERE Id = (select top 1 x.Id
            from sys_QueueJob x with (rowlock, updlock, readpast)
                        where x.ExecutionFinishedOn is null
                            AND (
                                x.ExecutionStartedOn is null
                                OR x.ExecutionStartedOn < DATEADD(HOUR, -1, GETDATE())
                               )
                        order by x.CreatedOn asc)
sql-server
  • 2 respostas
  • 631 Views
Martin Hope
Dryadwoods
Asked: 2020-02-11 05:04:02 +0800 CST

Inserir com resultado da função - evite duplicatas

  • 1

Eu tenho uma função MS Sql que tem alguma lógica para processar o próximo ID de um elemento (concats letras com números com base em alguma lógica de negócios, também com base em um select count()).

De alguma forma, durante os últimos dias (em ambiente de produção), já que o sistema está sendo usado por mais usuários simultâneos, conseguimos algumas duplicatas.

A lógica existente é muito simples:

insert into XXXX (A,B,C,D,E) 
select dbo.GiveMeNewID(getdate()), @ParamB, @ParamC, @ParamD, @ParamE

De alguma forma, o GiveMeNewId devolveu o mesmo ID em duas solicitações paralelas.

Esta função é utilizada no momento em diferentes lugares, dentro de um Stored Procedure e também a partir de uma construção SQL "dinâmica" de um "cliente C#".

Eu não quero implementar uma camada "singleton" em algum software intermediário.

Alguma ideia de como resolver este problema? Obrigado.

PS: para testar eu tinha as seguintes linhas dentro da função SQL para poder rodar diferente o insert em diferentes janelas.

/*********************************************************/
declare @dtStart datetime=getutcdate()
while datediff(second,@dtStart,getutcdate()) < 10
begin
    set @dtStart = @dtStart
end
/*********************************************************/
sql-server locking
  • 2 respostas
  • 137 Views
Martin Hope
Dryadwoods
Asked: 2019-07-18 06:58:33 +0800 CST

SQL Server - Atualização com saída não funcionando em ambiente paralelo

  • 1

Eu sei que o parâmetro de saída não garante lógica de paralelismo. E a lógica que quero implementar está falhando em um ambiente multi-thread.

Para testar isso, basta abrir 2 janelas e executá-las lado a lado o mais rápido possível. Em seguida, compare os Ids, alguns serão duplicados.

declare @id int 
select @id = 1
while @id >=1 and @id <= 100
begin
    UPDATE sys_QueueJob
    SET StartedOn = GETDATE()
    OUTPUT DELETED.Id as Result
    WHERE Id = (select top 1 qj.Id 
                    from sys_QueueJob qj
                    where qj.ProcessedOn is null AND qj.StartedOn is null                                                   
                    order by CreatedOn asc)
    print 'Count: ' + convert(nvarchar(max), @id)
    select @id = @id + 1
end

Eu só quero pegar a entrada mais antiga da tabela qeueJob que ainda não foi iniciada e ao mesmo tempo dizer que agora ela foi iniciada. E o mesmo código precisa me fornecer 100% de certeza de que a próxima execução me dará o próximo ID correto.

Como posso fazer isso?

sql-server parallelism
  • 1 respostas
  • 193 Views
Martin Hope
Dryadwoods
Asked: 2018-03-22 01:47:06 +0800 CST

SQL Management Studio - Complemento/Extensão para visualizar o Tipo de Dados da Coluna

  • 2

Existe alguma maneira (integrada) ou complemento/extensão gratuito/pago para SQL Management Studio que nos permite saber exatamente um tipo de dados de uma coluna quando estamos escrevendo uma consulta?

Neste projeto específico, tive situações em que, olhando o resultado da consulta, não tenho exatamente certeza do tipo de dados, se é um número escrito em uma coluna nvarchar(max) .... ou se é um tinyint ou int , ou bigint, etc....

E estou gastando tanto tempo apenas para fazer drill na "lista de árvores" para chegar a uma tabela específica e expandir o nó Columns para descobrir com o que estou lidando ....

Uma situação em que você tem um monte de JOINS (e allias) e sp_help <tablename>exige que eu sempre vá para alguma outra janela de consulta e digite mais sql (nomes de tabela).... então seria mais fácil e rápido apenas ter uma mensagem de dica de ferramenta da coluna com informações extras.

sql-server ssms
  • 1 respostas
  • 149 Views
Martin Hope
Dryadwoods
Asked: 2016-04-12 04:18:13 +0800 CST

Como definir "On Update" para uuid ()

  • 0

A sintaxe para definir um valor de atualização para timestamp é a seguinte:

CREATE TABLE Example1 (
    ...
    `RowVersion` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ...
);

Posso alterar o tipo de dados de carimbo de data/hora para coluna GUID por:

`RowVersion` CHAR(36) NOT NULL DEFAULT 'uuid()'

Mas eu não posso escrever:

 `RowVersion` CHAR(36) NOT NULL DEFAULT 'uuid()' ON UPDATE 'uuid()',

Como posso definir um novo uuid () quando a linha é atualizada sem criar um gatilho?

mysql
  • 1 respostas
  • 1891 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