Diagnóstico do SQL Server adicionado para detectar problemas de e/s não reportados devido a obsoletas leituras ou escritas perdidas

BUGS #: 470086 (SQL Server 8.0)

Sintomas

Se a causa de problemas de sistema operativo, controlador ou hardware perdida escrever condições ou condições de leitura obsoletas, poderá ver mensagens de erro relacionada com a integridade de dados, tais como erros 605, 823, 3448, 3456. Poderá receber mensagens de erro que são semelhantes aos seguintes exemplos:


2003-07-24 16:43:04.57 spid63 Getpage: bstat = 0x9, sstat = 0x800, cache
2003-07-24 16:43:04.57 spid63 pageno (is) devem ser: objid (is) devem ser:
2003-07-24 16:43:04.57 spid63 (1:7040966)/(1:7040966) 2093354622/2039782424

2003-07-24 16:43:04.57 spid63... IAM indica que essa página é atribuída a este objecto

2003-07-24 16:52:37.67 spid63 erro: 605, gravidade: 21, estado: 1
2003-07-24 16:52:37.67 spid63 tentativa de obtenção página lógica (1:7040966) na base de dados 'pubs' pertencem ao objecto 'autores', não a objecto 'títulos'...


2003-07-24 16:52:40.99 spid63 erro: 3448, gravidade: 21, estado: 1
2003-07-24 16:52:40.99 spid63 nao conseguiu anular o registo (63361:16876:181), para o ID de transacção (0:159696956), na página (1:7040977), base de dados 'pubs' (base de dados ID 12). Informações de página: LSN = (63192:958360:10), tipo = 2. Informações de registo: OpCode = 2, contexto 1...


2003-07-09 14:31:35.92 spid66 erro: 823, gravidade: 24, estado: 2
2003-07-09 14:31:35.92 spid66 e/s (ID de página inválida) foi detectado um erro durante a leitura no deslocamento 0x00000016774000 no ficheiro 'h:\sql\MSSQL\data\tempdb.mdf'...

2010-02-06 15:57:24.14 spid17s erro: 3456, gravidade: 21, estado: 1.
2010-02-06 15:57:24.14 spid17s não foi possível refazer registo (58997:5252:28), para o ID de transacção (0:109000187), na página (1:480946), base de dados 'Minhabasededados' (base de dados ID 17). Página: LSN = (58997:5234:17), tipo = 3. REG: OpCode = 2, 5, de contexto PrevPageLSN: (58997:5243:17). Restaurar a partir de uma cópia de segurança da base de dados ou reparar a base de dados.

Mais informações

A Microsoft introduziu capacidades de controlo expandido a partir do SQL Server 2000 Service Pack 4 e estes diagnósticos de tem sido parte do produto no SQL Server 2005 e versões posteriores. Estas funcionalidades foram concebidas para ajudar a detectar e/s relacionadas com problemas externos e resolver problemas relacionados com as mensagens de erro descrita na secção "Sintomas"

Se receber uma das mensagens de erro mencionadas na secção "Sintomas" e não pode ser explicados por um evento tal como uma falha da unidade física, em seguida, reveja quaisquer problemas conhecidos com o SQL Server, o sistema operativo, os controladores e o hardware. Tente o diagnóstico fornecer informações sobre as duas condições seguintes:

  • Perdido escrita: Uma chamada com êxito para a API WriteFile , mas o sistema operativo, um controlador ou o controlador de colocação em cache não correctamente esvaziar os dados para o suporte físico mesmo que o SQL Server seja informado de que a escrita foi efectuada com êxito.

  • Leitura obsoleta: Uma chamada com êxito para a API de ReadFile , mas o sistema operativo, um controlador ou o controlador de colocação em cache devolve incorrectamente uma versão anterior dos dados.

Por exemplo, a Microsoft confirmou cenários em que uma chamada de WriteFile API devolve como com êxito, mas uma leitura imediata, com êxito do mesmo bloco de dados devolve dados mais antigos, incluindo dados que provavelmente estão armazenados num cache de leitura de hardware. Por vezes, este problema ocorre devido a um problema de cache de leitura. Nos outros casos, os dados de escrita realmente nunca são escritos no disco físico.

Para activar diagnósticos adicionais para estes tipos de problemas, o SQL Server adicionou o sinalizador de rastreio 818. Pode especificar o sinalizador de rastreio 818 como um parâmetro de arranque,-T818, o para o computador que esteja a executar o SQL Server, ou pode executar a seguinte instrução:

DBCC TRACEON(818, -1)


Sinalizador de rastreio 818 permite uma memória intermédia em anel de memória que é utilizada para controlar que operações que são executadas pelo computador com o SQL Server, não incluindo a ordenação e o ficheiro de trabalho e/s de escrita de 2.048 ª última com êxito. Quando ocorrem erros, tais como o erro 605, 823 ou 3448, o valor de número (LSN) de sequência a receber da memória intermédia registo é comparado com a lista de escrita recente. Se o LSN que é obtido durante a operação de leitura é mais antiga do que aquele especificado durante a operação de escrita, uma nova mensagem de erro é registada no registo de erros do SQL Server. A maior parte das operações de escrita do SQL Server ocorrem como pontos de verificação ou operações de escrita lenta. Uma escrita lenta é uma tarefa de segundo plano que utiliza e/s assíncrona. A implementação da memória intermédia em anel é leve, tornando assim o desempenho afecta no sistema negligenciável.

A seguinte mensagem de erro indica que SQL Server não recebeu um erro de chamada de API WriteFile ou o ReadFile API. No entanto, quando o LSN foi revista, o valor não era correcto:


SQL Server detectou um nível de SO/hardware não reportado ler ou escrever o problema na página (1:75007) da base de dados 12

LSN devolvido (63361:16876:181), LSN esperado (63361:16876:500)

Contacte o fabricante de hardware e considerar a desactivação de mecanismos de colocação em cache para corrigir o problema


A partir do SQL Server 2005, a mensagem de erro será relatada como:


SQL Server detectou um erro de e/s com base em consistência lógico: leitura obsoletos. Ocorreu durante uma << de leitura/escrita >> da página << PAGEID >> no ID da base de dados << DBID >> no deslocamento << CONTRAPARTIDA física >> no ficheiro << nome do ficheiro >>. Mensagens adicionais no SQL Server erro registo ou sistema de registo de eventos poderão fornecer mais detalhes. Esta é uma condição de erro grave que ameace a integridade da base de dados e tem de ser corrigida imediatamente. Conclua a verificação de consistência da base de dados (DBCC CHECKDB). Este erro pode ser causado por vários factores; Para mais informações, consulte SQL Server Books Online.


Neste momento, a cache de leitura contém uma versão mais antiga da página, ou os dados não foram correctamente escritos no disco físico. Em ambos os casos (uma perda de escrita ou leitura obsoletos), o SQL Server comunica um problema com o sistema operativo, o controlador ou as camadas de hardware externo.

Se ocorrer 3448 de erro quando tentar anular uma transacção que tenha erro 605 ou 823 de erro, o computador com o SQL Server automaticamente fecha a base de dados e tenta abrir e recuperar a base de dados. A primeira página que experiências erro 605 ou erro 823 é considerada uma página com erros e o id de página é mantido pelo computador com o SQL Server. Durante a recuperação (antes da fase de Refazer) quando o id de página inválida é lido, os principais detalhes sobre o cabeçalho de página são registados no registo de erros do SQL Server. Esta acção é importante porque ajuda a distinguir entre os cenários perdido escrita e leitura obsoletos.

Poderá ver os seguintes comportamentos comuns dois cenários de leitura obsoletos:
Os comportamentos referidos no parágrafo anterior indicam um problema de cache de leitura e são frequentemente são resolvidos desactivando a cache de leitura. As acções descritas no parágrafo anterior, normalmente, força uma anulação de cache e o êxito lê que ocorrem mostrar que o suporte físico é actualizado correctamente. O comportamento perdido escrever ocorre quando a página é de leitura anterior ainda é a versão mais antiga dos dados, mesmo após uma limpeza forçada dos mecanismos de colocação em cache.

Por vezes, o problema não pode ser específico para uma cache de hardware. Poderá ser um problema com um controlador de filtro. Em tais casos, reveja o software, incluindo utilitários de cópia de segurança e software antivírus e, em seguida, verificar se existem problemas com o controlador de filtro.

Microsoft também tomou condições que não satisfaçam os critérios para 605 de erro ou erro 823 mas que são causadas pela mesma actividade leitura obsoletos ou perdido escrever. Em alguns casos, é apresentada uma página a ser actualizada duas vezes, mas com o mesmo LSN valor. Este comportamento poderá ocorrer se o ID de objecto e o ID de página são correcta (já atribuída ao objecto de página) e uma alteração é efectuada para a página e descarregada para o disco. A obtenção da página seguinte devolve uma imagem mais antiga e, em seguida, é efectuada uma alteração de segunda. O registo de transacções do SQL Server mostra que a página tiver sido actualizada duas vezes com o mesmo valor LSN. Esta acção é um problema quando tenta restaurar uma sequência de registo de transacções ou com problemas de consistência de dados, tais como falhas de chaves externas ou entradas de dados em falta. A mensagem de erro seguinte ilustra um exemplo desta condição:


Erro: 3456, classificação de gravidade: 21, estado: 1 não foi possível refazer registo (276666:1664:19), para a base de dados do ID de transacção (0:825853240), na página (1:1787100), 'autores' (7). Página: LSN = (276658:4501:9), tipo = 1. REG: OpCode = 4, contexto 2, PrevPageLSN: (275565:3959:31)...


Alguns cenários são descritos mais detalhadamente nas listas seguintes:

  • LSN SequenceAction1Checkpoint
    2Begin Transaction
    3Table created or truncated
    4Inserts (Pages allocated)
    5Newly allocated page written to disk by Lazy Writer
    6Select from table – Scans IAM chain, newly allocated page read back from disk (LRU | HASHED = 0x9 in getpage message), encounters Error 605 - Invalid Object ID
    7Rollback of transaction initiated

  • LSN SequenceAction1Checkpoint
    2Begin Transaction
    3Page Modification
    4Page written to disk by Lazy Writer
    5Page read in for another modification (stale image returned)
    6Page Modified for a second time but because of stale image does not see first modification
    7Rollback – Fails – Transaction Log shows two different log records with the same PREV LSN for the page

Operadores de ordenação' SQL Server' efectuam actividades de e/s, principalmente para e da base de dados tempdb . Estas operações de e/s são semelhantes às operações de e/s da memória intermédia; No entanto, já tenham sido projectadas para utilizar a lógica de leitura ' Repetir ' para tentar resolver problemas semelhantes. O diagnóstico adicional explicado neste artigo não se aplicam a estas operações de e/s.

Microsoft fez notar que a causa raiz para a ordenação seguinte ler falhas é geralmente uma leitura obsoletos ou uma perda de escrita:


2003-04-01 20:13:31.38 spid122 declaração do SQL Server: ficheiro: < p:\sql\ntdbms\storeng\drs\include\record.inl >, linha = 1447 falha na asserção = ' m_SizeRec > 0 & & m_SizeRec < = MAXDATAROW'.

2003-03-29 09:51:41.12 spid57 ordenar (ID de página inválida) de falha de leitura. PageID = (0x1:0x13e9), dbid = 2, ficheiro = e:\Programas\Exchsrvr\Mailroot\vsi c:\Programas\Microsoft SQL Server\mssql\data\tempdb.mdf. A tentar novamente.

2003-03-29 09:51:41.13 spid57 erro: 823, gravidade: 24, estado: 7
Erro de e/s (ID de página inválida) do 2003-03-29 09:51:41.13 spid57 detectados durante a leitura no deslocamento 0x000000027d2000 no ficheiro 'c:\Programas\Microsoft SQL Server\mssql\data\tempdb.mdf de e:\Programas\Exchsrvr\Mailroot\vsi'...

* 00931097 Module(sqlservr+00531097) (utassert_fail + 000002E3)
* 005B1DA8 Module(sqlservr+001B1DA8) (RecBase::Resize+00000091)
* 00407EE7 Module(sqlservr+00007EE7) (RecBase::LocateColumn+00000012)
* 00852520 Module(sqlservr+00452520) (mergerow + 000000A4)
* 008522B3 Module(sqlservr+004522B3) (merge_getnext+00000285)
* 0085207D Module(sqlservr+0045207D) (mergenext+0000000D)
* 004FC5FB Module(sqlservr+000FC5FB) (getsorted+00000021)

Os clientes que tiveram estes erros de ordenar com frequência foi resolvido os problemas movendo tempdb para uma unidade local não colocar em cache, ou desactivando os mecanismos de colocação em cache de leitura.

Porque uma leitura obsoleta ou uma escrita perdida resulta no armazenamento de dados que não é esperado, poderá ocorrer uma grande variedade de comportamentos. Poderá aparecer como dados em falta, mas alguns dos efeitos mais comuns de falta de dados aparecem como danos de índice remissivo, tal como erro 644 ou 625 de erro:


Erro 644 gravidade nível 21 mensagem de texto não foi possível localizar a entrada de índice de RID ' %. * hs' no índice de página % S_PGID, ID do índice %d, da base de dados ' %. * ls'.

Texto da mensagem erro 625 gravidade nível 21 não é possível obter a linha da página % S_PGID por RID porque a IDRanhura (%d) não é válida.


Alguns clientes relataram falta linhas depois de efectuam estas actividades de contagem de linha. Este problema ocorre devido a uma operação de escrita perdida. Talvez a página era suposto ser ligados à cadeia de página índice agrupado. Se a escrita perdeu-se fisicamente, os dados também são perdidos.

Importante Se detectar qualquer dos comportamentos, ou se suspeita de problemas semelhantes e desactivação de mecanismos de colocação em cache, Microsoft recomenda vivamente que obter a actualização mais recente para o SQL Server e o mais recente simulador de tensão de e/s do servidor SQL. A Microsoft recomenda vivamente que efectue uma revisão estrita das suas configurações associadas e o sistema operativo.

Nota A Microsoft confirmou que em cargas de e/s raras e pesadas, algumas plataformas de hardware podem devolver uma leitura obsoleta. Se o diagnóstico expandido indica uma possível obsoletas perdido de leitura/escrita condição, contacte o fornecedor de hardware para seguimento imediato para cima e testar com o utilitário SQLIOSim .

Sistemas para suportar a entrega com garantia para suportes de dados estáveis mencionados nos Requisitos do programa de fiabilidade e/s do SQL Serverrequer o SQL Server. Para mais informações sobre os requisitos de entrada e saídas para o motor de base de dados do SQL Server, consulte Requisitos de entrada/saída de motor da base de dados Microsoft SQL Server.

Eis algumas informações adicionais sobre este problema:

  • Utilizei o ReadFile e WriteFile como exemplos de API. Este comportamento também se aplica a dispersão e reunir a actividade.

  • Observámos vários destes problemas ultimamente (de Julho de 2003) em sistemas Compaq/HP, com base, SCSI inteligentes e HP SANsin para além de Intel baseia controladores Raid.

  • Vamos ter visto este problema mais no SQL Server 2000 Service Pack 3 (760) e cria mais tarde, mas já viu cenários semelhantes antes de SQL Server 2000 SP3.

  • SQLIOStress foi actualizada para ser mais agressivo, procurando nestas condições.

  • O pessoal de desenvolvimento do SQL Server está a actualizar outros utilitários para ajudar a detecção destes problemas.

Autor:
Escritor: haribaskar.janarthanam@wipro.com
Revisor técnico: bobward; mikezw; ericchr Srikant.Jahangirdar@wipro.com (Id de KSM: Partners\v-9srikantj)
Editor: v-sedmun; vernettp

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×