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

Niels Broertjes's questions

Martin Hope
Niels Broertjes
Asked: 2023-05-26 20:50:34 +0800 CST

SET SINGLE_USER preso no tipo de espera PRINT_ROLLBACK_PROGRESS

  • 6

Desejo descartar um banco de dados em um de nossos sistemas (SQL Server 2016 SP2 CU17), mas o processo para definir o banco de dados no modo de usuário único está travado no tipo de espera PRINT_ROLLBACK_PROGRESS. Eu uso a declaração abaixo.

GO
ALTER DATABASE MyDatabaseName
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

Além disso, a guia de mensagens gera esta mensagem um milhão de vezes:

"Transações não qualificadas estão sendo revertidas. Conclusão estimada da reversão: 0%."

Também deixamos o extrato funcionando por 1,5 horas e, infelizmente, sem sorte.

Portanto, verifiquei se havia alguma transação aberta com DBCC OPENTRAN para o banco de dados, mas não havia. Em segundo lugar, sp_WhoIsActive não mostra nenhum processo ativo no banco de dados. Sp_who2 também não mostra mais nenhuma conexão com o banco de dados em questão. Encontrei um tópico em algum lugar que sugeria desativar a opção de banco de dados AUTO_UPDATE_STATISTICS_ASYNC, mas isso já estava desativado.

Eu realmente suspeito, no entanto, que haja algum processo do sistema que esteja fazendo algo que impeça a declaração acima de definir com sucesso o banco de dados no modo de usuário único. Eu também tentei WITH NO_WAIT, mas isso me deu uma mensagem de erro após o tempo limite conforme o esperado. Também desativei AUTO_UPDATE_STATISTICS só para ter certeza, mas isso não ajudou, é claro.

Acho que uma reinicialização do servidor será possível, pois não há processos de usuário que estão sendo revertidos, portanto, não espero nenhum tempo de inicialização extremamente longo. No entanto, uma reinicialização só será possível daqui a 2 semanas, já que este é um servidor de produção, então estou procurando uma maneira mais limpa de fazer isso funcionar. Espero que alguém possa ajudar.

sql-server
  • 1 respostas
  • 60 Views
Martin Hope
Niels Broertjes
Asked: 2022-06-21 04:47:00 +0800 CST

A distinção entre maiúsculas e minúsculas não funciona

  • 1

Eu tenho um problema em que continuo obtendo o valor 'CtP_PETER_Fact' da consulta abaixo. Deve ser uma cláusula where sensível a maiúsculas e minúsculas. Eu tentei de algumas maneiras diferentes: definindo a instrução COLLATE após 'Where ObjectName' no select, após a expressão regular e criando a coluna com o agrupamento. Eu continuo recebendo a saída que eu não esperaria. É algum problema com minha expressão regular, talvez? Também fiz muitas experiências com a expressão regular, mas não consigo fazê-la funcionar.

IF OBJECT_ID('tempdb..#nameFacts') IS NOT NULL
DROP TABLE #nameFacts;


CREATE TABLE #nameFacts (


    objectname varchar(200) COLLATE SQL_Latin1_General_CP1_CS_AS,
    ObjectType varchar(40)

)


insert into #nameFacts (objectname, ObjectType)
values
 ('BPD_Inslap_Fact','Fact')
,('CTP_HENK_FACT','Fact')
,('CTP_PETER_Fact','Fact')
,('CTP_PETER_FACT','Fact')
,('CtP_PETER_Fact','Fact')
,('C0P_PETER_Fact','Fact')
,('C0P_PETER_FACT','FACT')


SELECT *
FROM #nameFacts
WHERE
ObjectName --COLLATE SQL_Latin1_General_CP1_CS_AS 
            LIKE '[A-Z0-9][A-Z][A-Z][_][A-Z][A-Z][A-Z][A-Z][A-Z][_][F][a][c][t]' --COLLATE SQL_Latin1_General_CP1_CS_AS


IF OBJECT_ID('tempdb..#nameFacts') IS NOT NULL
DROP TABLE #nameFacts;

Continuo recebendo a saída abaixo, onde não esperaria o valor 'CtP_PETER_Fact'. Estou no SQL Server 2016 SP2 CU 17.

a saída

sql-server sql-server-2016
  • 1 respostas
  • 78 Views
Martin Hope
Niels Broertjes
Asked: 2021-12-24 22:29:14 +0800 CST

Particionamento de tabela em uma tabela existente e usando diferentes grupos de arquivos

  • 0

Eu tenho uma tabela existente no grupo de arquivos primário, que desejo particionar. A chave de partição está no ano, que é uma coluna calculada. Eu quero particionar a tabela de tal forma que, no final, os dados de cada ano estejam em seu próprio grupo de arquivos. Eu primeiro quero dividir por 2 anos, para depois testar um pouco mais sobre como dividir os outros dados com o comando split. Agora, posso criar a função e o esquema de partição e também vejo que os dados de um determinado ano estão na partição correta, mas não consigo obter os dados físicos nos grupos de arquivos corretos. Parece que os dados ainda residem nesse grupo de arquivos primário. Tentei reconstruir o índice, mas isso ainda não move os dados no grupo de arquivos correto. No final, a tabela terá um índice columnstore clusterizado, mas também tentei com um índice rowstore clusterizado. O motivo pelo qual fiz isso é porque o SQL Server não parece permitir que um índice columnstore divida e mescle partições não vazias (tentei algumas coisas com divisão e mesclagem, mas o mesmo resultado), então pensei que isso pelo menos funcionaria. Por favor, preencha-me sobre isso se você tiver quaisquer sugestões ou comentários. Estou usando o SQL Server 2019 a propósito.

Agora para o código, eu uso o banco de dados Stackoverflow2013:

use StackOverflow2013;
go

-- Create file groups for partitions
alter database [StackOverflow2013]
add filegroup StackOverflow2013_2008;

ALTER DATABASE [StackOverflow2013]
    ADD FILE 
    (
    NAME = [StackOverflow2013_2008],
    FILENAME = 'E:\DATA\StackOverflow2013_2008.ndf',
        SIZE = 1024 KB, 
        MAXSIZE = UNLIMITED, 
        FILEGROWTH = 512 MB
    ) TO FILEGROUP [StackOverflow2013_2008]
    
alter database [StackOverflow2013]
add filegroup StackOverflow2013_2009;

ALTER DATABASE [StackOverflow2013]
    ADD FILE 
    (
    NAME = [StackOverflow2013_2009],
    FILENAME = 'E:\DATA\StackOverflow2013_2009.ndf',
        SIZE = 1024 KB, 
        MAXSIZE = UNLIMITED, 
        FILEGROWTH = 512 MB
    ) TO FILEGROUP [StackOverflow2013_2009]


-- Drop the current default index, we want to build one later on the partition key
ALTER TABLE [dbo].[Comments] DROP CONSTRAINT [PK_Comments_Id] WITH ( ONLINE = OFF )

-- Add partition key column
alter table [StackOverflow2013].[dbo].[Comments]
add [year] as (datepart(year, CreationDate));

go
-- Add partition function based on year 
-- For now we only want 2008 and 2009, other years will be migrated later to test with split function
create partition function fun_Comments(int)
as range left for values (2008, 2009);

-- Add partition scheme
create partition scheme scheme_Comments
as partition fun_Comments
to (StackOverflow2013_2008, StackOverflow2013_2009, [Primary]);

-- Check the partition numbers and who's next
SELECT DestinationId = DestinationDataSpaces.destination_id
    ,FilegroupName = Filegroups.name
    ,PartitionHighBoundaryValue = PartitionRangeValues.value
    ,IsNextUsed = CASE 
        WHEN DestinationDataSpaces.destination_id > 1
            AND LAG(PartitionRangeValues.value, 1) OVER (
                ORDER BY DestinationDataSpaces.destination_id ASC
                ) IS NULL
            THEN 1
        ELSE 0
        END
FROM sys.partition_schemes AS PartitionSchemes
INNER JOIN sys.destination_data_spaces AS DestinationDataSpaces ON PartitionSchemes.data_space_id = DestinationDataSpaces.partition_scheme_id
INNER JOIN sys.filegroups AS Filegroups ON DestinationDataSpaces.data_space_id = Filegroups.data_space_id
LEFT OUTER JOIN sys.partition_range_values AS PartitionRangeValues ON PartitionSchemes.function_id = PartitionRangeValues.function_id
    AND DestinationDataSpaces.destination_id = PartitionRangeValues.boundary_id
WHERE PartitionSchemes.name = N'scheme_Comments'
ORDER BY DestinationId ASC;

insira a descrição da imagem aqui

Verifique as linhas da partição 1


SELECT * FROM Comments 
WHERE $PARTITION.fun_Comments(year) = 1; 

insira a descrição da imagem aqui

Verifique as linhas da partição 2

SELECT * FROM Comments 
WHERE $PARTITION.fun_Comments(year) = 2; 

insira a descrição da imagem aqui

Verifique os tamanhos dos arquivos

(consulta muito grande)

insira a descrição da imagem aqui

-- Cria um novo índice clusterizado para distribuir corretamente os dados

create clustered index [CCIX_Comments] ON [dbo].[Comments] (year)

Verifique os tamanhos dos arquivos novamente

insira a descrição da imagem aqui

Portanto, parece-me que todos os dados ainda estão no grupo de arquivos primário, porque os novos grupos de arquivos estão vazios. A tabela tem 7 GB, então eu esperaria pelo menos que alguns dados estivessem lá.

Então, basicamente, minha pergunta é: como redistribuir corretamente os dados pelos arquivos nos grupos de arquivos neste cenário?

sql-server partitioning
  • 1 respostas
  • 132 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