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

Learning_DBAdmin's questions

Martin Hope
Learning_DBAdmin
Asked: 2022-02-18 03:43:52 +0800 CST

Lentidão imprevisível e carretel de mesa (leitura lenta)

  • 0

Eu estava testando no banco de dados Stackoverflow para descobrir possíveis casos em que o SQL Server não recomenda o índice no plano de execução, mas se introduzirmos um, ajudaria muito!

Fiz isso facilmente para Group by, Order by Clause e para função de agregação (função de contagem - menor cópia da tabela). Eu escrevi uma consulta aleatória em que eu sabia que a introdução do índice de suporte certamente ajudará, no entanto, a recomendação de índice ausente será apenas na condição de junção e não na cláusula order by.

A consulta é como abaixo:

select top 100 Location from Users U join Badges B
on B.UserId = U.Id
order by Location desc

Os índices abaixo foram introduzidos para melhorar o desempenho:

create index Location on Users(Location)
go
create index UsersId on Badges(UserId)
go

Índices usados ​​pelo otimizador conforme esperado para a consulta acima:

Plano de Execução de Consulta com Índice

As leituras lógicas e as estatísticas de tempo são as seguintes:

Estatísticas de consulta com índice

Agora, eu queria testar o desempenho apenas com o índice na tabela Users na coluna Location e sem Index on Badges (UserId), aqui o desempenho fica terrível (leva quase 7 minutos):

Índice apenas na tabela de usuários

As leituras lógicas e as estatísticas de tempo são as seguintes:

Leituras lógicas e estatísticas de tempo

As tabelas de índice em usuários são muito usadas, como é evidente no plano de execução e nas leituras lógicas, no entanto, fazer a varredura de índice clusterizado e o Spool de tabela (Spool preguiçoso) causam a maior parte do problema.

Todos os testes acima são realizados no SQL Server 2019 no modo de compatibilidade do SQL Server 2016(130).

Se alguém puder aconselhar sobre o problema subjacente, seria de grande ajuda.

Mais uma coisa a ser observada aqui, quando não há índice de suporte não clusterizado em nenhuma dessas duas tabelas, a mesma consulta termina em 9 segundos. Segue abaixo o plano de execução:

Plano de execução sem índice NC

Estatísticas lógicas de leitura e tempo:

Leituras lógicas e estatísticas de tempo sem índice NC

Para fins de teste, alterei o nível de compatibilidade para 2019(150) e para minha surpresa - mesma consulta anterior que tinha índice apenas na tabela Users (Location) e não na tabela Badges, finalizada em 2 segundos que estava demorando 7 minutos no SQL Server 2016 modo de compatibilidade(130):

Plano de Execução do SQL Server 2019

Estatísticas lógicas e estatísticas de tempo:

Estatísticas lógicas e estatísticas de tempo

No modo de compatibilidade de 2019, todos os operadores antes do Paralelismo estão em modo de lote .

Qualquer entrada a esse respeito me ajudaria a entender esse comportamento.

sql-server sql-server-2019
  • 1 respostas
  • 173 Views
Martin Hope
Learning_DBAdmin
Asked: 2020-12-02 00:04:09 +0800 CST

Precisa de conselhos sobre Indexafobia: Índice de falta de alto valor com alto impacto. Quando o índice já existe

  • 0

Estou tentando entender o verdadeiro significado de Missing index para esta tabela específica quando já tenho índice nela e como resolvê-lo.

Tenho uma tabela muito usada e tem aproximadamente 2,5GB. Como é muito usado, um pouco hesitante em criar índices que não são muito necessários (discutível). Esta tabela foi heap anteriormente, recentemente ela é alterada para tabela após alterar a chave primária para clusterizada de não clusterizada.

Quando executo sp_blitzindex com o nome do banco de dados ou com esta tabela, dá resultado como abaixo:

Resultado do Blitzindex

Principalmente sugere criar índice na coluna APT_ID e incluir sugere LOGID, RECEIVE_TIME e algumas outras colunas. Se olharmos para a definição da tabela, a chave primária é definida em LOGID e RECEIVE_TIME. E também temos um índice NC na coluna APT_ID.

A tabela DDL é a seguinte:

CREATE TABLE [dbo].[TXN_LOG](
    [LOGID] [int] IDENTITY(1,1) NOT NULL,
    [RECEIVE_TIME] [varchar](15) NOT NULL,
    [APT_ID] [int] NOT NULL,
    [VAR32_01] [varchar](32) NULL,
    [VAR32_02] [varchar](32) NULL,
    .
    .
    .
    [ERROR_CODE] [varchar](20) NULL,
    [MESSAGE_ID] [varchar](40) NULL,
    [END_POINT_ID] [varchar](50) NULL,
    [NODE_ID] [varchar](40) NULL,
    [TIMEOUT_NETWORK_ID] [int] NULL,
    [TXN_SUMMARY] [numeric](1, 0) NULL,
    [D_FLAG] [numeric](1, 0) NULL,
     CONSTRAINT [PKTXN_LOG] PRIMARY KEY CLUSTERED 
    (
        [LOGID] ASC,
        [RECEIVE_TIME] ASC
    ))
GO

O índice NC nesta tabela é:

CREATE NONCLUSTERED INDEX [IDX_TXN_LOG_1] ON [dbo].[TXN_LOG]
(
    [APT_ID] ASC
)
INCLUDE([RECEIVE_TIME]) 
GO

O uso atual do índice não parece oferecer suporte ao índice NC, pois a gravação é maior que a contagem de leitura.

Uso do Índice

Sinceras desculpas por anexar imagens na pergunta. Agradeço se eu puder obter alguns conselhos de especialistas sobre isso. Desde já, obrigado.

Versão: Microsoft SQL Server 2014 (SP3-GDR) (KB4532095) - 12.0.6118.4 (X64) 12 de dezembro de 2019 21:46:15 Copyright (c) Microsoft Corporation Enterprise Edition: licenciamento baseado em núcleo (64 bits) no Windows NT 6.3 (Build 9600: ) (Hipervisor)

sql-server index
  • 2 respostas
  • 362 Views
Martin Hope
Learning_DBAdmin
Asked: 2020-11-03 23:42:11 +0800 CST

Enfrentando um impasse após a introdução de um novo índice não clusterizado no heap

  • 1

Estou enfrentando um problema estranho em que analisei um procedimento armazenado que é executado a cada 3 minutos e estava sobrecarregando a CPU. Descobri que existem várias instruções select que fazem parte deste procedimento e todas elas estavam fazendo uma varredura completa da tabela (lendo todas as páginas nas tabelas). Então, eu os testei no ambiente de teste e suportei isso com um índice não clusterizado. O mesmo foi confirmado com o fornecedor em questão e eles concordaram com a mudança. Eu estava implantando-os na Produção ontem e verifiquei as leituras lógicas dessas consultas e verifiquei as mesmas após o novo índice, validei que está tendo um impacto positivo e as leituras lógicas caíram em 1/10.

Imediatamente após a implantação desse índice, o procedimento que é executado a cada 3 minutos começou a falhar. Executado manualmente para verificar o problema e descobri que, está causando deadlock todas as vezes, exceto 1 ou 2 vezes em 1 hora. Eu estava completamente perdido sobre como um índice poderia causar um impasse? Idealmente, o índice deve resolver o impasse, no entanto, foi o oposto.

A tabela a que me refiro é um heap e não possui chave primária clusterizada, em vez disso, possui chave primária não clusterizada. Eu tenho a concordância de todas as partes para fazer a mudança de NC para cluster, no entanto, ele está vinculado a várias tabelas por meio do relacionamento PK-FK e requer tempo de inatividade e, portanto, está atualmente em espera.

Eu capturei o gráfico de deadlock e também tenho sp_blitzlock no lugar. Parece que o impasse está acontecendo entre a consulta do aplicativo e este procedimento, no entanto, não consigo entender como esse índice está causando isso e como quando eu reverti esse índice, ele está funcionando sem problemas e sem impasse.

O gráfico de impasse é o seguinte:

Gráfico de Deadlock no Sentry

<deadlock>
  <victim-list>
    <victimProcess id="processef645b848" />
  </victim-list>
  <process-list>
    <process id="processef645b848" taskpriority="0" logused="0" waitresource="PAGE: 6:1:965 " waittime="3661" ownerId="303318514" transactionname="INSERT" lasttranstarted="2020-11-02T12:18:12.793" XDES="0x31fbb78e0" lockMode="S" schedulerid="1" kpid="8564" status="suspended" spid="1246" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2020-11-02T12:18:00.500" lastbatchcompleted="2020-11-02T12:18:00.500" lastattention="1900-01-01T00:00:00.500" clientapp="SQLAgent - TSQL JobStep (Job 0x417A2365E91D1647B2C225CA23D84860 : Step 1)" hostname="DB_Server" hostpid="3628" loginname="SQL_Agent_Login" isolationlevel="read committed (2)" xactid="303318514" currentdb="7" currentdbname="DB_Name_1" lockTimeout="4294967295" clientoption1="673185824" clientoption2="128056">
      <executionStack>
        <frame procname="adhoc" line="1" stmtend="2888" sqlhandle="0x02000000c984e814ec51be0d03e3852ee0b755da518273d00000000000000000000000000000000000000000">
unknown    </frame>
        <frame procname="DB_Name_1.dbo.Procedure_Name" line="171" stmtstart="13412" stmtend="13482" sqlhandle="0x03000700151ddc58cd73c00013ac000001000000000000000000000000000000000000000000000000000000">
EXECUTE (@EXEC_IMMEDIATE_VAR)    </frame>
        <frame procname="adhoc" line="1" sqlhandle="0x01000700d070832b90a421810300000000000000000000000000000000000000000000000000000000000000">
EXEC Procedure_Name 'DB_User_Application'    </frame>
      </executionStack>
      <inputbuf>
EXEC Procedure_Name 'DB_User_Application'   </inputbuf>
    </process>
    <process id="processe1435468" taskpriority="0" logused="996" waitresource="PAGE: 6:1:88348 " waittime="3841" ownerId="303318578" transactionname="user_transaction" lasttranstarted="2020-11-02T12:18:13.007" XDES="0x255f023b0" lockMode="IX" schedulerid="1" kpid="4120" status="suspended" spid="1271" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2020-11-02T12:18:13.017" lastbatchcompleted="2020-11-02T12:18:13.007" lastattention="1900-01-01T00:00:00.007" clientapp="Vendor_Name" hostname="APP_Server_Name" hostpid="1296" loginname="DB_User_Application" isolationlevel="read committed (2)" xactid="303318578" currentdb="6" currentdbname="DB_Name_2" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
      <executionStack>
        <frame procname="adhoc" line="1" stmtstart="720" stmtend="1560" sqlhandle="0x020000001fdba70fc3e8a833920a732fe1c19b282e28ac1c0000000000000000000000000000000000000000">
unknown    </frame>
        <frame procname="adhoc" line="1" stmtend="1190" sqlhandle="0x02000000f228391fab59e520bc237b6a919f53ced0b1ac290000000000000000000000000000000000000000">
unknown    </frame>
      </executionStack>
      <inputbuf>
update Deadlock_Table set Error_Code = '000',TIMEOUT_NETWORK_ID=NULL , var32_32='XXXX', var32_15='000', var32_22='1', var32_04='IB', var32_05='XXX', var256_01='Processed OK', var32_09='XXX', var32_14='048', var64_01='XXXXX', var32_06='02112020121802', var32_03='XXX', var32_10='XXXX', var32_07='XXXX', var32_02='XXX', var32_01='XXX', Node_Id='APP_Server_Name', Message_Id='XXXX', End_Point_Id='XXXXX' where Log_Id=XXXXX and Receive_Time='XXXXX'   </inputbuf>
    </process>
  </process-list>
  <resource-list>
    <pagelock fileid="1" pageid="965" dbid="6" subresource="FULL" objectname="DB_Name_2.dbo.Deadlock_Table" id="lock4d151f900" mode="IX" associatedObjectId="72057594079739904">
      <owner-list>
        <owner id="processe1435468" mode="IX" />
      </owner-list>
      <waiter-list>
        <waiter id="processef645b848" mode="S" requestType="wait" />
      </waiter-list>
    </pagelock>
    <pagelock fileid="1" pageid="88348" dbid="6" subresource="FULL" objectname="DB_Name_2.dbo.Deadlock_Table" id="lock4e1da7d00" mode="S" associatedObjectId="72057594079739904">
      <owner-list>
        <owner id="processef645b848" mode="S" />
      </owner-list>
      <waiter-list>
        <waiter id="processe1435468" mode="IX" requestType="wait" />
      </waiter-list>
    </pagelock>
  </resource-list>
</deadlock>

Abaixo está o DDL da tabela:

CREATE TABLE [dbo].[Deadlock_Table](
    [Log_id] [int] IDENTITY(1,1) NOT NULL,
    [Receive_time] [varchar](15) NOT NULL,
    [A] [int] NOT NULL,
    [VAR32_01] [varchar](32) NULL,
    [VAR32_02] [varchar](32) NULL,
    [VAR32_03] [varchar](32) NULL,
    [VAR32_04] [varchar](32) NULL,
    [VAR32_05] [varchar](32) NULL,
    [VAR32_06] [varchar](32) NULL,
    [VAR32_07] [varchar](32) NULL,
    [VAR32_08] [varchar](32) NULL,
    [VAR32_09] [varchar](32) NULL,
    [VAR32_10] [varchar](32) NULL,
    [VAR32_11] [varchar](32) NULL,
    [VAR32_12] [varchar](32) NULL,
    [VAR32_13] [varchar](32) NULL,
    [VAR32_14] [varchar](32) NULL,
    [VAR32_15] [varchar](32) NULL,
    [VAR32_16] [varchar](32) NULL,
    [VAR32_17] [varchar](32) NULL,
    [VAR32_18] [varchar](32) NULL,
    [VAR32_19] [varchar](32) NULL,
    [VAR32_20] [varchar](32) NULL,
    [VAR32_21] [varchar](32) NULL,
    [VAR32_22] [varchar](32) NULL,
    [VAR32_23] [varchar](32) NULL,
    [VAR32_24] [varchar](32) NULL,
    [VAR32_25] [varchar](32) NULL,
    [VAR32_26] [varchar](32) NULL,
    [VAR32_27] [varchar](32) NULL,
    [VAR32_28] [varchar](32) NULL,
    [VAR32_29] [varchar](32) NULL,
    [VAR32_30] [varchar](32) NULL,
    [VAR32_31] [varchar](32) NULL,
    [VAR32_32] [varchar](32) NULL,
    [VAR32_33] [varchar](32) NULL,
    [VAR32_34] [varchar](32) NULL,
    [VAR32_35] [varchar](32) NULL,
    [VAR32_36] [varchar](32) NULL,
    [VAR32_37] [varchar](32) NULL,
    [VAR32_38] [varchar](32) NULL,
    [VAR32_39] [varchar](32) NULL,
    [VAR32_40] [varchar](32) NULL,
    [VAR32_41] [varchar](32) NULL,
    [VAR32_42] [varchar](32) NULL,
    [VAR32_43] [varchar](32) NULL,
    [VAR32_44] [varchar](32) NULL,
    [VAR32_45] [varchar](32) NULL,
    [VAR32_46] [varchar](32) NULL,
    [VAR32_47] [varchar](32) NULL,
    [VAR32_48] [varchar](32) NULL,
    [VAR32_49] [varchar](32) NULL,
    [VAR32_50] [varchar](32) NULL,
    [VAR32_51] [varchar](32) NULL,
    [VAR32_52] [varchar](32) NULL,
    [VAR32_53] [varchar](32) NULL,
    [VAR32_54] [varchar](32) NULL,
    [VAR32_55] [varchar](32) NULL,
    [VAR32_56] [varchar](32) NULL,
    [VAR32_57] [varchar](32) NULL,
    [VAR32_58] [varchar](32) NULL,
    [VAR32_59] [varchar](32) NULL,
    [VAR32_60] [varchar](32) NULL,
    [VAR32_61] [varchar](32) NULL,
    [VAR32_62] [varchar](32) NULL,
    [VAR32_63] [varchar](32) NULL,
    [VAR32_64] [varchar](32) NULL,
    [VAR64_01] [varchar](64) NULL,
    [VAR64_02] [varchar](64) NULL,
    [VAR64_03] [varchar](64) NULL,
    [VAR64_04] [varchar](64) NULL,
    [VAR64_05] [varchar](64) NULL,
    [VAR64_06] [varchar](64) NULL,
    [VAR64_07] [varchar](64) NULL,
    [VAR64_08] [varchar](64) NULL,
    [VAR64_09] [varchar](64) NULL,
    [VAR64_10] [varchar](64) NULL,
    [VAR64_11] [varchar](64) NULL,
    [VAR64_12] [varchar](64) NULL,
    [VAR64_13] [varchar](64) NULL,
    [VAR64_14] [varchar](64) NULL,
    [VAR64_15] [varchar](64) NULL,
    [VAR64_16] [varchar](64) NULL,
    [VAR64_17] [varchar](64) NULL,
    [VAR64_18] [varchar](64) NULL,
    [VAR64_19] [varchar](64) NULL,
    [VAR64_20] [varchar](64) NULL,
    [VAR64_21] [varchar](64) NULL,
    [VAR64_22] [varchar](64) NULL,
    [VAR64_23] [varchar](64) NULL,
    [VAR64_24] [varchar](64) NULL,
    [VAR64_25] [varchar](64) NULL,
    [VAR64_26] [varchar](64) NULL,
    [VAR64_27] [varchar](64) NULL,
    [VAR64_28] [varchar](64) NULL,
    [VAR64_29] [varchar](64) NULL,
    [VAR64_30] [varchar](64) NULL,
    [VAR64_31] [varchar](64) NULL,
    [VAR64_32] [varchar](64) NULL,
    [VAR128_01] [varchar](128) NULL,
    [VAR128_02] [varchar](128) NULL,
    [VAR128_03] [varchar](128) NULL,
    [VAR128_04] [varchar](128) NULL,
    [VAR128_05] [varchar](128) NULL,
    [VAR128_06] [varchar](128) NULL,
    [VAR128_07] [varchar](128) NULL,
    [VAR128_08] [varchar](128) NULL,
    [VAR128_09] [varchar](128) NULL,
    [VAR128_10] [varchar](128) NULL,
    [VAR128_11] [varchar](128) NULL,
    [VAR128_12] [varchar](128) NULL,
    [VAR128_13] [varchar](128) NULL,
    [VAR128_14] [varchar](128) NULL,
    [VAR128_15] [varchar](128) NULL,
    [VAR128_16] [varchar](128) NULL,
    [VAR256_01] [varchar](256) NULL,
    [VAR256_02] [varchar](256) NULL,
    [VAR256_03] [varchar](256) NULL,
    [VAR256_04] [varchar](256) NULL,
    [VAR256_05] [varchar](256) NULL,
    [VAR256_06] [varchar](256) NULL,
    [VAR256_07] [varchar](256) NULL,
    [VAR256_08] [varchar](256) NULL,
    [VAR512_01] [varchar](512) NULL,
    [VAR512_02] [varchar](512) NULL,
    [VAR512_03] [varchar](512) NULL,
    [VAR512_04] [varchar](512) NULL,
    [VAR1024_01] [varchar](1024) NULL,
    [VAR1024_02] [varchar](1024) NULL,
    [E] [varchar](20) NULL,
    [M] [varchar](40) NULL,
    [E] [varchar](50) NULL,
    [N] [varchar](40) NULL,
    [TN] [int] NULL,
    [T] [numeric](1, 0) NULL,
    [D] [numeric](1, 0) NULL,
 CONSTRAINT [XPKtable_name] PRIMARY KEY NONCLUSTERED 
(
    [Log_id] ASC,
    [Receive_time] ASC
)

Atualmente, ele tem apenas um índice diferente da chave primária na 3ª coluna (digamos A).

O índice que eu havia proposto estava abaixo:

CREATE NONCLUSTERED INDEX [IX_Deadlock_Table] ON [dbo].[Deadlock_Table]
(
 var32_02 ,
 D,
 T
 ) 
GO

Obrigado por ler uma pergunta tão longa e realmente aprecio sua contribuição para resolver esse impasse. Caso eu tenha perdido alguns detalhes vitais, por favor, coloque-os na seção de comentários e eu os adicionaria.

Plano de consulta do aplicativo para declaração de atualização --> https://www.brentozar.com/pastetheplan/?id=r14x3TCOD

A consulta que é executada dentro do cursor são várias instruções de inserção que são basicamente instruções de seleção envolvendo esta deadlock_table unida a outra tabela e são as seguintes:

INSERT INTO Table_Name   (SELECT LOG_ID, RECEIVE_TIME, N, E, CASE WHEN TRAN_SUMMARY = 1 AND DIRTY_FLAG = 1 THEN 1 ELSE 0 END,null,null,null,var32_07,null,var32_02,var32_01,var32_20,Coalesce(null,var32_10,var32_11,var32_21),var32_21,null,null,Coalesce(var32_31,var32_12,var32_13),null,null,null,null,null,convert(varchar(2),N),null,1,1,null,null,null,null,null,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,var32_17,var32_19,var32_18,'system','system' FROM deadlock_table A, ADPTR       B WHERE A.ADPTR_ID = B.ADPTR_ID AND       B.N =4 AND (A.TRAN_SUMMARY = 0  OR (A.TRAN_SUMMARY = 1 AND A.DIRTY_FLAG = 1)) AND var32_02 IN (SELECT B.CODE_ID FROM TRN_CODE A , GETCODEMAPPING B WHERE A.TRAN_CODE = B.CODE_NAME AND B.N  = 4) AND var32_02 NOT IN ('0044')
INSERT INTO Table_Name   (SELECT LOG_ID, RECEIVE_TIME, N, E, CASE WHEN TRAN_SUMMARY = 1 AND DIRTY_FLAG = 1 THEN 1 ELSE 0 END,var32_25,var32_10,var32_04,var32_24,null,var64_19,var32_14,var32_18,var64_11,var64_12,var64_02,var32_42,var32_20,var32_45,null,null,null,null,convert(varchar(2),N),var32_35,1,1,null,var32_43,var32_38,var32_39,null,var32_27,NULL,NULL,var32_19,NULL,NULL,var32_22,NULL,NULL,NULL,NULL,var64_22,var32_30,var64_23,'system','system' FROM deadlock_table A, ADPTR       B WHERE A.ADPTR_ID = B.ADPTR_ID AND       B.N =10 AND (A.TRAN_SUMMARY = 0  OR (A.TRAN_SUMMARY = 1 AND A.DIRTY_FLAG = 1)) AND var64_19 IN (SELECT B.CODE_ID FROM TRN_CODE A , GETCODEMAPPING B WHERE A.TRAN_CODE = B.CODE_NAME AND B.N  = 10)
INSERT INTO Table_Name   (SELECT LOG_ID, RECEIVE_TIME, N, E, CASE WHEN TRAN_SUMMARY = 1 AND DIRTY_FLAG = 1 THEN 1 ELSE 0 END,var32_25,var32_10,var32_04,var32_24,null,var64_19,var32_14,var32_18,var64_11,var64_12,var64_02,var32_42,var32_20,var32_45,null,null,null,null,var32_62,var32_35,1,1,null,var32_43,var32_38,var32_39,null,var32_27,NULL,NULL,var32_19,NULL,NULL,var32_22,var1024_02,NULL,NULL,NULL,'system','system' FROM deadlock_table A, ADPTR       B WHERE A.ADPTR_ID = B.ADPTR_ID AND       B.N =11 AND (A.TRAN_SUMMARY = 0  OR (A.TRAN_SUMMARY = 1 AND A.DIRTY_FLAG = 1)) AND var64_19 IN (SELECT B.CODE_ID FROM TRN_CODE A , GETCODEMAPPING B WHERE A.TRAN_CODE = B.CODE_NAME AND B.N  = 11)
INSERT INTO Table_Name   (SELECT LOG_ID, RECEIVE_TIME, N, E, CASE WHEN TRAN_SUMMARY = 1 AND DIRTY_FLAG = 1 THEN 1 ELSE 0 END,var32_25,var32_10,var32_04,var32_24,null,var64_19,var32_14,var32_18,var64_11,      case when var64_19 = '64' then var64_10 else var64_12 end as TO_ACCOUNT_NUM, var64_02,var32_42,var32_20,var32_45,null,null,null,null,var32_62,var32_35,1,1,null,var32_43,var32_38,var32_39,null,var32_27,NULL,NULL,var32_19,NULL,NULL,var32_22,var1024_02,var64_17,var64_21,var64_20,'system','system' FROM deadlock_table A, ADPTR       B WHERE A.ADPTR_ID = B.ADPTR_ID AND       B.N =12 AND (A.TRAN_SUMMARY = 0  OR (A.TRAN_SUMMARY = 1 AND A.DIRTY_FLAG = 1))       AND (var64_19 IN (SELECT B.CODE_ID FROM TRN_CODE A , GETCODEMAPPING B WHERE A.TRAN_CODE = B.CODE_NAME AND B.N  = 12)      or  var64_19 in (SELECT B.CODE_NAME FROM TRN_CODE A , GETCODEMAPPING B WHERE A.TRAN_CODE = B.CODE_NAME AND B.N  = 12))
INSERT INTO Table_Name   (SELECT LOG_ID, RECEIVE_TIME, N, E, CASE WHEN TRAN_SUMMARY = 1 AND DIRTY_FLAG = 1 THEN 1 ELSE 0 END,null,null,null,var32_44,null,var32_02,var32_46,null,null,null,null,null,null,null,null,null,null,null,convert(varchar(2),N),null,1,1,null,null,null,null,null,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'system','system' FROM deadlock_table A, ADPTR       B WHERE A.ADPTR_ID = B.ADPTR_ID AND       B.N =13 AND (A.TRAN_SUMMARY = 0  OR (A.TRAN_SUMMARY = 1 AND A.DIRTY_FLAG = 1)) AND var32_02 IN (SELECT B.CODE_ID FROM TRN_CODE A , GETCODEMAPPING B WHERE A.TRAN_CODE = B.CODE_NAME AND B.N  = 13)

Plano de consulta para a 1ª instrução select sem meu índice (em sua forma atual) - https://www.brentozar.com/pastetheplan/?id=BkDnpbktw

Plano de consulta para a instrução select após a criação do índice - https://www.brentozar.com/pastetheplan/?id=r1SCeGktD

Abaixo estão as leituras lógicas antes e depois da criação do índice:

Table 'deadlock_table'. Scan count 5, logical reads 326203, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'deadlock_table'. Scan count 58, logical reads 12055, physical reads 0, read-ahead reads 23, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Versão SQL

Versão: Microsoft SQL Server 2014 (SP3) (KB4022619) - 12.0.6024.0 (X64) 7 de setembro de 2018 01:37:51 Enterprise Edition: Licenciamento baseado em núcleo (64 bits) no Windows NT 6.3 (Build 9600: ) (Hypervisor )

sql-server deadlock
  • 1 respostas
  • 395 Views
Martin Hope
Learning_DBAdmin
Asked: 2020-02-03 23:13:33 +0800 CST

comece tran em vez de usar db_name dentro de um trabalho SQL para executar o procedimento armazenado

  • 2

Eu estava definindo um trabalho SQL ontem para executar o procedimento armazenado em um horário específico da manhã. Era um requisito ad-hoc e urgente e, portanto, desenvolvi esse procedimento rapidamente e o programei para ser executado todas as manhãs.

Eu deveria estar apenas chamando o procedimento na etapa do trabalho e definir o arquivo de saída na guia avançada. Eu tive que usar o comando abaixo dentro da etapa do trabalho:

use db_name
go
exec sp_name
go

Em vez de acima, escrevi como abaixo por engano:

begin tran
go
exec sp_name
go

Este trabalho sql não falhou, mas não fez o trabalho pretendido.

O arquivo de saída contém abaixo:

Job 'Job_Name': Etapa 1, 'Step_name': começou a executar 2020-02-03 06:10:00

O que parece estar correto, no entanto, eu queria saber que acima poderia manter uma transação aberta e poderia causar outros problemas.

Eu executei sp_whoisactive(graças ao Sr. Adam Machanic) e não vejo nenhuma sessão em execução a partir desse momento, assim como não há bloqueio em nenhuma tabela, pois o procedimento subjacente estava tendo uma dica de tabela tablock ao inserir dados na tabela.

Existe alguma maneira de descobrir o que realmente aconteceu com esse trabalho sql e por que ele não fez o trabalho pretendido, bem como se há alguma maneira de descobrir se ele ainda está sendo executado em segundo plano e pode ser confirmado ou revertido. Executei sp_who2 também para ver se existe algum SPID associado a este job, não encontrei nada.

Executou a consulta abaixo para verificar o status de todos os trabalhos e mostra que meu trabalho foi bem-sucedido:

USE MSDB
SELECT name AS [Job Name]
         ,CONVERT(VARCHAR,MAX(DATEADD(S,(run_time/10000)*60*60 /* hours */  
          +((run_time - (run_time/10000) * 10000)/100) * 60 /* mins */  
          + (run_time - (run_time/100) * 100)  /* secs */
           ,CONVERT(DATETIME,RTRIM(run_date),113))),100) AS [Time Run]
         ,CASE WHEN enabled=1 THEN 'Enabled'  
               ELSE 'Disabled'  
          END [Job Status]
         ,CASE WHEN SJH.run_status=0 THEN 'Failed'
                     WHEN SJH.run_status=1 THEN 'Succeeded'
                     WHEN SJH.run_status=2 THEN 'Retry'
                     WHEN SJH.run_status=3 THEN 'Cancelled'
               ELSE 'Unknown'  
          END [Job Outcome]
FROM   sysjobhistory SJH  
JOIN   sysjobs SJ  
ON     SJH.job_id=sj.job_id  
WHERE  step_id=0  
AND    DATEADD(S,  
  (run_time/10000)*60*60 /* hours */  
  +((run_time - (run_time/10000) * 10000)/100) * 60 /* mins */  
  + (run_time - (run_time/100) * 100)  /* secs */,  
  CONVERT(DATETIME,RTRIM(run_date),113)) >= DATEADD(d,-20,GetDate())  
  group by name, CASE WHEN enabled=1 THEN 'Enabled'  
               ELSE 'Disabled'  
          END 
         ,CASE WHEN SJH.run_status=0 THEN 'Failed'
                     WHEN SJH.run_status=1 THEN 'Succeeded'
                     WHEN SJH.run_status=2 THEN 'Retry'
                     WHEN SJH.run_status=3 THEN 'Cancelled'
               ELSE 'Unknown'  
          END 

Qualquer ajuda ou entrada é muito apreciada.

Versão: Microsoft SQL Server 2014 (SP3-GDR) (KB4505218) - 12.0.6108.1 (X64) 29 de maio de 2019 20:05:27 Copyright (c) Microsoft Corporation Enterprise Edition: Licenciamento baseado em núcleo (64 bits) no Windows NT 6.3 (Build 9600: ) (Hipervisor)

sql-server jobs
  • 1 respostas
  • 209 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-07-09 04:59:28 +0800 CST

HKEngineEventFile na pasta Log do SQL Server

  • 1

Houve um problema de inconsistência em nosso banco de dados, conforme solicitado nesta pergunta . O mesmo está corrigido agora e o banco de dados está sendo executado sem nenhum problema.

Percebi que o serviço SQL foi reiniciado muitas vezes nos últimos 3 dias (conforme o log de erros) e essa reinicialização levou apenas 1 a 2 segundos e, para minha surpresa, ninguém percebeu isso, enquanto isso acontecia no horário comercial. Este é um banco de dados de produção e é muito usado, o que significa que a cada segundo há 1-3 transações que atingem o banco de dados.

Anotei a hora da reinicialização do serviço ou dos últimos dias e notei que ao mesmo tempo (todas as vezes), um arquivo é criado com o nome " HkEngineEventFile_0_XXXX " de tamanho 68KB. tentei abrir isso em uma ferramenta diferente, mas não obtive nenhuma informação.

HKEngineEvent_0_XXX

Alguém pode me ajudar a entender isso e também preciso entender se foi uma reinicialização real do serviço ou outra coisa.

Abaixo estão a entrada do log de erros do SQL:

2019-07-07 16:51:22.32 Server      Microsoft SQL Server 2014 (SP3) (KB4022619) - 12.0.6024.0 (X64) 
    Sep  7 2018 01:37:51 
    Copyright (c) Microsoft Corporation
    Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)

2019-07-07 16:51:22.32 Server      UTC adjustment: 3:00
2019-07-07 16:51:22.32 Server      (c) Microsoft Corporation.
2019-07-07 16:51:22.32 Server      All rights reserved.
2019-07-07 16:51:22.32 Server      Server process ID is 7916.
2019-07-07 16:51:22.32 Server      System Manufacturer: 'VMware, Inc.', System Model: 'VMware Virtual Platform'.
2019-07-07 16:51:22.32 Server      Authentication mode is MIXED.
2019-07-07 16:51:22.32 Server      Logging SQL Server messages in file 'E:\DB_SQL12.ABC\DB_SQL\Log\ERRORLOG'.
2019-07-07 16:51:22.32 Server      The service account is 'Organization_Name\Service_Account'. This is an informational message; no user action is required.
2019-07-07 16:51:22.32 Server      Registry startup parameters: 
     -d E:\DB_SQL12.ABC\DB_SQL\DATA\master.mdf
     -e E:\DB_SQL12.ABC\DB_SQL\Log\ERRORLOG
     -l E:\DB_SQL12.ABC\DB_SQL\DATA\mastlog.ldf
2019-07-07 16:51:22.32 Server      Command Line Startup Parameters:
     -s "ABC"
2019-07-07 16:51:22.55 Server      SQL Server detected 2 sockets with 4 cores per socket and 4 logical processors per socket, 8 total logical processors; using 8 logical processors based on SQL Server licensing. This is an informational message; no user action is required.
2019-07-07 16:51:22.55 Server      SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required.
2019-07-07 16:51:22.55 Server      Detected 24575 MB of RAM. This is an informational message; no user action is required.
2019-07-07 16:51:22.55 Server      Using conventional memory in the memory manager.
2019-07-07 16:51:22.72 Server      Default collation: SQL_Latin1_General_CP1_CI_AS (us_english 1033)
2019-07-07 16:51:22.77 Server      The maximum number of dedicated administrator connections for this instance is '1'
2019-07-07 16:51:22.78 Server      This instance of SQL Server last reported using a process ID of 6672 at 7/7/2019 4:50:49 PM (local) 7/7/2019 1:50:49 PM (UTC). This is an informational message only; no user action is required.
2019-07-07 16:51:22.78 Server      Node configuration: node 0: CPU mask: 0x00000000000000ff:0 Active CPU mask: 0x00000000000000ff:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2019-07-07 16:51:22.80 Server      Using dynamic lock allocation.  Initial allocation of 2500 Lock blocks and 5000 Lock Owner blocks per node.  This is an informational message only.  No user action is required.
2019-07-07 16:51:22.80 Server      Database Instant File Initialization: disabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.
2019-07-07 16:51:22.83 spid7s      Starting up database 'master'.
2019-07-07 16:51:22.88 Server      CLR version v4.0.30319 loaded.
2019-07-07 16:51:22.89 spid7s      14 transactions rolled forward in database 'master' (1:0). This is an informational message only. No user action is required.
2019-07-07 16:51:22.90 spid7s      0 transactions rolled back in database 'master' (1:0). This is an informational message only. No user action is required.
2019-07-07 16:51:22.90 spid7s      Recovery is writing a checkpoint in database 'master' (1). This is an informational message only. No user action is required.
2019-07-07 16:51:22.96 Server      Common language runtime (CLR) functionality initialized using CLR version v4.0.30319 from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\.
2019-07-07 16:51:23.01 spid7s      CHECKDB for database 'master' finished without errors on 2019-07-05 21:45:01.463 (local time). This is an informational message only; no user action is required.
2019-07-07 16:51:23.01 spid7s      Resource governor reconfiguration succeeded.
2019-07-07 16:51:23.01 spid7s      SQL Server Audit is starting the audits. This is an informational message. No user action is required.
2019-07-07 16:51:23.01 spid7s      Audit: Server Audit: 65536, Initialized and Assigned State: START_FAILED
2019-07-07 16:51:23.01 spid7s      Audit: Server Audit: 65536, Initialized and Assigned State: STARTED
2019-07-07 16:51:23.01 spid7s      SQL Server Audit has started the audits. This is an informational message. No user action is required.
2019-07-07 16:51:23.03 spid7s      SQL Trace ID 1 was started by login "sa".
2019-07-07 16:51:23.03 spid7s      Server name is 'Organization_Name-Service_Account\ABC'. This is an informational message only. No user action is required.
2019-07-07 16:51:23.03 spid7s      The NETBIOS name of the local node that is running the server is 'Organization_Name-MWDB01'. This is an informational message only. No user action is required.
2019-07-07 16:51:23.06 spid15s     A self-generated certificate was successfully loaded for encryption.
2019-07-07 16:51:23.09 spid15s     Server is listening on [ 192.168.100.170 <ipv4> 1433].
2019-07-07 16:51:23.09 spid15s     Started listening on virtual network name 'Organization_Name-Service_Account'. No user action is required.
2019-07-07 16:51:23.09 spid15s     Server local connection provider is ready to accept connection on [ \\.\pipe\SQLLocal\ABC ].
2019-07-07 16:51:23.09 spid15s     Server named pipe provider is ready to accept connection on [ \\.\pipe\$$\Organization_Name-Service_Account\DB_SQL$ABC\sql\query ].
2019-07-07 16:51:23.10 spid15s     SQL Server is now ready for client connections. This is an informational message; no user action is required.
2019-07-07 16:51:23.10 Server      SQL Server is attempting to register a Service Principal Name (SPN) for the SQL Server service. Kerberos authentication will not be possible until a SPN is registered for the SQL Server service. This is an informational message. No user action is required.
2019-07-07 16:51:23.18 Logon       Error: 18456, Severity: 14, State: 38.
2019-07-07 16:51:23.18 Logon       Login failed for user 'ABCuser'. Reason: Failed to open the explicitly specified database 'Organization_Name_DB2'. [CLIENT: 192.168.100.151]
2019-07-07 16:51:23.23 Server      The SQL Server Network Interface library could not register the Service Principal Name (SPN) [ DB_SQLSvc/Organization_Name-Service_Account.Organization_Name.COM:ABC ] for the SQL Server service. Windows return code: 0x2098, state: 20. Failure to register a SPN might cause integrated authentication to use NTLM instead of Kerberos. This is an informational message. Further action is only required if Kerberos authentication is required by authentication policies and if the SPN has not been manually registered.
2019-07-07 16:51:23.23 Server      The SQL Server Network Interface library could not register the Service Principal Name (SPN) [ DB_SQLSvc/Organization_Name-Service_Account.Organization_Name.COM:1433 ] for the SQL Server service. Windows return code: 0x2098, state: 20. Failure to register a SPN might cause integrated authentication to use NTLM instead of Kerberos. This is an informational message. Further action is only required if Kerberos authentication is required by authentication policies and if the SPN has not been manually registered.
2019-07-07 16:51:23.40 Logon       Error: 18456, Severity: 14, State: 38.
2019-07-07 16:51:23.40 Logon       Login failed for user 'DB2user'. Reason: Failed to open the explicitly specified database 'Organization_Name_DB2'. [CLIENT: 192.168.100.151]
2019-07-07 16:51:23.45 spid16s     A new instance of the full-text filter daemon host process has been successfully started.
2019-07-07 16:51:23.49 spid19s     Starting up database 'msdb'.
2019-07-07 16:51:23.49 spid20s     Starting up database 'Organization_Name_DB1'.
2019-07-07 16:51:23.49 spid22s     Starting up database 'Organization_Name_DB2'.
2019-07-07 16:51:23.50 spid21s     Starting up database 'Organization_Name_ABC'.
2019-07-07 16:51:23.50 spid23s     Starting up database 'DB3'.
2019-07-07 16:51:23.50 spid24s     Starting up database 'DBA_Maintenance'.
2019-07-07 16:51:23.50 spid10s     Starting up database 'DB_SQLsystemresource'.
2019-07-07 16:51:23.50 spid25s     Starting up database 'DB4'.
2019-07-07 16:51:23.53 spid10s     The resource database build version is 12.00.6024. This is an informational message only. No user action is required.
2019-07-07 16:51:23.60 spid25s     2 transactions rolled forward in database 'DB4' (10:0). This is an informational message only. No user action is required.
2019-07-07 16:51:23.72 spid7s      0 transactions rolled back in database 'DB4' (10:0). This is an informational message only. No user action is required.
2019-07-07 16:51:23.72 spid10s     Starting up database 'model'.
2019-07-07 16:51:23.75 spid24s     47 transactions rolled forward in database 'DBA_Maintenance' (9:0). This is an informational message only. No user action is required.
2019-07-07 16:51:23.81 spid20s     1001 transactions rolled forward in database 'Organization_Name_DB1' (5:0). This is an informational message only. No user action is required.
2019-07-07 16:51:23.93 spid7s      0 transactions rolled back in database 'DBA_Maintenance' (9:0). This is an informational message only. No user action is required.
2019-07-07 16:51:23.93 spid7s      Recovery is writing a checkpoint in database 'DBA_Maintenance' (9). This is an informational message only. No user action is required.
2019-07-07 16:51:23.97 spid19s     1934 transactions rolled forward in database 'msdb' (4:0). This is an informational message only. No user action is required.
2019-07-07 16:51:24.06 Server      Software Usage Metrics is disabled.
2019-07-07 16:51:24.08 spid10s     CHECKDB for database 'model' finished without errors on 2019-07-05 21:45:02.243 (local time). This is an informational message only; no user action is required.
2019-07-07 16:51:24.08 spid10s     Clearing tempdb database.
2019-07-07 16:51:24.14 spid7s      0 transactions rolled back in database 'Organization_Name_DB1' (5:0). This is an informational message only. No user action is required.
2019-07-07 16:51:24.14 spid7s      Recovery is writing a checkpoint in database 'Organization_Name_DB1' (5). This is an informational message only. No user action is required.
2019-07-07 16:51:24.24 spid10s     Starting up database 'tempdb'.
2019-07-07 16:51:24.25 spid7s      0 transactions rolled back in database 'msdb' (4:0). This is an informational message only. No user action is required.
2019-07-07 16:51:24.25 spid7s      Recovery is writing a checkpoint in database 'msdb' (4). This is an informational message only. No user action is required.
2019-07-07 16:51:24.36 spid10s     The tempdb database has 1 data file(s).
2019-07-07 16:51:24.36 spid30s     The Service Broker endpoint is in disabled or stopped state.
2019-07-07 16:51:24.36 spid30s     The Database Mirroring endpoint is in disabled or stopped state.
2019-07-07 16:51:24.36 spid19s     CHECKDB for database 'msdb' finished without errors on 2019-07-05 21:45:02.820 (local time). This is an informational message only; no user action is required.
2019-07-07 16:51:24.37 spid30s     Service Broker manager has started.
2019-07-07 16:51:24.40 spid25s     CHECKDB for database 'DB4' finished without errors on 2019-07-03 23:30:07.940 (local time). This is an informational message only; no user action is required.
2019-07-07 16:51:24.40 spid24s     CHECKDB for database 'DBA_Maintenance' finished without errors on 2019-07-04 07:58:21.313 (local time). This is an informational message only; no user action is required.
2019-07-07 16:51:24.43 spid20s     CHECKDB for database 'Organization_Name_DB1' finished without errors on 2019-07-03 23:30:44.193 (local time). This is an informational message only; no user action is required.
2019-07-07 16:51:24.55 spid52      Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
2019-07-07 16:51:24.55 spid52      Configuration option 'Agent XPs' changed from 0 to 1. Run the RECONFIGURE statement to install.
2019-07-07 16:51:24.56 spid52      Configuration option 'show advanced options' changed from 1 to 0. Run the RECONFIGURE statement to install.
2019-07-07 16:51:24.81 spid23s     1391 transactions rolled forward in database 'DB3' (8:0). This is an informational message only. No user action is required.
2019-07-07 16:51:24.82 spid52      Attempting to load library 'xpsqlbot.dll' into memory. This is an informational message only. No user action is required.
2019-07-07 16:51:24.82 spid52      Using 'xpsqlbot.dll' version '2014.120.6024' to execute extended stored procedure 'xp_qv'. This is an informational message only; no user action is required.
2019-07-07 16:51:24.90 spid52      Attempting to load library 'xpstar.dll' into memory. This is an informational message only. No user action is required.
2019-07-07 16:51:24.91 spid52      Using 'xpstar.dll' version '2014.120.6024' to execute extended stored procedure 'xp_sqlagent_notify'. This is an informational message only; no user action is required.
2019-07-07 16:51:24.92 spid7s      0 transactions rolled back in database 'DB3' (8:0). This is an informational message only. No user action is required.
2019-07-07 16:51:24.92 spid7s      Recovery is writing a checkpoint in database 'DB3' (8). This is an informational message only. No user action is required.
2019-07-07 16:51:24.94 spid23s     CHECKDB for database 'DB3' finished without errors on 2019-07-03 23:41:10.877 (local time). This is an informational message only; no user action is required.
2019-07-07 16:51:25.04 spid22s     Recovery of database 'Organization_Name_DB2' (6) is 0% complete (approximately 313 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
2019-07-07 16:51:25.05 spid22s     Recovery of database 'Organization_Name_DB2' (6) is 0% complete (approximately 310 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
2019-07-07 16:51:25.29 spid22s     5868 transactions rolled forward in database 'Organization_Name_DB2' (6:0). This is an informational message only. No user action is required.
2019-07-07 16:51:25.42 spid21s     82 transactions rolled forward in database 'Organization_Name_ABC' (7:0). This is an informational message only. No user action is required.
2019-07-07 16:51:25.49 spid7s      0 transactions rolled back in database 'Organization_Name_DB2' (6:0). This is an informational message only. No user action is required.
2019-07-07 16:51:25.49 spid7s      Recovery is writing a checkpoint in database 'Organization_Name_DB2' (6). This is an informational message only. No user action is required.
2019-07-07 16:51:25.51 spid22s     CHECKDB for database 'Organization_Name_DB2' finished without errors on 2019-07-03 23:30:45.717 (local time). This is an informational message only; no user action is required.
2019-07-07 16:51:25.62 spid7s      0 transactions rolled back in database 'Organization_Name_ABC' (7:0). This is an informational message only. No user action is required.
2019-07-07 16:51:25.62 spid7s      Recovery is writing a checkpoint in database 'Organization_Name_ABC' (7). This is an informational message only. No user action is required.
2019-07-07 16:51:25.64 spid21s     CHECKDB for database 'Organization_Name_ABC' finished without errors on 2019-07-03 03:31:59.657 (local time). This is an informational message only; no user action is required.
2019-07-07 16:51:25.64 spid7s      Error: 8355, Severity: 16, State: 1.
2019-07-07 16:51:25.64 spid7s      Server-level event notifications can not be delivered. Either Service Broker is disabled in msdb, or msdb failed to start. Event notifications in other databases could be affected as well. Bring msdb online, or enable Service Broker.
2019-07-07 16:51:25.64 spid7s      Recovery is complete. This is an informational message only. No user action is required.
2019-07-07 16:54:38.88 spid57      ex_dump_if_requested: Exception raised, major=52, minor=42, state=9, severity=22, attempting to create symptom dump
2019-07-07 16:54:38.88 spid57      Using 'dbghelp.dll' version '4.0.5'
2019-07-07 16:54:38.89 spid57      **Dump thread - spid = 0, EC = 0x00000004D7695F10

Versão: Microsoft SQL Server 2014 (SP3) (KB4022619) - 12.0.6024.0 (X64) 7 de setembro de 2018 01:37:51 Copyright (c) Microsoft Corporation Enterprise Edition: Licenciamento baseado em núcleo (64 bits) no Windows NT 6.3 ( Build 9600: ) (Hipervisor)

sql-server event
  • 1 respostas
  • 1321 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-07-09 04:30:54 +0800 CST

Arquivo SQLDIAG na pasta de log SQL

  • 0

Houve alguns problemas de inconsistência em nosso banco de dados e isso aconteceu devido ao failover malsucedido do servidor de banco de dados (WSFC), o mesmo foi solicitado nesta pergunta e foi resolvido ontem à noite após descartar e recriar a chave primária e mover os dados para outra tabela.

Havia muitos arquivos SQLDump criados antes que o erro de consistência fosse corrigido, não está mais sendo criado, no entanto, vejo alguns arquivos SQLDIAG na pasta de log, abri o mesmo usando o SSMS e é um conjunto de eventos com nome e carimbo de data/hora, em algum lugar state_desc está aparecendo como limpo enquanto em algum lugar desconhecido ou aviso.

ServerName_InstanceName_SQLDIAG

Nome do evento e carimbo de data/hora

Alguém pode me ajudar a entender isso e se é um problema que precisa ser resolvido?

Versão: Microsoft SQL Server 2014 (SP3) (KB4022619) - 12.0.6024.0 (X64) 7 de setembro de 2018 01:37:51 Copyright (c) Microsoft Corporation Enterprise Edition: Licenciamento baseado em núcleo (64 bits) no Windows NT 6.3 ( Build 9600: ) (Hipervisor)

sql-server clustering
  • 1 respostas
  • 1326 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-07-04 23:33:02 +0800 CST

Problema Checkdb - Erro de consistência em duas tabelas no banco de dados crítico

  • 2

Houve uma atividade de rede ontem à noite e eles estavam atualizando o switch do servidor. Toda a rede estava inativa e nós, como DBA, nos preparamos desabilitando todos os trabalhos no servidor de banco de dados para replicação e backup, no entanto, durante a atividade, um dos WSFC (cluster de failover do servidor Windows) iniciou o failover e parece que não foi bem-sucedido completamente . Isso resultou em dois nós funcionando com banco de dados e todas as unidades em ambos os servidores, enquanto unidades e serviços SQL deveriam estar em apenas um deles.

Acima resultou em muitas corrupção de banco de dados e eu tive muita dificuldade em tentar limpar a corrupção. Iniciado com banco de dados de dois usuários e, posteriormente, tempdb e msdb também corrompidos. Tive que reiniciar o serviço para tempdb, no entanto, para msdb restaurado do último backup bem-sucedido e tudo parecia voltar aos negócios em execução.

Em seguida, executou o dbcc checkdb em todos os bancos de dados - sistema e banco de dados do usuário. banco de dados do sistema não teve nenhum problema, no entanto, em um dos bancos de dados do usuário (crítico) está tendo o erro abaixo:

Command: DBCC CHECKDB ([User_DB_Critical]) WITH NO_INFOMSGS, ALL_ERRORMSGS, DATA_PURITY, MAXDOP = 2
Msg 8914, Level 16, State 1, Server DB_Cluster_Name, Line 1
Incorrect PFS free space information for page (1:1439286) in object ID 526624919, index ID 0, partition ID 72057594055753728, alloc unit ID 72057594056933376 (type In-row data). Expected value  95_PCT_FULL, actual value  80_PCT_FULL.
Msg 8951, Level 16, State 1, Server DB_Cluster_Name, Line 1
Table error: table 'Job_Execution_Log_Table' (ID 526624919). Data row does not have a matching index row in the index 'PK289' (ID 2). Possible missing or invalid keys for the index row matching:
Msg 8955, Level 16, State 1, Server DB_Cluster_Name, Line 1
Data row (1:2224:6) identified by (HEAP RID = (1:2224:6)) with index values 'JOB_NAME = 'populate_Tran_details' and START_TIME = '2019-07-03 03:42:00.323' and HEAP RID = (1:2224:6)'.
Msg 8951, Level 16, State 1, Server DB_Cluster_Name, Line 1
Table error: table 'Job_Execution_Log_Table' (ID 526624919). Data row does not have a matching index row in the index 'PK289' (ID 2). Possible missing or invalid keys for the index row matching:
Msg 8955, Level 16, State 1, Server DB_Cluster_Name, Line 1
Data row (1:1395530:49) identified by (HEAP RID = (1:1395530:49)) with index values 'JOB_NAME = 'populate_Tran_details' and START_TIME = '2019-07-03 03:41:13.480' and HEAP RID = (1:1395530:49)'.
Msg 8951, Level 16, State 1, Server DB_Cluster_Name, Line 1
Table error: table 'Job_Execution_Log_Table' (ID 526624919). Data row does not have a matching index row in the index 'PK289' (ID 2). Possible missing or invalid keys for the index row matching:
Msg 8955, Level 16, State 1, Server DB_Cluster_Name, Line 1
Data row (1:1439286:43) identified by (HEAP RID = (1:1439286:43)) with index values 'JOB_NAME = 'populate_Tran_details' and START_TIME = '2019-07-03 03:45:00.890' and HEAP RID = (1:1439286:43)'.
Msg 8951, Level 16, State 1, Server DB_Cluster_Name, Line 1
Table error: table 'Job_Execution_Log_Table' (ID 526624919). Data row does not have a matching index row in the index 'PK289' (ID 2). Possible missing or invalid keys for the index row matching:
Msg 8955, Level 16, State 1, Server DB_Cluster_Name, Line 1
Data row (1:1439286:44) identified by (HEAP RID = (1:1439286:44)) with index values 'JOB_NAME = 'populate_Tran_details' and START_TIME = '2019-07-03 03:48:00.473' and HEAP RID = (1:1439286:44)'.
Msg 8935, Level 16, State 1, Server DB_Cluster_Name, Line 1
Table error: Object ID 1374679995, index ID 1, partition ID 72057594120962048, alloc unit ID 72057596467675136 (type In-row data). The previous link (1:1685287) on page (1:491016) does not match the previous page (1:1445099) that the parent (1:232830), slot 129 expects for this page.
Msg 8937, Level 16, State 1, Server DB_Cluster_Name, Line 1
Table error: Object ID 1374679995, index ID 1, partition ID 72057594120962048, alloc unit ID 72057596467675136 (type In-row data). B-tree page (1:491016) has two parent nodes (0:1), slot 0 and (1:1591622), slot 138.
Msg 8977, Level 16, State 1, Server DB_Cluster_Name, Line 1
Table error: Object ID 1374679995, index ID 17, partition ID 72057594121093120, alloc unit ID 72057596467806208 (type In-row data). Parent node for page (1:692096) was not encountered.
Msg 8979, Level 16, State 1, Server DB_Cluster_Name, Line 1
Table error: Object ID 1374679995, index ID 17, partition ID 72057594121093120, alloc unit ID 72057596467806208 (type In-row data). Page (1:692097) is missing references from parent (unknown) and previous (page (1:1548068)) nodes. Possible bad root entry in system catalog.
Msg 8978, Level 16, State 1, Server DB_Cluster_Name, Line 1
Table error: Object ID 1374679995, index ID 1, partition ID 72057594120962048, alloc unit ID 72057596467675136 (type In-row data). Page (1:1623651) is missing a reference from previous page (1:491016). Possible chain linkage problem.
CHECKDB found 0 allocation errors and 5 consistency errors in table 'Job_Execution_Log_Table' (object ID 526624919).
CHECKDB found 0 allocation errors and 5 consistency errors in table 'Tran_details_Table' (object ID 1374679995).
CHECKDB found 0 allocation errors and 10 consistency errors in database 'User_DB_Critical'.
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (User_DB_Critical).

Tamanho da mesa:

Tamanhos

Sugeri ao meu gerente que seguisse a abordagem abaixo:

  1. Tente encontrar a linha que foi inserida naquele momento e, se possível, exclua-a das duas tabelas acima.
  2. Se a etapa 1 não for possível, reconstrua todos os índices na tabela. A reconstrução requer acesso exclusivo à tabela.
  3. Se a reconstrução não funcionar – precisaremos descartar e recriar o índice. Isso requer acesso exclusivo à mesa.
  4. Se a etapa 3 não funcionar, teremos que optar pela opção de reconstrução de reparo. Esta opção requer que todo o banco de dados esteja no modo de usuário único – o que significa que ninguém deve acessar o banco de dados enquanto esta operação estiver em andamento.
  5. Se a etapa 4 não funcionar - precisaremos ir para a opção repair_allow_data_loss, que é demorada e tem potencial para perder dados com problemas de consistência. Isso novamente exige que o banco de dados esteja no modo de usuário único e ninguém deve acessar o banco de dados.

Eu tenho backup completo do banco de dados pouco antes da atividade, no entanto, a atividade foi planejada na manhã de 3 de julho e, devido à emissão de todo o banco de dados, tornou-se manhã 6h30 no momento em que liberamos toda a corrupção do banco de dados e os negócios começaram a funcionar como de costume. Para msdb e um banco de dados de usuário - usei backup anterior apenas para restauração. Eu executei o checkdb após o horário comercial em 3 de julho, o que significa que o banco de dados contém todos os dados do dia inteiro. Portanto, perderemos todos os dados do dia 3 de julho, se fizermos a restauração do backup de 3 de julho antes da atividade, o que não é aceitável para os negócios.

Adicionando um pouco mais de detalhes sobre o backup - Atualmente estou usando o script ola hallengren para fazer o backup e o backup foi executado com sucesso na noite passada. Abaixo estão os parâmetros que estou usando para fazer backup:

sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d DBA_Maintenance -Q "EXECUTE [dbo].[DatabaseBackup] @Databases = 'USER_DATABASES, -One_Heavy_Database', @Directory = N'DB_Backup_Path', @BackupType = 'FULL', @Verify = 'Y', @CleanupTime = 24, @CheckSum = 'Y', @Compress = 'Y',  @LogToTable = 'Y'" -b

Estou usando o sinalizador verificar e soma de verificação para verificar o backup. O backup diferencial é agendado a cada 2 horas e o backup de log está sendo executado a cada 15 minutos (o envio de log está configurado, mas parado por enquanto) e até agora nenhum backup falhou ou relatou qualquer problema.

Na tabela pesada, 3 erros de consistência estão no índice clusterizado e 2 no índice não clusterizado. Para a primeira tabela, ou seja, Job_Execution_Log_Table tem todas as inconsistências no índice não clusterizado.

Preciso de conselhos sobre como fazer isso e qual deve ser o esforço mais eficaz e demorado para corrigir esse problema de consistência.

Atualmente estou acessando o link de Paul Randal e tentando ver se essa seria a melhor aposta.

EDIT: Eu restaurei o backup do servidor primário para o secundário e executei o checkdb e descobri o mesmo erro de consistência que foi relatado no primário. Índice não clusterizado descartado e recriado, 4 erros de consistência desaparecem e apenas um permanece:

Incorrect PFS free space information for page (1:1439286) in object ID 526624919, index ID 0, partition ID 72057594055753728, alloc unit ID 72057594056933376 (type In-row data). Expected value  95_PCT_FULL, actual value  80_PCT_FULL.

Ainda não tocou na tabela grande, pois está tendo problemas no índice clusterizado. E não sei como corrigir esse problema de PFS.

Aprecie seu conselho.

Versão: Microsoft SQL Server 2014 (SP3) (KB4022619) - 12.0.6024.0 (X64) 7 de setembro de 2018 01:37:51 Copyright (c) Microsoft Corporation Enterprise Edition: Licenciamento baseado em núcleo (64 bits) no Windows NT 6.3 ( Build 9600: ) (Hipervisor)

sql-server sql-server-2012
  • 1 respostas
  • 514 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-07-01 01:19:41 +0800 CST

SQL Server Ignorando o nome da instância ao usar o número da porta de uma instância diferente

  • 4

Eu vi um caso estranho recentemente e ainda não tenho ideia de qual deve ser o raciocínio por trás disso. Em um dos meus servidores de desenvolvimento, duas instâncias do SQL Server estão em execução - uma é padrão e outra é a instância UAT.

Recentemente, fizemos a alteração na porta padrão de ambas as instâncias e o mesmo foi comunicado à equipe de desenvolvimento e outras partes interessadas para iniciar sua alteração e testar o mesmo. Para não afetar o aplicativo existente, a porta 1433 foi mantida como está na instância padrão. Então, abaixo estão os detalhes do servidor e da porta para se conectar:

Conexão por padrão --> Server_Name,35683

Conexão para instância nomeada (SIT) --> Server_Name\SIT,35685

Propriedades de TCP/IP da instância padrão

Propriedades TCP/IP da instância nomeada

Ambas as instâncias têm bancos de dados semelhantes, porém diferentes conjuntos de dados, pois apontam para ambientes diferentes.

Um dos desenvolvedores sênior estava usando a conexão como Server_name\SIT,35683 significando incompatibilidade de instância e porta. Ele estava usando a instância SIT, no entanto, a porta da instância padrão e estava conectando-o à instância padrão.

Isso foi detectado quando eu estava em sua mesa e estávamos testando algum código e notei isso porque minha alteração não estava refletindo na instância padrão, pois eu havia feito alterações na instância SIT.

Alguém pode explicar esse comportamento e como resolver isso?

sql-server instance
  • 1 respostas
  • 349 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-04-21 23:47:05 +0800 CST

O log do banco de dados tempdb não está disponível

  • 3

Estou lutando com esse problema há muitos meses, estou dizendo que não é um problema de banco de dados e atribuo este caso à equipe de armazenamento e sistema operacional e eles o estão atribuindo a mim posteriormente. Esse problema está acontecendo repetidamente e não há nenhum padrão definido de ocorrência.

Eu verifiquei a mesma pergunta feita aqui e posso dizer que isso não é um problema com corrupção de banco de dados, pois estou usando o script de Ola Hallengren para trabalho de manutenção e verificação de integridade do banco de dados (checkdb) é feito semanalmente para banco de dados de usuário e sistema e nenhum problema relatado naquilo.

Acessou o segundo link também para a pergunta semelhante e pode confirmar que o tempdb está em estado de recuperação simples.

Eu adicionei um arquivo adicional para dados e registrei ambos para que, se um ficar indisponível, o outro ainda estará acessível, mas depois soube que o acesso do tempdb é sequencial, então ele irá para o segundo arquivo somente quando o primeiro ficar cheio:

Propriedades Tempdb

Toda vez que esse problema ocorre, posso ver que temos outro erro no log do aplicativo do Windows, conforme abaixo:

SQLServerLogMgr::LogWriter: Operating system error 170(The requested resource is in use.) encountered.

A equipe de armazenamento excluiu esses arquivos da verificação antivírus.

Uma coisa a notar aqui - verifiquei outros bancos de dados do sistema e seus locais de arquivos e pude ver que, para mestre e modelo, dados e arquivo de log estão na mesma unidade (unidade E), enquanto para tempdb e msdb, os dados estão na unidade E e log arquivo está na unidade G, não tenho certeza se isso é relevante.

Existe alguma sequência de verificação do banco de dados do sistema quando um trabalho é acionado ou qualquer evento é acionado? Se for um problema com essa unidade, o msdb também estará na mesma unidade.

Este é um servidor em cluster com unidades de banco de dados compartilhadas em dois servidores e o servidor é usado para o aplicativo sharepoint.

Server Version: Windows Server 2012 Standard
SQL Server: Microsoft SQL Server 2012 (SP4-GDR) (KB4057116) - 11.0.7462.6 (X64) 
    Jan  5 2018 22:11:56 
    Copyright (c) Microsoft Corporation
    Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)

A única opção que nos resta é reiniciar o serviço ou fazer failover - simplesmente não parece bom fazê-lo.

Qualquer ajuda neste sentido é apreciada.

sql-server tempdb
  • 1 respostas
  • 1873 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-04-10 04:56:27 +0800 CST

Gráfico e Interpretação de Deadlock, solução para evitar

  • 4

Estou dando suporte a aplicativos baseados em fornecedores, que são preenchidos com bloqueios e impasses. Os deadlocks ocorrem principalmente envolvendo dois ou três processos, no entanto, notei ontem que havia 9 SPIDs envolvidos.

Alguém pode me ajudar a entender esse gráfico de impasse e a solução sobre como evitar isso.

<deadlock><victim-list><victimProcess id="process2ff017c28"/><victimProcess id="process2f1538108"/><victimProcess id="process2f618d088"/><victimProcess id="process2f6d828c8"/><victimProcess id="process2f6d83848"/><victimProcess id="process2da9b5468"/><victimProcess id="process2efac7468"/><victimProcess id="process2efac7848"/></victim-list><process-list><process id="process2ff017c28" taskpriority="0" logused="0" waitresource="OBJECT: 11:1142295129:0 " waittime="4412" ownerId="284194209" transactionname="implicit_transaction" lasttranstarted="2019-04-08T15:29:07.323" XDES="0x2a785f800" lockMode="IX" schedulerid="1" kpid="9052" status="suspended" spid="63" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-04-08T15:30:58.733" lastbatchcompleted="2019-04-08T15:30:58.733" lastattention="1900-01-01T00:00:00.733" clientapp="jTDS" hostname="APPNAME" hostpid="123" loginname="IRB_APP_USER" isolationlevel="repeatable read (3)" xactid="284194209" currentdb="11" currentdbname="Database_Name" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058"><executionStack><frame procname="adhoc" line="1" stmtstart="46" stmtend="180" sqlhandle="0x02000000b6b6e728e6bf289c908196a1f4e56b8892a5eab10000000000000000000000000000000000000000">
unknown    </frame></executionStack><inputbuf>
(@P0 bigint,@P1 bigint)update Table_Name set STATUS_ID= @P0  where id= @P1    </inputbuf></process><process id="process2f1538108" taskpriority="0" logused="0" waitresource="OBJECT: 11:1142295129:0 " waittime="4411" ownerId="284107628" transactionname="implicit_transaction" lasttranstarted="2019-04-08T15:24:11.843" XDES="0xdacf54e0" lockMode="IX" schedulerid="1" kpid="7272" status="suspended" spid="73" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-04-08T15:30:58.737" lastbatchcompleted="2019-04-08T15:30:58.727" lastattention="1900-01-01T00:00:00.727" clientapp="jTDS" hostname="APPNAME" hostpid="123" loginname="IRB_APP_USER" isolationlevel="repeatable read (3)" xactid="284107628" currentdb="11" currentdbname="Database_Name" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058"><executionStack><frame procname="adhoc" line="1" stmtstart="46" stmtend="180" sqlhandle="0x02000000b6b6e728e6bf289c908196a1f4e56b8892a5eab10000000000000000000000000000000000000000">
unknown    </frame></executionStack><inputbuf>
(@P0 bigint,@P1 bigint)update Table_Name set STATUS_ID= @P0  where id= @P1    </inputbuf></process><process id="process2f618d088" taskpriority="0" logused="0" waitresource="OBJECT: 11:1142295129:0 " waittime="4620" ownerId="284193487" transactionname="implicit_transaction" lasttranstarted="2019-04-08T15:28:59.513" XDES="0x20df303b0" lockMode="IX" schedulerid="2" kpid="2088" status="suspended" spid="79" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-04-08T15:30:58.527" lastbatchcompleted="2019-04-08T15:30:58.527" lastattention="1900-01-01T00:00:00.527" clientapp="jTDS" hostname="APPNAME" hostpid="123" loginname="IRB_APP_USER" isolationlevel="repeatable read (3)" xactid="284193487" currentdb="11" currentdbname="Database_Name" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058"><executionStack><frame procname="adhoc" line="1" stmtstart="46" stmtend="180" sqlhandle="0x02000000b6b6e728e6bf289c908196a1f4e56b8892a5eab10000000000000000000000000000000000000000">
unknown    </frame></executionStack><inputbuf>
(@P0 bigint,@P1 bigint)update Table_Name set STATUS_ID= @P0  where id= @P1    </inputbuf></process><process id="process2f6d828c8" taskpriority="0" logused="0" waitresource="OBJECT: 11:1142295129:0 " waittime="4302" ownerId="284194269" transactionname="implicit_transaction" lasttranstarted="2019-04-08T15:29:07.743" XDES="0x25090c6d0" lockMode="IX" schedulerid="3" kpid="3140" status="suspended" spid="105" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-04-08T15:30:58.843" lastbatchcompleted="2019-04-08T15:30:58.843" lastattention="1900-01-01T00:00:00.843" clientapp="jTDS" hostname="APPNAME" hostpid="123" loginname="IRB_APP_USER" isolationlevel="repeatable read (3)" xactid="284194269" currentdb="11" currentdbname="Database_Name" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058"><executionStack><frame procname="adhoc" line="1" stmtstart="46" stmtend="180" sqlhandle="0x02000000b6b6e728e6bf289c908196a1f4e56b8892a5eab10000000000000000000000000000000000000000">
unknown    </frame></executionStack><inputbuf>
(@P0 bigint,@P1 bigint)update Table_Name set STATUS_ID= @P0  where id= @P1    </inputbuf></process><process id="process2f6d83848" taskpriority="0" logused="0" waitresource="OBJECT: 11:1142295129:0 " waittime="4319" ownerId="284178892" transactionname="implicit_transaction" lasttranstarted="2019-04-08T15:26:38.450" XDES="0xb83c63b0" lockMode="IX" schedulerid="3" kpid="7372" status="suspended" spid="81" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-04-08T15:30:58.827" lastbatchcompleted="2019-04-08T15:30:58.827" lastattention="1900-01-01T00:00:00.827" clientapp="jTDS" hostname="APPNAME" hostpid="123" loginname="IRB_APP_USER" isolationlevel="repeatable read (3)" xactid="284178892" currentdb="11" currentdbname="Database_Name" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058"><executionStack><frame procname="adhoc" line="1" stmtstart="46" stmtend="180" sqlhandle="0x02000000b6b6e728e6bf289c908196a1f4e56b8892a5eab10000000000000000000000000000000000000000">
unknown    </frame></executionStack><inputbuf>
(@P0 bigint,@P1 bigint)update Table_Name set STATUS_ID= @P0  where id= @P1    </inputbuf></process><process id="process2da9b5468" taskpriority="0" logused="0" waitresource="OBJECT: 11:1142295129:0 " waittime="4300" ownerId="284174799" transactionname="implicit_transaction" lasttranstarted="2019-04-08T15:25:26.760" XDES="0x20d4683b0" lockMode="IX" schedulerid="3" kpid="5664" status="suspended" spid="97" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-04-08T15:30:58.847" lastbatchcompleted="2019-04-08T15:30:58.847" lastattention="1900-01-01T00:00:00.847" clientapp="jTDS" hostname="APPNAME" hostpid="123" loginname="IRB_APP_USER" isolationlevel="repeatable read (3)" xactid="284174799" currentdb="11" currentdbname="Database_Name" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058"><executionStack><frame procname="adhoc" line="1" stmtstart="46" stmtend="180" sqlhandle="0x02000000b6b6e728e6bf289c908196a1f4e56b8892a5eab10000000000000000000000000000000000000000">
unknown    </frame></executionStack><inputbuf>
(@P0 bigint,@P1 bigint)update Table_Name set STATUS_ID= @P0  where id= @P1    </inputbuf></process><process id="process2efac7468" taskpriority="0" logused="0" waitresource="OBJECT: 11:1142295129:0 " waittime="4394" ownerId="284192570" transactionname="implicit_transaction" lasttranstarted="2019-04-08T15:28:49.180" XDES="0x184e789f0" lockMode="IX" schedulerid="4" kpid="5348" status="suspended" spid="98" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-04-08T15:30:58.753" lastbatchcompleted="2019-04-08T15:30:58.753" lastattention="1900-01-01T00:00:00.753" clientapp="jTDS" hostname="APPNAME" hostpid="123" loginname="IRB_APP_USER" isolationlevel="repeatable read (3)" xactid="284192570" currentdb="11" currentdbname="Database_Name" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058"><executionStack><frame procname="adhoc" line="1" stmtstart="46" stmtend="180" sqlhandle="0x02000000b6b6e728e6bf289c908196a1f4e56b8892a5eab10000000000000000000000000000000000000000">
unknown    </frame></executionStack><inputbuf>
(@P0 bigint,@P1 bigint)update Table_Name set STATUS_ID= @P0  where id= @P1    </inputbuf></process><process id="process2efac7848" taskpriority="0" logused="0" waitresource="OBJECT: 11:1142295129:0 " waittime="4409" ownerId="284178168" transactionname="implicit_transaction" lasttranstarted="2019-04-08T15:26:23.063" XDES="0x2420aab80" lockMode="IX" schedulerid="4" kpid="4572" status="suspended" spid="68" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-04-08T15:30:58.740" lastbatchcompleted="2019-04-08T15:30:58.737" lastattention="1900-01-01T00:00:00.737" clientapp="jTDS" hostname="APPNAME" hostpid="123" loginname="IRB_APP_USER" isolationlevel="repeatable read (3)" xactid="284178168" currentdb="11" currentdbname="Database_Name" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058"><executionStack><frame procname="adhoc" line="1" stmtstart="46" stmtend="180" sqlhandle="0x02000000b6b6e728e6bf289c908196a1f4e56b8892a5eab10000000000000000000000000000000000000000">
unknown    </frame></executionStack><inputbuf>
(@P0 bigint,@P1 bigint)update Table_Name set STATUS_ID= @P0  where id= @P1    </inputbuf></process><process id="process2efac7c28" taskpriority="0" logused="0" waitresource="OBJECT: 11:1142295129:0 " waittime="4413" ownerId="284177493" transactionname="implicit_transaction" lasttranstarted="2019-04-08T15:26:12.160" XDES="0xab9103b0" lockMode="IX" schedulerid="4" kpid="2448" status="suspended" spid="52" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-04-08T15:30:58.733" lastbatchcompleted="2019-04-08T15:30:58.733" lastattention="1900-01-01T00:00:00.733" clientapp="jTDS" hostname="APPNAME" hostpid="123" loginname="IRB_APP_USER" isolationlevel="repeatable read (3)" xactid="284177493" currentdb="11" currentdbname="Database_Name" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058"><executionStack><frame procname="adhoc" line="1" stmtstart="46" stmtend="180" sqlhandle="0x02000000b6b6e728e6bf289c908196a1f4e56b8892a5eab10000000000000000000000000000000000000000">
unknown    </frame></executionStack><inputbuf>
(@P0 bigint,@P1 bigint)update Table_Name set STATUS_ID= @P0  where id= @P1    </inputbuf></process></process-list><resource-list><objectlock lockPartition="0" objid="1142295129" subresource="FULL" dbid="11" objectname="Database_Name.Schema_Name.Table_Name" id="lock2149d8800" mode="S" associatedObjectId="1142295129"><owner-list><owner id="process2f6d828c8" mode="S"/><owner id="process2da9b5468" mode="S"/><owner id="process2f6d828c8" mode="IX" requestType="convert"/><owner id="process2da9b5468" mode="IX" requestType="convert"/></owner-list><waiter-list><waiter id="process2ff017c28" mode="IX" requestType="convert"/></waiter-list></objectlock><objectlock lockPartition="0" objid="1142295129" subresource="FULL" dbid="11" objectname="Database_Name.Schema_Name.Table_Name" id="lock2149d8800" mode="S" associatedObjectId="1142295129"><owner-list><owner id="process2ff017c28" mode="S"/><owner id="process2f6d828c8" mode="S"/><owner id="process2da9b5468" mode="S"/><owner id="process2ff017c28" mode="IX" requestType="convert"/><owner id="process2f6d828c8" mode="IX" requestType="convert"/><owner id="process2da9b5468" mode="IX" requestType="convert"/></owner-list><waiter-list><waiter id="process2f1538108" mode="IX" requestType="convert"/></waiter-list></objectlock><objectlock lockPartition="0" objid="1142295129" subresource="FULL" dbid="11" objectname="Database_Name.Schema_Name.Table_Name" id="lock2149d8800" mode="S" associatedObjectId="1142295129"><owner-list><owner id="process2ff017c28" mode="S"/><owner id="process2f6d828c8" mode="S"/><owner id="process2da9b5468" mode="S"/><owner id="process2ff017c28" mode="IX" requestType="convert"/><owner id="process2f6d828c8" mode="IX" requestType="convert"/><owner id="process2da9b5468" mode="IX" requestType="convert"/></owner-list><waiter-list><waiter id="process2f618d088" mode="IX" requestType="convert"/></waiter-list></objectlock><objectlock lockPartition="0" objid="1142295129" subresource="FULL" dbid="11" objectname="Database_Name.Schema_Name.Table_Name" id="lock2149d8800" mode="S" associatedObjectId="1142295129"><owner-list><owner id="process2ff017c28" mode="S"/><owner id="process2f618d088" mode="S"/><owner id="process2da9b5468" mode="S"/><owner id="process2f618d088" mode="IX" requestType="convert"/><owner id="process2ff017c28" mode="IX" requestType="convert"/><owner id="process2da9b5468" mode="IX" requestType="convert"/></owner-list><waiter-list><waiter id="process2f6d828c8" mode="IX" requestType="convert"/></waiter-list></objectlock><objectlock lockPartition="0" objid="1142295129" subresource="FULL" dbid="11" objectname="Database_Name.Schema_Name.Table_Name" id="lock2149d8800" mode="S" associatedObjectId="1142295129"><owner-list><owner id="process2ff017c28" mode="S"/><owner id="process2f618d088" mode="S"/><owner id="process2da9b5468" mode="S"/><owner id="process2f618d088" mode="IX" requestType="convert"/><owner id="process2ff017c28" mode="IX" requestType="convert"/><owner id="process2da9b5468" mode="IX" requestType="convert"/></owner-list><waiter-list><waiter id="process2f6d83848" mode="IX" requestType="convert"/></waiter-list></objectlock><objectlock lockPartition="0" objid="1142295129" subresource="FULL" dbid="11" objectname="Database_Name.Schema_Name.Table_Name" id="lock2149d8800" mode="S" associatedObjectId="1142295129"><owner-list><owner id="process2ff017c28" mode="S"/><owner id="process2f6d83848" mode="S"/><owner id="process2efac7848" mode="S"/><owner id="process2ff017c28" mode="IX" requestType="convert"/><owner id="process2efac7848" mode="IX" requestType="convert"/><owner id="process2f6d83848" mode="IX" requestType="convert"/></owner-list><waiter-list><waiter id="process2da9b5468" mode="IX" requestType="convert"/></waiter-list></objectlock><objectlock lockPartition="0" objid="1142295129" subresource="FULL" dbid="11" objectname="Database_Name.Schema_Name.Table_Name" id="lock2149d8800" mode="S" associatedObjectId="1142295129"><owner-list><owner id="process2ff017c28" mode="S"/><owner id="process2f6d83848" mode="S"/><owner id="process2efac7848" mode="S"/><owner id="process2ff017c28" mode="IX" requestType="convert"/><owner id="process2efac7848" mode="IX" requestType="convert"/><owner id="process2f6d83848" mode="IX" requestType="convert"/></owner-list><waiter-list><waiter id="process2efac7468" mode="IX" requestType="convert"/></waiter-list></objectlock><objectlock lockPartition="0" objid="1142295129" subresource="FULL" dbid="11" objectname="Database_Name.Schema_Name.Table_Name" id="lock2149d8800" mode="S" associatedObjectId="1142295129"><owner-list><owner id="process2ff017c28" mode="S"/><owner id="process2f6d83848" mode="S"/><owner id="process2efac7468" mode="S"/><owner id="process2ff017c28" mode="IX" requestType="convert"/><owner id="process2efac7468" mode="IX" requestType="convert"/><owner id="process2f6d83848" mode="IX" requestType="convert"/></owner-list><waiter-list><waiter id="process2efac7848" mode="IX" requestType="convert"/></waiter-list></objectlock><objectlock lockPartition="0" objid="1142295129" subresource="FULL" dbid="11" objectname="Database_Name.Schema_Name.Table_Name" id="lock2149d8800" mode="S" associatedObjectId="1142295129"><owner-list><owner id="process2ff017c28" mode="S"/><owner id="process2f6d83848" mode="S"/><owner id="process2efac7468" mode="S"/><owner id="process2ff017c28" mode="IX" requestType="convert"/><owner id="process2efac7468" mode="IX" requestType="convert"/><owner id="process2f6d83848" mode="IX" requestType="convert"/></owner-list><waiter-list><waiter id="process2efac7c28" mode="IX" requestType="convert"/></waiter-list></objectlock></resource-list></deadlock>

O nível de isolamento é definido como Read Committed Snapshot no nível do banco de dados.

Quando abri este gráfico de impasse no Explorer do plano Sentry One, foi assustador.

Explorador de Planos Sentinela de Gráfico de Deadlock

Versão: Microsoft SQL Server 2014 (SP3) (KB4022619) - 12.0.6024.0 (X64) 7 de setembro de 2018 01:37:51 Copyright (c) Microsoft Corporation Enterprise Edition (64 bits) no Windows NT 6.3 (Build 14393: ) ( Hipervisor)

sql-server deadlock
  • 3 respostas
  • 2316 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-04-01 04:06:58 +0800 CST

Subindexação agressiva e nenhum dado para índice ausente

  • 3

Eu sei que há muitos bloqueios no meu banco de dados e tentei o meu melhor para classificar isso por fornecedor, pois esse aplicativo é suportado por eles e ainda não produziu nenhum resultado bem-sucedido. De vez em quando, temos problemas de bloqueio e esse bloqueio fica tão grave e seu design é tão ruim que todo o portal cai, a menos e até que eu mate alguns SPIDs que estão mantendo bloqueio exclusivo (principalmente).

Estou usando sp_blitzindex há quase um ano e sou um grande fã do Kit de Primeiros Socorros fornecido pelo Sr. Brent Ozar e equipe. Quando executo sp_blitzindex neste banco de dados onde o bloqueio ocorre, ele diz - " Aggressive Under-Indexing: Total lock wait time > 5 minutes (row + page) with long average waits " com a prioridade de 10. Verifiquei a coluna URL e também verifiquei outras páginas relacionadas, mas não consegui muita ajuda.

Eu sei que as tabelas listadas aqui estão indexadas e mais alguns índices precisam ser criados, no entanto, quando executo o mesmo procedimento, ou seja, sp_blitzindex para esses objetos individualmente no nível da tabela usando o comando abaixo:

EXEC dbo.sp_BlitzIndex @DatabaseName='db1', @SchemaName='sch', @TableName='tab1';

Não recebo nenhum detalhe de índice ausente. Todos os índices existentes são utilizados e a contagem de leitura é menor que a contagem de gravação, apenas o problema destacado aqui está na coluna "Aguardas de bloqueio" para a chave primária.

Não tenho ideia de qual índice de coluna precisa ser criado. Eu também verifiquei sp_blitzlock para ver se eu poderia reunir mais informações que ajudariam, no entanto, tudo o que vejo há muitos impasses e os mesmos objetos são listados, o que é figurado na subindexação agressiva.

Também verifiquei a saída de sp_blitzcache passando a ordem de classificação como "leituras" e "duração" neste banco de dados específico, mas nenhuma solicitação de índice ausente. Existem avisos dizendo "Consulta Não Parametrizada" e "Consulta Não Parametrizada, não SARGables" e esses planos envolvem diferentes conjuntos de tabelas.

Qualquer ajuda é muito apreciada.

Version: Microsoft SQL Server 2014 (SP3) (KB4022619) - 12.0.6024.0 (X64) Sep 7 2018 01:37:51 Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 (Build 9600: ) (Hypervisor)
sql-server index
  • 1 respostas
  • 1475 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-03-26 04:53:57 +0800 CST

Sugestão sobre a criação de índice ausente

  • 1

Eu tenho usado sp_blitzindex e é muito útil (Graças a Brent Ozar e equipe). Eu executei este procedimento no meu banco de dados e abaixo está a descoberta de uma tabela que se enquadra no grupo Indexaphobia:

saída sp_blitzindex

abaixo está a definição da tabela subjacente:

CREATE TABLE [dbo].[table_name](
    [L] [int] IDENTITY(1,1) NOT NULL,
    [R] [varchar](15) NOT NULL,
    [A] [int] NOT NULL,
    [VAR32_01] [varchar](32) NULL,
    [VAR32_02] [varchar](32) NULL,
    [VAR32_03] [varchar](32) NULL,
    [VAR32_04] [varchar](32) NULL,
    [VAR32_05] [varchar](32) NULL,
    [VAR32_06] [varchar](32) NULL,
    [VAR32_07] [varchar](32) NULL,
    [VAR32_08] [varchar](32) NULL,
    [VAR32_09] [varchar](32) NULL,
    [VAR32_10] [varchar](32) NULL,
    [VAR32_11] [varchar](32) NULL,
    [VAR32_12] [varchar](32) NULL,
    [VAR32_13] [varchar](32) NULL,
    [VAR32_14] [varchar](32) NULL,
    [VAR32_15] [varchar](32) NULL,
    [VAR32_16] [varchar](32) NULL,
    [VAR32_17] [varchar](32) NULL,
    [VAR32_18] [varchar](32) NULL,
    [VAR32_19] [varchar](32) NULL,
    [VAR32_20] [varchar](32) NULL,
    [VAR32_21] [varchar](32) NULL,
    [VAR32_22] [varchar](32) NULL,
    [VAR32_23] [varchar](32) NULL,
    [VAR32_24] [varchar](32) NULL,
    [VAR32_25] [varchar](32) NULL,
    [VAR32_26] [varchar](32) NULL,
    [VAR32_27] [varchar](32) NULL,
    [VAR32_28] [varchar](32) NULL,
    [VAR32_29] [varchar](32) NULL,
    [VAR32_30] [varchar](32) NULL,
    [VAR32_31] [varchar](32) NULL,
    [VAR32_32] [varchar](32) NULL,
    [VAR32_33] [varchar](32) NULL,
    [VAR32_34] [varchar](32) NULL,
    [VAR32_35] [varchar](32) NULL,
    [VAR32_36] [varchar](32) NULL,
    [VAR32_37] [varchar](32) NULL,
    [VAR32_38] [varchar](32) NULL,
    [VAR32_39] [varchar](32) NULL,
    [VAR32_40] [varchar](32) NULL,
    [VAR32_41] [varchar](32) NULL,
    [VAR32_42] [varchar](32) NULL,
    [VAR32_43] [varchar](32) NULL,
    [VAR32_44] [varchar](32) NULL,
    [VAR32_45] [varchar](32) NULL,
    [VAR32_46] [varchar](32) NULL,
    [VAR32_47] [varchar](32) NULL,
    [VAR32_48] [varchar](32) NULL,
    [VAR32_49] [varchar](32) NULL,
    [VAR32_50] [varchar](32) NULL,
    [VAR32_51] [varchar](32) NULL,
    [VAR32_52] [varchar](32) NULL,
    [VAR32_53] [varchar](32) NULL,
    [VAR32_54] [varchar](32) NULL,
    [VAR32_55] [varchar](32) NULL,
    [VAR32_56] [varchar](32) NULL,
    [VAR32_57] [varchar](32) NULL,
    [VAR32_58] [varchar](32) NULL,
    [VAR32_59] [varchar](32) NULL,
    [VAR32_60] [varchar](32) NULL,
    [VAR32_61] [varchar](32) NULL,
    [VAR32_62] [varchar](32) NULL,
    [VAR32_63] [varchar](32) NULL,
    [VAR32_64] [varchar](32) NULL,
    [VAR64_01] [varchar](64) NULL,
    [VAR64_02] [varchar](64) NULL,
    [VAR64_03] [varchar](64) NULL,
    [VAR64_04] [varchar](64) NULL,
    [VAR64_05] [varchar](64) NULL,
    [VAR64_06] [varchar](64) NULL,
    [VAR64_07] [varchar](64) NULL,
    [VAR64_08] [varchar](64) NULL,
    [VAR64_09] [varchar](64) NULL,
    [VAR64_10] [varchar](64) NULL,
    [VAR64_11] [varchar](64) NULL,
    [VAR64_12] [varchar](64) NULL,
    [VAR64_13] [varchar](64) NULL,
    [VAR64_14] [varchar](64) NULL,
    [VAR64_15] [varchar](64) NULL,
    [VAR64_16] [varchar](64) NULL,
    [VAR64_17] [varchar](64) NULL,
    [VAR64_18] [varchar](64) NULL,
    [VAR64_19] [varchar](64) NULL,
    [VAR64_20] [varchar](64) NULL,
    [VAR64_21] [varchar](64) NULL,
    [VAR64_22] [varchar](64) NULL,
    [VAR64_23] [varchar](64) NULL,
    [VAR64_24] [varchar](64) NULL,
    [VAR64_25] [varchar](64) NULL,
    [VAR64_26] [varchar](64) NULL,
    [VAR64_27] [varchar](64) NULL,
    [VAR64_28] [varchar](64) NULL,
    [VAR64_29] [varchar](64) NULL,
    [VAR64_30] [varchar](64) NULL,
    [VAR64_31] [varchar](64) NULL,
    [VAR64_32] [varchar](64) NULL,
    [VAR128_01] [varchar](128) NULL,
    [VAR128_02] [varchar](128) NULL,
    [VAR128_03] [varchar](128) NULL,
    [VAR128_04] [varchar](128) NULL,
    [VAR128_05] [varchar](128) NULL,
    [VAR128_06] [varchar](128) NULL,
    [VAR128_07] [varchar](128) NULL,
    [VAR128_08] [varchar](128) NULL,
    [VAR128_09] [varchar](128) NULL,
    [VAR128_10] [varchar](128) NULL,
    [VAR128_11] [varchar](128) NULL,
    [VAR128_12] [varchar](128) NULL,
    [VAR128_13] [varchar](128) NULL,
    [VAR128_14] [varchar](128) NULL,
    [VAR128_15] [varchar](128) NULL,
    [VAR128_16] [varchar](128) NULL,
    [VAR256_01] [varchar](256) NULL,
    [VAR256_02] [varchar](256) NULL,
    [VAR256_03] [varchar](256) NULL,
    [VAR256_04] [varchar](256) NULL,
    [VAR256_05] [varchar](256) NULL,
    [VAR256_06] [varchar](256) NULL,
    [VAR256_07] [varchar](256) NULL,
    [VAR256_08] [varchar](256) NULL,
    [VAR512_01] [varchar](512) NULL,
    [VAR512_02] [varchar](512) NULL,
    [VAR512_03] [varchar](512) NULL,
    [VAR512_04] [varchar](512) NULL,
    [VAR1024_01] [varchar](1024) NULL,
    [VAR1024_02] [varchar](1024) NULL,
    [E] [varchar](20) NULL,
    [M] [varchar](40) NULL,
    [E] [varchar](50) NULL,
    [N] [varchar](40) NULL,
    [TN] [int] NULL,
    [T] [numeric](1, 0) NULL,
    [D] [numeric](1, 0) NULL,
 CONSTRAINT [XPKtable_name] PRIMARY KEY NONCLUSTERED 
(
    [L] ASC,
    [R] ASC
)

Seguindo esses detalhes de índice ausentes, estou planejando criar um índice com a definição abaixo:

create nonclustered index table_name_incl(A,VAR32_02) include(L,R,E,T,D,VAR32_10,VAR32_18,VAR32_19,VAR32_20,VAR64_11,VAR64_02,VAR32_42,VAR32_39,VAR32_38,VAR32_35,VAR32_39,VAR32_24,VAR32_25,VAR32_27)

Cheguei às colunas acima com base no número de ocorrências dessas colunas em todas as 6 estatísticas de índice ausentes.

Como você pode ver na definição da tabela, este é um heap e não possui índice clusterizado nesta tabela.

Agradeço sua orientação ou qualquer ajuda sobre isso.

Version: Microsoft SQL Server 2014 (SP3) (KB4022619) - 12.0.6024.0 (X64) Sep 7 2018 01:37:51 Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 (Build 9600: ) (Hypervisor)
sql-server index
  • 3 respostas
  • 455 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-03-25 03:59:32 +0800 CST

Configurações MAXDOP para SQL Server 2014

  • 8

Eu sei que essa pergunta já foi feita várias vezes e também tem respostas para ela, mas ainda preciso de um pouco mais de orientação sobre esse assunto.

Abaixo estão os detalhes da minha CPU do SSMS:

CPU

Abaixo está a guia CPU do gerenciador de tarefas do DB Server:

Guia CPU

Eu mantive a configuração de MAXDOPem 2 seguindo a fórmula abaixo:

declare @hyperthreadingRatio bit
declare @logicalCPUs int
declare @HTEnabled int
declare @physicalCPU int
declare @SOCKET int
declare @logicalCPUPerNuma int
declare @NoOfNUMA int
declare @MaxDOP int

select @logicalCPUs = cpu_count -- [Logical CPU Count]
    ,@hyperthreadingRatio = hyperthread_ratio --  [Hyperthread Ratio]
    ,@physicalCPU = cpu_count / hyperthread_ratio -- [Physical CPU Count]
    ,@HTEnabled = case 
        when cpu_count > hyperthread_ratio
            then 1
        else 0
        end -- HTEnabled
from sys.dm_os_sys_info
option (recompile);

select @logicalCPUPerNuma = COUNT(parent_node_id) -- [NumberOfLogicalProcessorsPerNuma]
from sys.dm_os_schedulers
where [status] = 'VISIBLE ONLINE'
    and parent_node_id < 64
group by parent_node_id
option (recompile);

select @NoOfNUMA = count(distinct parent_node_id)
from sys.dm_os_schedulers -- find NO OF NUMA Nodes 
where [status] = 'VISIBLE ONLINE'
    and parent_node_id < 64

IF @NoofNUMA > 1 AND @HTEnabled = 0
    SET @MaxDOP= @logicalCPUPerNuma 
ELSE IF  @NoofNUMA > 1 AND @HTEnabled = 1
    SET @MaxDOP=round( @NoofNUMA  / @physicalCPU *1.0,0)
ELSE IF @HTEnabled = 0
    SET @MaxDOP=@logicalCPUs
ELSE IF @HTEnabled = 1
    SET @MaxDOP=@physicalCPU

IF @MaxDOP > 10
    SET @MaxDOP=10
IF @MaxDOP = 0
    SET @MaxDOP=1

PRINT 'logicalCPUs : '         + CONVERT(VARCHAR, @logicalCPUs)
PRINT 'hyperthreadingRatio : ' + CONVERT(VARCHAR, @hyperthreadingRatio) 
PRINT 'physicalCPU : '         + CONVERT(VARCHAR, @physicalCPU) 
PRINT 'HTEnabled : '           + CONVERT(VARCHAR, @HTEnabled)
PRINT 'logicalCPUPerNuma : '   + CONVERT(VARCHAR, @logicalCPUPerNuma) 
PRINT 'NoOfNUMA : '            + CONVERT(VARCHAR, @NoOfNUMA)
PRINT '---------------------------'
Print 'MAXDOP setting should be : ' + CONVERT(VARCHAR, @MaxDOP)

Ainda estou vendo altos tempos de espera relacionados ao CXPACKET. Estou usando a consulta abaixo para obter isso:

WITH [Waits] AS
(SELECT
[wait_type],
[wait_time_ms] / 1000.0 AS [WaitS],
([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS],
[signal_wait_time_ms] / 1000.0 AS [SignalS],
[waiting_tasks_count] AS [WaitCount],
100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() AS [Percentage],
ROW_NUMBER() OVER(ORDER BY [wait_time_ms] DESC) AS [RowNum]
FROM sys.dm_os_wait_stats
WHERE [wait_type] NOT IN (
N'BROKER_EVENTHANDLER', N'BROKER_RECEIVE_WAITFOR',
N'BROKER_TASK_STOP', N'BROKER_TO_FLUSH',
N'BROKER_TRANSMITTER', N'CHECKPOINT_QUEUE',
N'CHKPT', N'CLR_AUTO_EVENT',
N'CLR_MANUAL_EVENT', N'CLR_SEMAPHORE',
N'DBMIRROR_DBM_EVENT', N'DBMIRROR_EVENTS_QUEUE',
N'DBMIRROR_WORKER_QUEUE', N'DBMIRRORING_CMD',
N'DIRTY_PAGE_POLL', N'DISPATCHER_QUEUE_SEMAPHORE',
N'EXECSYNC', N'FSAGENT',
N'FT_IFTS_SCHEDULER_IDLE_WAIT', N'FT_IFTSHC_MUTEX',
N'HADR_CLUSAPI_CALL', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
N'HADR_LOGCAPTURE_WAIT', N'HADR_NOTIFICATION_DEQUEUE',
N'HADR_TIMER_TASK', N'HADR_WORK_QUEUE',
N'KSOURCE_WAKEUP', N'LAZYWRITER_SLEEP',
N'LOGMGR_QUEUE', N'ONDEMAND_TASK_QUEUE',
N'PWAIT_ALL_COMPONENTS_INITIALIZED',
N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP',
N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP',
N'REQUEST_FOR_DEADLOCK_SEARCH', N'RESOURCE_QUEUE',
N'SERVER_IDLE_CHECK', N'SLEEP_BPOOL_FLUSH',
N'SLEEP_DBSTARTUP', N'SLEEP_DCOMSTARTUP',
N'SLEEP_MASTERDBREADY', N'SLEEP_MASTERMDREADY',
N'SLEEP_MASTERUPGRADED', N'SLEEP_MSDBSTARTUP',
N'SLEEP_SYSTEMTASK', N'SLEEP_TASK',
N'SLEEP_TEMPDBSTARTUP', N'SNI_HTTP_ACCEPT',
N'SP_SERVER_DIAGNOSTICS_SLEEP', N'SQLTRACE_BUFFER_FLUSH',
N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
N'SQLTRACE_WAIT_ENTRIES', N'WAIT_FOR_RESULTS',
N'WAITFOR', N'WAITFOR_TASKSHUTDOWN',
N'WAIT_XTP_HOST_WAIT', N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG',
N'WAIT_XTP_CKPT_CLOSE', N'XE_DISPATCHER_JOIN',
N'XE_DISPATCHER_WAIT', N'XE_TIMER_EVENT')
AND [waiting_tasks_count] > 0
)
SELECT
MAX ([W1].[wait_type]) AS [WaitType],
CAST (MAX ([W1].[WaitS]) AS DECIMAL (16,2)) AS [Wait_S],
CAST (MAX ([W1].[ResourceS]) AS DECIMAL (16,2)) AS [Resource_S],
CAST (MAX ([W1].[SignalS]) AS DECIMAL (16,2)) AS [Signal_S],
MAX ([W1].[WaitCount]) AS [WaitCount],
CAST (MAX ([W1].[Percentage]) AS DECIMAL (5,2)) AS [Percentage],
CAST ((MAX ([W1].[WaitS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgWait_S],
CAST ((MAX ([W1].[ResourceS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgRes_S],
CAST ((MAX ([W1].[SignalS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgSig_S]
FROM [Waits] AS [W1]
INNER JOIN [Waits] AS [W2]
ON [W2].[RowNum] <= [W1].[RowNum]
GROUP BY [W1].[RowNum]
HAVING SUM ([W2].[Percentage]) - MAX ([W1].[Percentage]) < 95; -- percentage threshold
GO

Atualmente CXPACKETespera é de 63% para o meu servidor:

Estatísticas de espera

Referi-me a vários artigos sobre a recomendação de especialistas e também analisei MAXDOPsugestões da Microsoft ; no entanto, não tenho certeza de qual deve ser o valor ideal para este.

Eu encontrei uma pergunta sobre o mesmo tópico aqui, no entanto, se eu for com essa sugestão de Kin, MAXDOPdeve ser 4. Na mesma pergunta, se formos com Max Vernon, deve ser 3.

Por favor, forneça sua valiosa sugestão.

Versão: Microsoft SQL Server 2014 (SP3) (KB4022619) - 12.0.6024.0 (X64) 7 de setembro de 2018 01:37:51 Enterprise Edition: Licenciamento baseado em núcleo (64 bits) no Windows NT 6.3 (Build 9600: ) (Hypervisor )

O Limite de Custo para Paralelismo é definido em 70. O CTfP foi definido em 70 após testar o mesmo para valores que variam de padrão a 25 e 50, respectivamente. Quando era padrão(5) e MAXDOPera 0, o tempo de espera era próximo de 70% para CXPACKET.

Executei sp_blitzfirstpor 60 segundos no modo especialista e abaixo está a saída para descobertas e estatísticas de espera:

sp_blitzfirst

sql-server sql-server-2014
  • 4 respostas
  • 2598 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-03-22 01:11:23 +0800 CST

Melhoria de desempenho deu errado na produção, funcionou bem no teste

  • 4

Temos um aplicativo suportado pelo fornecedor e havia um pedaço de código que estava fazendo leituras lógicas muito pesadas e consumindo tempo dentro de um procedimento, por isso propus a eles ajustar um pouco a consulta para ter muito menos IO e tempo, funcionou bem em teste em termos de dados e desempenho, porém está falhando na produção e retornando dados diferentes, tivemos que reverter as alterações. Precisa do seu conselho especializado sobre isso.

Isso foi testado para dados no ambiente de teste por mais de 3 meses e nunca tivemos nenhum problema de dados. Começou a falhar com moderação na Produção imediatamente após a implantação e estava produzindo dados inconsistentes.

Consulta existente:

SELECT @Ref= CAST(MAX(ISNULL(CAST(ref_clnt AS INT),0))+1 AS VARCHAR(10)) 
FROM table_name WITH(NOLOCK) 
WHERE s_mode='value'

Consulta proposta:

SELECT @Ref = ref_clnt+1 FROM table_name WITH(NOLOCK) 
WHERE RefNo = (SELECT MAX(RefNo) FROM table_name WHERE s_mode = 'value')

O DDL da tabela é o seguinte:

CREATE TABLE [dbo].[table_name](
    [RefNo] [dbo].[udt_RefNo] NOT NULL,
    [S_Mode] [varchar](10) NOT NULL,
    [ref_clnt] [varchar](50) NULL)
CONSTRAINT [PK_table_name] PRIMARY KEY CLUSTERED 
(
    [RefNo] ASC
)

Fornecendo apenas as colunas da definição que são usadas na consulta.

Udt_RefNoé um tipo de dados definido pelo usuário como:

CREATE TYPE [dbo].[udt_RefNo] FROM [char](16) NOT NULL
GO

Versão do SQL Server: Microsoft SQL Server 2014 (SP3) Copyright (c) Microsoft Corporation Enterprise Edition (64 bits) .

Colunas de cobertura de índice não clusterizado, conforme mostrado abaixo:

CREATE NONCLUSTERED INDEX [ncidx_table_name_1] ON [dbo].[table_name]
(
    [S_Mode] ASC,
    [S_Status] ASC
)
INCLUDE (   [ref_clnt])

Encontre os planos de consulta conforme solicitado:

  • Consulta anterior

  • Consulta proposta

Plano de execução Comparação do número de leituras após habilitar o IO e o tempo de estatísticas:

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

(1 row affected)
Table 'table_name'. Scan count 1, logical reads 2732, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row affected)

 SQL Server Execution Times:
   CPU time = 157 ms,  elapsed time = 161 ms.

(1 row affected)
Table 'table_name'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row affected)

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

O fornecedor voltou com sugestão como

SELECT MAX(ISNULL(ref_clnt,0))+1 FROM table_name WITH(NOLOCK) WHERE S_Mode='value'

O problema é - como testá-los, pois todos eles parecem funcionar para a maior parte do cenário, mas falham apenas em alguns casos. Não estou muito ciente do aplicativo e de seu fornecedor com suporte, portanto, não consigo obter muitos detalhes, como como a lógica de negócios funciona para o procedimento subjacente.

sql-server sql-server-2014
  • 2 respostas
  • 199 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-03-18 01:17:31 +0800 CST

Nível de Fragmentação para Heaps

  • 4

Atualmente estou usando scripts fornecidos pelo Sr. Ola Hallengren para executar o trabalho de manutenção e ultimamente tenho notado que há muitas tabelas (heaps) o nível de fragmentação é alarmantemente alto e precisa ser analisado e tomado medidas. Eu verifiquei o FAQ no site e parece que seu script não suporta a reconstrução de heaps. Usei a consulta abaixo para encontrar o nível de fragmentação:

SELECT dbschemas.[name] as 'Schema', 
dbtables.[name] as 'Table', 
dbindexes.[name] as 'Index',
indexstats.alloc_unit_type_desc,
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
WHERE indexstats.database_id = DB_ID() and dbindexes.name is null
ORDER BY page_count desc, indexstats.avg_fragmentation_in_percent desc

Meu aplicativo é suportado pelo fornecedor e tenho me comunicado com eles para alterar esses heaps para tabelas e criar um índice clusterizado, mas ainda não produziu nenhum resultado significativo, pois eles definiram a chave primária como um índice não clusterizado exclusivo e também faz parte de chave estrangeira, então precisa mudar em muitos níveis antes de fazer qualquer alteração. Em primeiro lugar, levei muitos dias para explicar a diferença entre índice clusterizado e chave primária com índice exclusivo.

Também passei pelos ajustes sugeridos pelo Sr. Brent Ozar para alterar os padrões no script fornecido pelo Sr. Ola Hallengren para otimizar o índice a fim de torná-lo mais eficiente, mas não encontrei nenhum detalhe da reconstrução do heap.

De acordo com meu entendimento, a fragmentação do heap pode ser tratada de duas maneiras, conforme descrito aqui :

  1. Para criar um índice clusterizado na tabela e eliminá-lo - Isso limparia toda a fragmentação e também reconstruiria todo o índice não clusterizado, mas consumiria tempo e E/S.
  2. Reconstruindo o heap - Isso também limparia a fragmentação e reconstruiria toda a parte do índice não clusterizado da reconstrução da tabela.

Não posso optar pela opção 1 porque não estou ciente das colunas em que o índice clusterizado pode ser criado e também isso pode levar mais tempo do que a opção 2.

Estou procurando a possibilidade de implementar a opção 1 nos scripts de Ola Hallengren ou um método alternativo para lidar com isso. Além disso, gostaria de reconstruir meus heaps apenas quando o tamanho do heap for superior a 10.000 páginas e o nível de fragmentação for superior a 80.

Estou usando o Microsoft SQL Server 2014 SP3 Enterprise Edition.

Como um DBA - eu não prefiro ter heaps no meu banco de dados, no entanto, como é um aplicativo suportado pelo fornecedor e já que eles já definiram a chave primária como índice exclusivo e essas chaves são chaves estrangeiras, é muito difícil alterá-las para cluster devido a referências, bem como a probabilidade de tempo de inatividade.

EDIT: Passei pelo link fornecido pelo Sr. Erik Darling e posso confirmar que tenho vários heaps com registros encaminhados ou exclusões nos bancos de dados. Agora, estou de volta ao ponto de onde eu tinha começado, ou seja, com essas duas opções. Como mencionei anteriormente, criar um índice clusterizado é muito difícil no meu cenário e exigirá pelo menos meses (ser otimista) com probabilidade de tempo de inatividade considerando a estrutura de chave estrangeira complexa. Precisa de conselhos sobre a reconstrução dos montes e possível efeito colateral.

sql-server sql-server-2014
  • 1 respostas
  • 1054 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-03-15 03:38:02 +0800 CST

Restauração gradual, grupo de arquivos e extensão de arquivo

  • 1

De acordo com meu entendimento (até agora), qualquer banco de dados de usuário contém três tipos de arquivos - mdf, ndf e ldf.

MDF significa arquivo de metadados e armazena definição de dados, bem como dados (no caso de banco de dados pequeno e nenhum outro arquivo existe para dados).

NDF é basicamente para dados de tabelas e armazena dados, podemos ditar qual tabela pode ser alocada aqui com base em grupos de arquivos.

LDF significa arquivo de dados de log. Isso armazena VLFs (arquivos de log virtuais)

Fiquei com a impressão de que pode haver apenas um arquivo .mdf pertencente ao grupo de arquivos primário e n número de arquivos .ndf pertencentes ao grupo de arquivos primário ou definido pelo usuário.

Eu estava criando um banco de dados e criei vários grupos de arquivos e extensão esquerda .mdf (por engano) para todos eles e para minha surpresa, agora meu banco de dados possui três arquivos .mdf pertencentes a diferentes grupos de arquivos, conforme mostrado abaixo:

CREATE DATABASE [TEST_DBASE]
ON  PRIMARY 
( NAME = N'TEST_DBASE', FILENAME = N'E:\DB\TEST_DBASE.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB ), 
 FILEGROUP [ACCNTS_FILEGROUP] 
( NAME = N'ACCNTS_FILE', FILENAME = N'E:\DB\ACCNTS_FILE.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB ), 
 FILEGROUP [LOAN_FILEGROUP] 
( NAME = N'LOAN_FILE', FILENAME = N'E:\DB\LOAN_FILE.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB )

Nesse caso, como faremos a restauração gradual se precisarmos colocar apenas a tabela Contas online?

Anteriormente estávamos seguindo os passos abaixo:

RESTORE DATABASE [TEST_DBASE] 
FILEGROUP = 'PRIMARY' FROM DISK = 'E:\BACKUPS\FullBackup.BAK' with NORECOVERY, PARTIAL

RESTORE DATABASE [TEST_DBASE] 
FILEGROUP = 'ACCNTS_FILEGROUP' FROM DISK = 'E:\BACKUPS\FullBackup.BAK' with NORECOVERY

RESTORE LOG [TEST_DBASE] FROM DISK = 'E:\BACKUPS\LogBackup.trn' with RECOVERY

As etapas acima foram tornar a tabela Contas online e acessível.

Para colocar as tabelas de Empréstimos online posteriormente (tabela não crítica), costumávamos realizar as etapas abaixo:

BACKUP LOG [BANK_DATABASE] TO DISK = 'E:\BACKUPS\Backup_tail.trn' with FORMAT, NORECOVERY

RESTORE DATABASE [TEST_DBASE] 
FILEGROUP = 'LOAN_FILEGROUP' FROM DISK = 'E:\BACKUPS\FullBackup.BAK' with NORECOVERY

RESTORE LOG      [TEST_DBASE] FROM DISK = 'E:\BACKUPS\LogBackup.trn' with NORECOVERY
RESTORE LOG      [TEST_DBASE] FROM DISK = 'E:\BACKUPS\Backup_tail.trn' with RECOVERY

Minha preocupação no cenário acima é - haverá alguma alteração para a restauração gradual, considerando o fato de que o arquivo de metadados agora está espalhado em todos os grupos de arquivos e não pertence apenas ao grupo de arquivos primário.

Para qualquer restauração parcial, a restauração do grupo de arquivos primário era obrigatória, pois contém todos os metadados, mas se todos os arquivos agora forem .mdf, como isso funcionará?

sql-server restore
  • 1 respostas
  • 67 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-03-12 10:24:12 +0800 CST

Backup de banco de dados para dados e arquivos de log

  • 3

Foi-me dito que, para arquivos de dados, o backup opera no nível de extensão e, para o arquivo de log, o backup opera no nível da página.

Eu sei que o tipo de arquivo para arquivo de dados é sempre "Rows Data" e é armazenado na forma de extensão (extensão mista ou uniforme), enquanto os logs são armazenados na forma de Log, ou seja, VLF (Virtual Log Files).

Por favor, alguém pode lançar alguma luz sobre esse conceito em um nível um pouco detalhado, pois estou um pouco confuso sobre como o backup distingue entre dados e log. Se for um backup completo, ele armazenará todas as alterações confirmadas gravadas no arquivo de dados, para diferencial - todas as alterações desde o último backup completo do arquivo de dados. E para backup de log - todas as alterações que são confirmadas, mas não gravadas no arquivo de dados.

Aprecie sua valiosa contribuição sobre isso.

sql-server backup
  • 2 respostas
  • 548 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-03-12 04:16:39 +0800 CST

Backup dividido do MSSQL VS Stripe Backup do Sybase ASE

  • 0

Recentemente, conheci o conceito de backup dividido no MSSQL Server, enquanto trabalhava no backup de faixa no Sybase ASE.

O backup de faixa no Sybase ASE é mais rápido que o backup normal e, se usarmos três faixas, o Sybase usará 3 núcleos de CPU (depende do número de núcleos), pois será dividido em muitos threads, executados em paralelo, independentemente do local de armazenamento.

Eu queria entender se o mesmo é o caso do backup dividido do MSSQL, li que, se usarmos locais diferentes para o backup dividido, o backup será executado em paralelo e será mais rápido:

Backup dividido

no entanto, se o local de armazenamento for o mesmo (na mesma unidade e pasta), nenhuma E/S extra envolvida e, portanto, não terá muito impacto no desempenho.

sql-server backup
  • 1 respostas
  • 130 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-02-26 00:58:36 +0800 CST

Localizar origem e detalhes da inserção da tabela de heap de APL

  • 0

Eu tenho executado o monitor do sistema (sysmon) no Sybase ASE 15.7 (SP139) no HP-UX (Itanium) com o comando abaixo:

sp_sysmon "00:10:00"
go

Observou que o número de inserções é muito alto a qualquer hora do dia, incapaz de encontrar a fonte e os detalhes, por exemplo, nome da tabela, nome do banco de dados, nome do programa etc. sem carga:

Transaction Profile
-------------------

  Transaction Summary             per sec      per xact       count  % of total
  -------------------------  ------------  ------------  ----------  ---------- 
    Committed Xacts                  10.7           n/a        6390     n/a     

  Transaction Detail              per sec      per xact       count  % of total
  -------------------------  ------------  ------------  ----------  ---------- 
  Inserts
    Fully Logged
      APL Heap Table              58665.7        5508.5    35199448     100.0 %
      APL Clustered Table             0.0           0.0           7       0.0 %
      Data Only Lock Table           13.2           1.2        7918       0.0 %
      Fast Bulk Insert                0.0           0.0           0       0.0 %
      Fast Log Bulk Insert            0.0           0.0           0       0.0 %
    Minimally Logged
      APL Heap Table                  0.0           0.0           0       0.0 %
      APL Clustered Table             0.0           0.0           0       0.0 %
      Data Only Lock Table            0.0           0.0           0       0.0 %
  -------------------------  ------------  ------------  ----------  ---------- 
  Total Rows Inserted             58679.0        5509.8    35207373     100.0 %

Parece que as inserções estão acontecendo no tempdb, no entanto, essas muitas inserções são um pouco incomodas, agradeço ter conselhos de especialistas sobre isso.

sybase monitoring
  • 1 respostas
  • 43 Views
Martin Hope
Learning_DBAdmin
Asked: 2019-02-19 22:36:01 +0800 CST

Trabalho de manutenção de banco de dados e agendamento de backup

  • 0

Gostaria de solicitar aconselhamento especializado sobre agendamento de manutenção e trabalhos de backup. Abaixo estava o cenário antes da minha alteração:

  1. Backup completo do banco de dados programado para ser executado às 12h30 todos os dias.
  2. Backup Diferencial programado para ser executado a cada 2 horas no horário comercial (8h às 18h) e a cada 6 horas fora do horário comercial.
  3. O backup de log está programado para ser executado a cada 15 minutos, conforme o envio de log é configurado.
  4. Trabalho de otimização de índice (usando script do Grande Sr. Ola Hallengren) executado todos os domingos de manhã às 1h45.

Costumávamos enfrentar problemas de espaço no disco de armazenamento no cenário acima, pois o backup completo era executado antes do trabalho de manutenção e, portanto, o backup diferencial subsequente estava ficando cada vez maior até que o próximo backup completo fosse executado. Isso me levou a executar o backup completo após o trabalho de manutenção e também verifiquei o nível de fragmentação no meio da semana e com base nos valores decidi executar o trabalho de manutenção duas vezes por semana, abaixo está o plano modificado:

  1. Backup completo do banco de dados programado para ser executado às 12h30 em todos os dias, exceto no domingo e na terça-feira, quando o trabalho de manutenção está programado. No domingo e na terça-feira, o backup completo é feito às 2h30.
  2. Backup Diferencial programado para ser executado a cada 2 horas no horário comercial (8h às 18h) e a cada 6 horas fora do horário comercial - Sem alteração.
  3. O backup de log está programado para ser executado a cada 15 minutos, pois o envio de log está configurado - Nenhuma alteração
  4. Trabalho de otimização de índice (usando script do Grande Sr. Ola Hallengren) sendo executado todos os domingos e terças de manhã às 1h45.

O problema que estou enfrentando agora é o tamanho do backup de log imediatamente após o trabalho de manutenção, o backup de log é muito maior que o backup completo do próprio banco de dados. Escusado será dizer que os backups de log são transferidos para o site secundário, que é então carregado lá para fins de sincronização. Isso levou mais tempo do que o esperado e entre o alerta de envio de logs é acionado, pois o primário e o secundário não estão sincronizados. Anteriormente também, o backup de log era maior, mas costumava ser muito menor que o backup completo e estava demorando consideravelmente menos tempo na transferência do servidor primário para o secundário.

Não tenho certeza se este é um cenário válido em que as alterações (inserir/atualizar/excluir) foram tão volumosas nos últimos 3 dias que o trabalho de manutenção criou um arquivo de log maior que o backup completo e se estabilizaria gradualmente ou eu deveria agendar dois backup completo no domingo e na terça-feira (quando o trabalho de manutenção está em execução) - Um às 12h30 e outro após o trabalho de manutenção.

Aprecie seu conselho gentil.

sql-server backup
  • 2 respostas
  • 508 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