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

Eitan Blumin's questions

Martin Hope
Eitan Blumin
Asked: 2024-01-19 22:14:06 +0800 CST

A limpeza do CDC não funciona mesmo ao usar sp_cdc_cleanup_change_table que é concluído com sucesso

  • 5

Estou executando a consulta abaixo para encontrar tabelas CDC com dados além da profundidade de retenção configurada:

SELECT DB_ID() AS database_id, ct.capture_instance, object_id, source_object_id
, rcounts.source_table_rows
, rcounts.ct_table_rows
, ct_pstats.used_page_count
, source_pstats.used_page_count
, sys.fn_cdc_map_lsn_to_time(sys.fn_cdc_get_min_lsn(ct.capture_instance))
from cdc.change_tables AS ct
outer apply
(
select source_table_rows = (SELECT SUM(rows) FROM sys.partitions AS p WHERE p.object_id = ct.source_object_id AND p.index_id <= 1)
, ct_table_rows = (SELECT SUM(rows) FROM sys.partitions AS p WHERE p.object_id = ct.object_id AND p.index_id <= 1)
) as rcounts
outer apply
(
select used_page_count = SUM(used_page_count)
from sys.dm_db_partition_stats AS ps
where ps.object_id = ct.object_id
) AS ct_pstats
outer apply
(
select used_page_count = SUM(used_page_count)
from sys.dm_db_partition_stats AS ps
where ps.object_id = ct.source_object_id
) AS source_pstats
outer apply
(
select *
from msdb.dbo.cdc_jobs
where job_type = 'cleanup'
and database_id = DB_ID()
) as cleanup
WHERE DATEADD(minute, 60*25, sys.fn_cdc_map_lsn_to_time(sys.fn_cdc_get_min_lsn(ct.capture_instance))) < DATEADD(minute, -cleanup.retention, GETDATE())

Isso retorna muitos resultados em que a diferença entre o tempo mínimo de lsn e a retenção de CDC configurada é superior a 25 horas.

O tempo de retenção configurado é de 5.000 minutos e o tempo mínimo de lsn é superior a 5.800 minutos no momento da redação deste artigo.

Para tentar resolver isso, executei o cdc.cleanuptrabalho manualmente. Foi concluído com sucesso, mas não fez nenhuma alteração.

Em seguida, executei manualmente o procedimento sp_cdc_cleanup_change_tablepara cada uma das instâncias de captura e elas foram concluídas com êxito, mas, novamente, não fiz alterações.

EXEC sys.sp_cdc_cleanup_change_table @capture_instance = '...', @low_water_mark = NULL, @threshold = 5000;

Suspeitamos que esse problema esteja relacionado a um failover que ocorreu na mesma época, mas desde então já fizemos o failover para a réplica primária original.

Alguém pode aconselhar como resolver essa latência na limpeza sem precisar desabilitar e reativar o CDC?

Obrigado

Detalhes do ambiente:

  • SQL Server 2014 Enterprise Edition, versão 12.0.6024
  • Grupo de disponibilidade AlwaysOn com 3 nós - 2 síncronos com failover automático e um assíncrono.
sql-server
  • 1 respostas
  • 23 Views
Martin Hope
Eitan Blumin
Asked: 2022-01-24 03:44:40 +0800 CST

DBCC CHECKDB em um banco de dados de usuário: tempo limite esgotado ao aguardar o tipo de trava de buffer 2 para a página (X:XXX), ID do banco de dados 2

  • 6

Nosso trabalho Ola Hallengren IntegrityCheck falhou devido a um tempo limite de trava de buffer durante a execução de DBCC CHECKDB em um banco de dados de usuário.

No entanto, o tempo limite de trava do buffer relatado estava em TempDB (ID do banco de dados 2).

Saída do trabalho:

Date and time: 2022-01-22 09:04:15 [SQLSTATE 01000]
Database context: [master] [SQLSTATE 01000]
Command: SET LOCK_TIMEOUT 600000; DBCC CHECKDB ([SentryOne]) WITH NO_INFOMSGS, ALL_ERRORMSGS, MAXDOP = 4 [SQLSTATE 01000]
Msg 845, Sev 17, State 1, Line 1 : Time-out occurred while waiting for buffer latch type 2 for page (6:222), database ID 2. [SQLSTATE 42000]
Outcome: Failed [SQLSTATE 01000]
Duration: 12:40:32 [SQLSTATE 01000]
Date and time: 2022-01-22 21:44:47 [SQLSTATE 01000]

Mensagens no log de erros do SQL:

Date 1/22/2022 9:35:22 PM
Log SQL Server (Archive #1 - 1/23/2022 12:00:00 AM)

Source spid777

Message
A time-out occurred while waiting for buffer latch -- type 2, bp 0000016D7A1DE340, page 6:222, stat 0x40d, database id: 2, allocation unit Id: 536870912/281475513581568, task 0x0000016CD624E4E8 : 2, waittime 300 seconds, flags 0x1a, owning task 0x0000016CD624E4E8. Not continuing to wait.

BobMgr::GetBuf: Sort Big Output Buffer write not complete after 60 seconds.

DBCC CHECKDB (SentryOne) WITH all_errormsgs, no_infomsgs, maxdop = 4 executed by NT SERVICE\SQLSERVERAGENT terminated abnormally due to error state 6. Elapsed time: 12 hours 39 minutes 57 seconds.

[INFO] Database ID: [12]. Cleaning up StorageArray. LastClosedCheckpointEndTs: '1225176490'

[WARNING] ALTER or DROP TABLE could not clean up root row within 10 seconds.

A página em questão é uma página do IAM no TempDB. Saída DBCC PAGE para ele:

PAGE: (6:222)

BUFFER:

BUF @0x0000016D6B622C40

bpage = 0x00000161A6C52000 bPmmpage = 0x0000000000000000 bsort_r_nextbP = 0x0000016D6B622AD0
bsort_r_prevbP = 0x0000016D6B622B80 bhash = 0x0000000000000000 bpageno = (6:222)
bpart = 4 ckptGen = 0x0000000000000000 bDirtyRefCount = 0
bstat = 0x9 breferences = 3 berrcode = 0
bUse1 = 19321 bstat2 = 0x0 blog = 0x215a215a
bsampleCount = 1 bIoCount = 0 resPoolId = 0
bcputicks = 330 bReadMicroSec = 848 bDirtyContext = 0x0000000000000000
bDbPageBroker = 0x0000000000000000 bdbid = 2 bpru = 0x0000016D3A170040

PAGE HEADER:

Page @0x00000161A6C52000

m_pageId = (6:222) m_headerVersion = 1 m_type = 10
m_typeFlagBits = 0x0 m_level = 0 m_flagBits = 0x200
m_objId (AllocUnitId.idObj) = 1837007664 m_indexId (AllocUnitId.idInd) = 28675
Metadata: AllocUnitId = 8071415347312328704
Metadata: PartitionId = 2162691495132069888 Metadata: IndexId = 0
Metadata: ObjectId = -1083263203 m_prevPage = (0:0) m_nextPage = (0:0)
pminlen = 90 m_slotCnt = 2 m_freeCnt = 6
m_freeData = 8182 m_reservedCnt = 0 m_lsn = (324:1435184:42)
m_xactReserved = 0 m_xdesId = (0:0) m_ghostRecCnt = 0
m_tornBits = -551517712 DB Frag ID = 1

Allocation Status

GAM (6:2) = ALLOCATED SGAM (6:3) = ALLOCATED
PFS (6:1) = 0x70 IAM_PG MIXED_EXT ALLOCATED 0_PCT_FULL DIFF (6:6) = NOT CHANGED
ML (6:7) = NOT MIN_LOGGED

IAM: Header @0x00000036C4278064 Slot 0, Offset 96

sequenceNumber = 0 status = 0x0 objectId = 0
indexId = 0 page_count = 0 start_pg = (8:511232)

IAM: Single Page Allocations @0x00000036C427808E

Slot 0 = (0:0) Slot 1 = (0:0) Slot 2 = (0:0)
Slot 3 = (0:0) Slot 4 = (0:0) Slot 5 = (0:0)
Slot 6 = (0:0) Slot 7 = (0:0)

IAM: Extent Alloc Status Slot 1 @0x00000036C42780C2

(8:511232) - (8:592656) = NOT ALLOCATED
(8:592664) - = ALLOCATED
(8:592672) - (8:770424) = NOT ALLOCATED

Encontrei esta pergunta do DBA StackExchange que parece ser mais relevante: Obtendo o erro "Ocorreu o tempo limite enquanto aguardava o tipo de trava de buffer 2 para a página (1:3564879), ID do banco de dados 7". Mas um banco de dados com Id 7 NÃO existe

No entanto, nesse cenário, a página expirada relatada está em um banco de dados do usuário e não no TempDB.

Além disso, estamos na versão mais recente do SQL Server (2019-CU14 Enterprise), portanto, isso não deve acontecer de qualquer maneira.

Percebi que havia latência muito alta nos arquivos de dados TempDB por volta das 18h e 21h40. Não tenho certeza se está relacionado, no entanto, porque o pico de latência às 18h é maior e, no entanto, o trabalho falhou apenas por volta das 21h44.

Latência de arquivos de dados TempDB

Esses picos de latência não se correlacionam com nenhum pico nas métricas do Azure Monitor VM Cached IOPS Consumed Percentagee VM Cached Bandwidth Consumed Percentage.

Informação adicional:

  • O servidor está instalado em uma VM do Azure:Standard E8s v3 (8 vcpus, 64 GiB memory)
  • O banco de dados do usuário em questão (SentryOne) possui tabelas com otimização de memória.
  • Os metadados com otimização de memória TempDB estão DESATIVADOS.
  • A inicialização instantânea do arquivo está ATIVADA.
  • Bloquear Páginas na Memória está DESATIVADO.

Alguma idéia de por que isso aconteceu e como evitá-lo no futuro?

Obrigado!

sql-server tempdb
  • 1 respostas
  • 590 Views
Martin Hope
Eitan Blumin
Asked: 2020-07-12 21:37:41 +0800 CST

SQL Server - Por que estou obtendo conexões TCP sem sessões?

  • 1

Habilitei o SSL com a Criptografia Forçada habilitada, usando um certificado autoassinado.

Em seguida, configurei o monitoramento automatizado para detectar conexões não seguras (parece redundante, eu sei, mas tenha paciência comigo aqui), usando a seguinte consulta T-SQL:

SELECT CONCAT('Not secured connection(s) detected of '
, ISNULL(QUOTENAME(COALESCE(ses.original_login_name, ses.nt_user_name, ses.login_name)), 'an unknown login')
, ' from ', ISNULL(QUOTENAME(client_net_address), 'an unknown address')
, ' ', QUOTENAME(ISNULL(ses.host_name, 'unknown host'), '(')
, ', ', ISNULL(QUOTENAME(ses.program_name), 'unknown program')
, ', to ', ISNULL(QUOTENAME(DB_NAME(ses.database_id)), 'an unknown database')
, ', Session(s): ', COUNT(ses.session_id)
), COUNT(con.connection_id) AS NumberOfConnections
FROM sys.dm_exec_connections AS con
LEFT JOIN sys.dm_exec_sessions AS ses
ON ses.session_id IN (con.session_id, con.most_recent_session_id)
WHERE encrypt_option = 'FALSE'
AND net_transport = 'TCP'
AND client_net_address NOT LIKE '<%'
GROUP BY COALESCE(ses.original_login_name, ses.nt_user_name, ses.login_name)
, client_net_address, ses.host_name, ses.program_name, ses.database_id

Mais tarde, comecei a receber alertas resultantes dessa consulta, com saída semelhante a esta:

Not secured connection(s) detected of an unknown login from [x.x.x.x] (unknown host), unknown program, to an unknown database: 0

( x.x.x.xsubstitui os endereços IP reais que vieram de uma das redes de nossos clientes)

Isso significa que estamos detectando conexões TCP (em sys.dm_exec_connections) sem sessões correspondentes (em sys.dm_exec_sessions).

Com base no que encontrei na documentação da Microsoft, esses cenários podem acontecer como parte das arquiteturas de Grupo de Disponibilidade, Espelhamento de Banco de Dados ou Service Broker... Mas não estamos usando nenhum deles em nossa instância!

Isso não deveria estar acontecendo... Alguém tem alguma idéia de como explicar isso? Isso poderia acontecer devido a algum tipo de scanner de porta, talvez?

Obrigado!

Detalhes da versão:

Microsoft SQL Server 2019 [Enterprise] (RTM-CU4) (KB4548597) - 15.0.4033.1 (X64)
    Mar 14 2020 16:10:35 
    Copyright (C) 2019 Microsoft Corporation
    Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)
sql-server ssl
  • 1 respostas
  • 194 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