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

Daniel Björk's questions

Martin Hope
Daniel Björk
Asked: 2017-08-18 05:35:22 +0800 CST

Quando e quem reduziu o arquivo ldf?

  • 5

Estou tentando encontrar informações sobre quando e quem reduziu um arquivo ldf, mas não consigo encontrar as informações em nenhum lugar.

Alguém pode me apontar na direção certa?

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4266.0 (X64) 
    Sep 26 2012 17:08:07 
    Copyright (c) Microsoft Corporation
    Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
sql-server sql-server-2008-r2
  • 1 respostas
  • 87 Views
Martin Hope
Daniel Björk
Asked: 2016-11-24 04:54:36 +0800 CST

Lento sem recompilar

  • 2

Minha consulta tem um desempenho ruim quando a executo sem arquivos OPTION (RECOMPILE). Sem recompilar, leva de 3 a 4 minutos para ser executado e, com recompilação, leva cerca de 15 a 20 segundos.

Não consigo alterar a consulta, atualizei todas as estatísticas e reconstruí todos os índices. Há apenas 1 sugestão de índice com uma melhoria de 9,4%.

Eu tentei:

-- clear all plans in cache
DBCC FREEPROCCACHE

-- Clear Buffer pool
CHECKPOINT
GO
DBCC DROPCLEANBUFFERS
GO

O que mais posso fazer? Não consigo editar a consulta, portanto OPTION (RECOMPILE)não é uma solução válida para mim. A consulta pode variar um pouco de tempos em tempos, então o "guia de plano" não funcionará?

Observe que esta não é a consulta real. A consulta real é executada pelo Dynamics AX, então está usando um arquivo api_cursor. Eu tirei isso do sp_cursorpreparee preenchi os parâmetros manualmente.

DECLARE @p1 AS BIGINT = 5637144576
DECLARE @p2 AS NVARCHAR(32) = N'1003'
DECLARE @p3 AS NVARCHAR(32) = N'posp%'
DECLARE @p4 AS BIGINT = 5637144576
DECLARE @p5 AS NVARCHAR(32) = N'sv'
DECLARE @p6 AS NVARCHAR(32) = N'posp'
DECLARE @p7 AS BIGINT = 5637144576
DECLARE @p8 AS NVARCHAR(32) = N'1003'
DECLARE @p9 AS NVARCHAR(32) = N'posp'
DECLARE @p10 AS BIGINT = 5637144576
DECLARE @p11 AS NVARCHAR(32) = N'posp'
DECLARE @p12 AS BIGINT = 5637144576
DECLARE @p13 AS NVARCHAR(32) = N'1003'
DECLARE @p14 AS BIGINT = 5637144576
DECLARE @p15 AS NVARCHAR(32) = N''
DECLARE @p16 AS NVARCHAR(32) = N'sv'
DECLARE @p17 AS INT = 0
DECLARE @p18 AS INT = 0
DECLARE @p19 AS INT = 0
DECLARE @p20 AS INT = 0
DECLARE @p21 AS BIGINT = 5637144576
DECLARE @p22 AS NVARCHAR(32) = N'1003'
DECLARE @p23 AS INT = 2
DECLARE @p24 AS BIGINT = 5637144576
DECLARE @p25 AS NVARCHAR(32) = N'1003'
DECLARE @p26 AS BIGINT = 5637144576
DECLARE @p27 AS INT = 1
DECLARE @p28 AS INT = 101


select @p1, @p2, @p5, @p6, @p7

SELECT * 
FROM   ( 
                       SELECT          Row_number() OVER(ORDER BY t2.NAME,t2.itemid) AS rownumber,
                                       t2.itemid                                     AS f1, 
                                       t2.product                                    AS f2, 
                                       t2.NAME                                       AS f3, 
                                       t2.recid                                      AS f4, 
                                       t3.unitid                                     AS f5, 
                                       t3.recid                                      AS f6, 
                                       t4.recid                                      AS f7, 
                                       t5.recid                                      AS f8, 
                                       t6.recid                                      AS f9, 
                                       t7.recid                                      AS f10, 
                                       t7.instancerelationtype                       AS f11 
                       FROM            retailitemname T2 
                       CROSS JOIN      inventtablemodule T3 
                       LEFT OUTER JOIN inventtable T4 
                       ON              ((( 
                                                                                       t4.partition=@P1)
                                                       AND             ( 
                                                                                       t4.dataareaid=@P2))
                                       AND             (( 
                                                                                       t4.itemid LIKE @P3 ESCAPE '\' )
                                                       AND             ( 
                                                                                       t2.itemid=t4.itemid)))
                       LEFT OUTER JOIN ecoresproducttranslation t5 
                       ON              (( 
                                                                       t5.partition=@P4) 
                                       AND             ((( 
                                                                                                       t5.languageid=@P5)
                                                                       AND             ( 
                                                                                                       FREETEXT(t5.NAME,@P6)))
                                                       AND             ( 
                                                                                       t2.product=t5.product)))
                       LEFT OUTER JOIN inventtable t6 
                       ON              ((( 
                                                                                       t6.partition=@P7)
                                                       AND             ( 
                                                                                       t6.dataareaid=@P8))
                                       AND             (( 
                                                                                       FREETEXT(t6.namealias,@P9))
                                                       AND             ( 
                                                                                       t2.itemid=t6.itemid)))
                       LEFT OUTER JOIN ecoresproduct t7 
                       ON              (( 
                                                                       t7.partition=@P10) 
                                       AND             (( 
                                                                                       FREETEXT(t7.searchname,@P11))
                                                       AND             ( 
                                                                                       t2.product=t7.recid)))
                       WHERE           (((( 
                                                                                                       t2.partition=@P12)
                                                                       AND             ( 
                                                                                                       t2.dataareaid=@P13))
                                                       AND             (( 
                                                                                                       t2.partition#2=@P14)
                                                                       OR              ( 
                                                                                                       t2.partition#2 IS NULL)))
                                       AND             ((( 
                                                                                                       t2.languageid=@P15)
                                                                       OR              ( 
                                                                                                       t2.languageid=@P16))
                                                       AND             (((( 
                                                                                                                                       t4.recid<>@P17)
                                                                                                       OR              (
                                                                                                                                       t5.recid<>@P18))
                                                                                       OR              (
                                                                                                                       t6.recid<>@P19))
                                                                       OR              ( 
                                                                                                       t7.recid<>@P20))))
                       AND             ((( 
                                                                                       t3.partition=@P21)
                                                       AND             ( 
                                                                                       t3.dataareaid=@P22))
                                       AND             (( 
                                                                                       t3.moduletype=@P23)
                                                       AND             ( 
                                                                                       t2.itemid=t3.itemid)))
                       AND             EXISTS 
                                       ( 
                                              SELECT 'x' 
                                              FROM   retailitemcategory t8 
                                              WHERE  (((( 
                                                                                 t8.partition=@P24)
                                                                   AND    ( 
                                                                                 t8.dataareaid=@P25))
                                                            AND    ( 
                                                                          t8.partition#2=@P26))
                                                     AND    ( 
                                                                   t2.itemid=t8.itemid))) )t1
WHERE  (( 
                     t1.rownumber>=@P27) 
       AND    ( 
                     t1.rownumber<@P28))
                     OPTION (RECOMPILE)

Planos

  • Plano de Execução Lenta (3-4min)
  • Plano de Execução Rápida (15-20 segundos)
  • MAXDOP 0(1 minuto)

Novamente: observe que esses são os planos da consulta que criei, não necessariamente os usados ​​quando o aplicativo está realmente usando um cursor.

Versão SQL:

Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
20 de fevereiro de 2014 20:04:26
Direitos autorais (c) Microsoft Corporation
Developer Edition (64 bits) no Windows NT 6.1 (Build 7601: Service Pack 1) (hipervisor)

MAXDOPestá definido como 1 porque é um banco de dados AX 2012 (R3 CU10). Não queremos que grandes relatórios ou trabalhos bloqueiem todos os processadores. Não sabia que você poderia ver mais sugestões de índice no plano. Mas o lento tem apenas uma sugestão e o rápido tem 2. MAXDOP 0é mais rápido, mas ainda não tão rápido quanto recompilar.

A consulta do AX é executada quando você, através do serviço em tempo real, procura um produto no AX que não existe no banco de dados do canal. Esta pesquisa está incluída no varejo AX 2012 R3. Sem personalização.

A intenção é otimizar o processo no SQL Server. A consulta faz exatamente o que deveria fazer, mas é muito lenta sem a recompilação. Ele está usando o plano de consulta errado. Se usar o plano de consulta correto, é rápido. Portanto, não deve haver necessidade de fazer alterações no AX.

optimize for ad hoc workloadsestá ativado.

sql-server performance
  • 1 respostas
  • 828 Views
Martin Hope
Daniel Björk
Asked: 2016-04-28 10:36:15 +0800 CST

A consulta não compila/executa

  • 6

Tenho uma consulta que não será executada no servidor de produção, mas será executada no servidor de teste. Parece que o plano de consulta não compila ou está compilando um plano de consulta muito ruim. Atualizei todas as estatísticas com fullscan e reconstruí os índices de todas as tabelas envolvidas sem sucesso, não são tantas linhas em nenhuma das tabelas. Não estou conseguindo alterar a consulta porque é o AOS (AX 2012) que está criando. O que devo fazer para poder usar a consulta como está?

Consulta

DECLARE @P1 AS BIGINT = 5637144576
DECLARE @P2 AS NVARCHAR(4) = N'1003'
DECLARE @P3 AS INT = 212
DECLARE @P4 AS BIGINT = 5638885273
DECLARE @P5 AS BIGINT = 5637144576
DECLARE @P6 AS INT = 865
DECLARE @P7 AS BIGINT = 5637144576
DECLARE @P8 AS BIGINT = 5637144576

SELECT     t1.balance01, 
           t1.recid, 
           t2.amountcur, 
           t2.dataareaid, 
           t2.recid, 
           t3.recid, 
           t3.voucher, 
           t3.accountnum, 
           t3.approved, 
           t3.closed, 
           t3.dataareaid, 
           t4.party, 
           t4.dataareaid, 
           t4.recid 
FROM       spectrans T1 
CROSS JOIN custtransopen T2 
CROSS JOIN custtrans T3 
CROSS JOIN 
           ( 
                      SELECT     virt.id AS dataareaid , 
                                 t4.accountnum, 
                                 t4.party, 
                                 t4.partition, 
                                 t4.recid 
                      FROM       custtable T4 
                      INNER JOIN virtualdataarealist VIRT 
                      ON         t4.dataareaid = virt.virtualdataarea 
                      UNION ALL 
                      SELECT     t4.dataareaid , 
                                 t4.accountnum, 
                                 t4.party, 
                                 t4.partition, 
                                 t4.recid 
                      FROM       custtable T4 
                      INNER JOIN dataarea DAT 
                      ON         ( 
                                            t4.dataareaid = dat.id 
                                 AND        dat.isvirtual = 0)) T4 
WHERE      (( 
                                 t1.partition=@P1) 
           AND        ((( 
                                                       t1.speccompany=@P2) 
                                 AND        ( 
                                                       t1.spectableid=@P3)) 
                      AND        ( 
                                            t1.specrecid=@P4))) 
AND        (( 
                                 t2.partition=@P5) 
           AND        ((( 
                                                       t1.refcompany=t2.dataareaid) 
                                 AND        ( 
                                                       t1.reftableid=@P6)) 
                      AND        ( 
                                            t1.refrecid=t2.recid))) 
AND        (( 
                                 t3.partition=@P7) 
           AND        ( 
                                 t2.refrecid=t3.recid 
                      AND        ( 
                                            t2.dataareaid = t3.dataareaid) 
                      AND        ( 
                                            t2.partition = t3.partition))) 
AND        (( 
                                 t4.partition=@P8) 
           AND        ( 
                                 t3.accountnum=t4.accountnum 
                      AND        ( 
                                            t3.dataareaid = t4.dataareaid) 
                      AND        ( 
                                            t3.partition = t4.partition)))
  • Se eu usar o plano de execução do servidor de teste, ele será executado em menos de um segundo.
  • Eu tentei OPTION (RECOMPILE)e tambémDBCC FREEPROCCACHE
  • Não há bloqueio

Tabela de diferenças "sys.configurations" entre PROD e TEST:

PROD    TEST    description
    30  0   Blocked process reporting threshold
    1   0   Enable or disable Database Mail XPs
    1   0   Sets the FILESTREAM access level
    1   2   maximum degree of parallelism
    230000  22528   Maximum size of server memory (MB)
    1   0   Dedicated Admin Connections are allowed from remote clients

Detalhes do ambiente

PROD: Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 20 de fevereiro de 2014 20:04:26 Copyright (c) Microsoft Corporation Enterprise Edition: Licenciamento baseado em núcleo (64 bits) no Windows NT 6.3 (Build 9600: )

TraceFlag   Status  Global  Session
1117    1   1   0
1118    1   1   0
1224    1   1   0
2371    1   1   0
2505    1   1   0
3226    1   1   0
4199    1   1   0

TESTE: Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 20 de fevereiro de 2014 20:04:26 Copyright (c) Microsoft Corporation Developer Edition (64 bits) no Windows NT 6.1 (Build 7601: Service Pack 1) (Hypervisor)

TraceFlag   Status  Global  Session
1117    1   1   0
1224    1   1   0
2371    1   1   0
2505    1   1   0
3226    1   1   0
4199    1   1   0

Nível de compatibilidade: 120 em ambos.

Detalhes dos dados

PROD

SELECT COUNT(*) FROM SPECTRANS -- 4601
SELECT COUNT(*) FROM CUSTTRANSOPEN -- 14162
SELECT COUNT(*) FROM CUSTTRANS -- 137127
SELECT COUNT(*) FROM CUSTTABLE -- 35617
SELECT COUNT(*) FROM VIRTUALDATAAREALIST -- 3
SELECT COUNT(*) FROM DATAAREA -- 5

Plano de execução estimado: http://pastebucket.com/326386
Estatísticas - http://pastebucket.com/326459

TESTE

 SELECT COUNT(*) FROM SPECTRANS -- 10753
 SELECT COUNT(*) FROM CUSTTRANSOPEN -- 7150
 SELECT COUNT(*) FROM CUSTTRANS -- 77342
 SELECT COUNT(*) FROM CUSTTABLE -- 36297
 SELECT COUNT(*) FROM VIRTUALDATAAREALIST -- 3
 SELECT COUNT(*) FROM DATAAREA -- 5 

Plano de execução real: http://pastebucket.com/326387
Estatísticas - http://pastebucket.com/326458

sql-server performance
  • 3 respostas
  • 263 Views
Martin Hope
Daniel Björk
Asked: 2015-03-10 05:59:46 +0800 CST

Somente administradores locais podem se conectar remotamente

  • 0

Estou enfrentando um problema quando tento me conectar à instância do SQL Express do cliente para o servidor. O servidor registra um erro:

O handshake SSPI falhou com o código de erro 0x8009030c, estado 14 ao estabelecer uma conexão com segurança integrada; A conexão foi encerrada. Motivo: Falha em AcceptSecurityContext. O código de erro do Windows indica a causa da falha. A tentativa de logon falhou
[CLIENTE: 192.168.245.50]

A conta com a qual faço logon é sysadmin e tem todas as permissões possíveis no banco de dados ao qual está tentando se conectar, mas ainda falha. Mas se eu adicionar o usuário que está tentando se conectar ao grupo de administradores locais, funcionará. Esta não é uma boa solução, não quero que todos os usuários sejam administradores locais no servidor. Por que o usuário precisa ser administrador local?

E acho que o SPN está configurado corretamente.

insira a descrição da imagem aqui

Está tudo no mesmo domínio e usando contas de domínio. A Autenticação do Windows é usada para login.
Não deve haver problema com a conectividade com o DC. O nome das instâncias nomeadas é usado (funciona se o usuário do domínio for administrador local).

Log do log de erros do SQL:

03/09/2015 15:22:47,Logon,Desconhecido,Falha no login. O login é de um domínio não confiável e não pode ser usado com a autenticação do Windows. [CLIENTE: 192.168.245.50] 09/03/2015 15:22:47,Logon,Desconhecido,Erro: 18452 Gravidade: 14 Estado: 1. 09/03/2015 15:22:47,Logon,Desconhecido,Falha no handshake SSPI com código de erro 0x8009030c estado 14 ao estabelecer uma conexão com segurança integrada; A conexão foi encerrada. Razão: Falha em AcceptSecurityContext. O código de erro do Windows indica a causa da falha. A tentativa de logon falhou [CLIENTE: 192.168.245.50] 03/09/2015 15:22:47,Logon,Desconhecido,Erro: 17806 Gravidade: 20 Estado: 14.

Log do cliente tentando se conectar:

LSRetailPosis.POS.Program: System.Data.SqlClient.SqlException (0x80131904): falha no logon. O login é de um domínio não confiável e não pode ser usado com a autenticação do Windows. em System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) em System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 nova tentativa, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) em System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 nova tentativa, DbConnectionOptions userOptions) em System.Data.SqlClient.SqlConnection.TryOpentionSourceInner1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 nova tentativa) em System.Data.SqlClient.SqlConnection.Open() em LSRetailPosis.Settings.Database.CheckDatabaseExistence() em LSRetailPosis.Settings.Database.CheckDatabaseSettings() em LSRetailPosis.Settings.ApplicationSettings.InitializeSettings(String[] args) em LSRetailPosis.POS.Program.InitializeAndLoadPOS(String[] args, propriedade booleana, SplashScreenForm splashScreenForm) em LSRetailPosis.POS.Program.Main(String[] args) ClientConnectionId:d57c7fd9-4a47-41b7-af07-ed93627d2930.

sql-server-express logins
  • 1 respostas
  • 1046 Views
Martin Hope
Daniel Björk
Asked: 2014-09-30 05:06:33 +0800 CST

reconstruir no índice clusterizado, por que o tamanho dos dados diminui?

  • 10

Quando fizemos uma reconstrução em um índice clusterizado em uma tabela que contém cerca de 15 GB de dados e o tamanho dos dados foi reduzido para 5 GB, como isso pode acontecer? Que tipo de "dados" são removidos?

Tamanho dos dados, quero dizer a coluna "dados" do DBCC sp_spaceused

Antes da reconstrução no índice clusterizado:

name                  rows        reserved    data        index_size  unused
LEDGERJOURNALTRANS    43583730    39169656 KB 15857960 KB 22916496 KB 395200 KB

Após a reconstrução no índice clusterizado:

name                  rows        reserved    data        index_size  unused
LEDGERJOURNALTRANS    43583730    29076736 KB 5867048 KB  22880144 KB 329544 KB

TSQL para reconstrução:

USE [DAX5TEST]
GO
ALTER INDEX [I_212RECID] ON [dbo].[LEDGERJOURNALTRANS] REBUILD PARTITION = ALL WITH ( PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, ONLINE = ON, SORT_IN_TEMPDB = OFF, DATA_COMPRESSION = PAGE, FILLFACTOR = 85 )
GO
sql-server clustered-index
  • 3 respostas
  • 4657 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