CORRECÇÃO: Mensagem de erro quando utiliza uma função tabelares (TVF) juntamente com o operador cruzada se aplicam de uma consulta no SQL Server 2005: "Existe memória de sistema insuficientes para executar esta consulta"

Traduções de Artigos Traduções de Artigos
Artigo: 924954 - Ver produtos para os quais este artigo se aplica.
N.º de bugs: 50000224 (correcção SQL)
A Microsoft distribui correcções Microsoft SQL Server 2005 como um ficheiro transferível. Uma vez que as correcções são cumulativas, cada nova versão contém todas as correcções e todas as correcções de segurança incluídas com o SQL Server 2005 anterior corrigir lançamento.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo descreve o seguinte sobre esta versão de correcção:
  • Problemas corrigidos pelo pacote de correcção
  • Os pré-requisitos para aplicar o pacote de correcções
  • Se tem de reiniciar o computador depois de aplicar o pacote de correcções
  • Se o pacote de correcções é substituído por qualquer outro pacote de correcção
  • Se terá de efectuar quaisquer alterações de registo depois de aplicar o pacote de correcções
  • Ficheiros contidos no pacote de correcção

Sintomas

Considere o seguinte cenário. No SQL Server 2005, pode utilizar uma função tabelares (TVF) juntamente com o operador cruzada se aplicam numa consulta. Pode utilizar um TVF Transact-SQL ou common language runtime (CLR) TVF. Neste cenário, poderá receber a seguinte mensagem de erro:
Msg 701, nível de 17 estado 123, linha 2
Existe memória de sistema insuficientes para executar esta consulta.
Normalmente, detectará este problema se a tabela no lado esquerdo da consulta produz várias linhas.

Causa

Este problema ocorre porque a memória que é utilizada para os parâmetros do TVF não é libertada até que a consulta seja concluída a execução. Quando utiliza um TVF juntamente com o operador cruzada se aplicam, a TVF pode ser chamado muitas vezes mesmo quando a consulta é executada uma vez. Quando o TVF é chamado muitas vezes, é consumida muita memória.

Resolução

Informações sobre a correcção

Está disponível a partir da Microsoft uma correcção suportada. No entanto, esta correcção destina-se a corrigir o problema descrito neste artigo. Aplique esta correcção apenas em sistemas que tenham este problema específico. Esta correcção poderá submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde pela próxima actualização de software que contenha esta correcção.

Se a correcção está disponível para transferência, existe uma secção "denominada transferência de correcção disponível" na parte superior deste artigo da base de dados de conhecimento. Se esta secção não for apresentado, contacte o serviço de cliente do Microsoft e suporte para obter a correcção.

Nota Se ocorram problemas adicionais ou se for necessária qualquer resolução de problemas, poderá ter de criar um pedido de assistência separado. Os custos normais do suporte serão aplicados a problemas adicionais e questões de suporte que não se enquadrem esta correcção específica. Para obter uma lista completa dos números de telefone do suporte de cliente do Microsoft ou para criar um pedido serviço separado, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota O formulário "Transferência de correcção disponível" apresenta os idiomas para a qual a correcção está disponível. Se não vir o idioma, é porque uma correcção não está disponível para esse idioma.

Pré-requisitos

  • Microsoft SQL Server 2005 Service Pack 1 (SP1)

    Para obter informações sobre como obter o SQL Server 2005 SP1, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
    913089Como obter o service pack mais recente para o SQL Server 2005

Informações sobre reinício

Não é necessário reiniciar o computador depois de aplicar a correcção.

Informações de registo

Não é necessário alterar o registo.

Informações sobre ficheiros da correcção

Esta correcção contém apenas os ficheiros necessários para corrigir os problemas referidos neste artigo. Esta correcção poderá não conter todos os ficheiros que necessita para actualizar completamente um produto para a compilação mais recente.

A versão inglesa desta correcção tem os atributos de ficheiro (ou atributos de ficheiro posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas na hora universal coordenada (UTC). Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador fuso horário no item Data e hora no painel de controlo.
SQL Server 2005, versões de 32 bits
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Logread.exe2005.90.2192.0398,11219-Set-200615: 10x 86
Microsoft.analysisservices.adomdclient.dll9.0.2192.0543,52019-Set-200615: 11x 86
Microsoft.analysisservices.deploymentengine.dll9.0.2192.0138,01619-Set-200615: 09x 86
Microsoft.analysisservices.dll9.0.2192.01,215,26419-Set-200615: 10x 86
Microsoft.SQLServer.mgdsqldumper.dll2005.90.2192.075,55219-Set-200615: 08x 86
Microsoft.SQLServer.sqlenum.dll9.0.2192.0908,06419-Set-200615: 10x 86
Msgprox.dll2005.90.2192.0197,92019-Set-200615: 09x 86
Msmdlocal.dll9.0.2192.015,609,63219-Set-200615: 11x 86
Msmdredir.dll9.0.2192.03,990,30419-Set-200615: 11x 86
Replprov.dll2005.90.2192.0547,61619-Set-200615: 11x 86
Replrec.dll2005.90.2192.0782,11219-Set-200615: 10x 86
Sqlaccess.dll2005.90.2192.0347,93619-Set-200615: 10x 86
Sqlagent90.exe2005.90.2192.0319,26419-Set-200615: 10x 86
Sqlservr.exe2005.90.2192.028,962,13619-Set-200615: 12x 86
Xpstar90.dll2005.90.2192.0292,64019-Set-200614: 02x 86
Xpstar90.rll2005.90.2192.0152,86419-Set-200615: 10x 86
SQL Server 2005, versão de 64 x
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Logread.exe2005.90.2192.0522,52819-Set-200614: 23x 64
Microsoft.analysisservices.adomdclient.dll9.0.2192.0543,52019-Set-200614: 23x 86
Microsoft.analysisservices.adomdclient.dll9.0.2192.0543,52019-Set-200615: 11x 86
Microsoft.analysisservices.deploymentengine.dll9.0.2192.0138,01619-Set-200615: 09x 86
Microsoft.analysisservices.dll9.0.2192.01,215,26419-Set-200615: 10x 86
Microsoft.SQLServer.mgdsqldumper.dll2005.90.2192.091,42419-Set-200614: 21x 64
Microsoft.SQLServer.mgdsqldumper.dll2005.90.2192.075,55219-Set-200615: 08x 86
Microsoft.SQLServer.sqlenum.dll9.0.2192.0875,29619-Set-200614: 20x 86
Msgprox.dll2005.90.2192.0259,36019-Set-200614: 22x 64
Msmdlocal.dll9.0.2192.015,609,63219-Set-200615: 11x 86
Msmdredir.dll9.0.2192.03,990,30419-Set-200615: 11x 86
Replprov.dll2005.90.2192.0745,24819-Set-200614: 20x 64
Replrec.dll2005.90.2192.01,008,41619-Set-200614: 21x 64
Sqlaccess.dll2005.90.2192.0355,10419-Set-200614: 23x 86
Sqlagent90.exe2005.90.2192.0390,94419-Set-200614: 23x 64
Sqlservr.exe2005.90.2192.039,350,04819-Set-200614: 21x 64
Xpstar90.dll2005.90.2192.0540,96019-Set-200614: 23x 64
Xpstar90.rll2005.90.2192.0153,37619-Set-200614: 21x 64
SQL Server 2005, versão da arquitectura Itanium
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Logread.exe2005.90.2192.01,095,45619-Set-200613: 52IA-64
Microsoft.analysisservices.adomdclient.dll9.0.2192.0543,52019-Set-200613: 51x 86
Microsoft.analysisservices.adomdclient.dll9.0.2192.0543,52019-Set-200615: 11x 86
Microsoft.analysisservices.deploymentengine.dll9.0.2192.0138,01619-Set-200615: 09x 86
Microsoft.analysisservices.dll9.0.2192.01,215,26419-Set-200615: 10x 86
Microsoft.SQLServer.mgdsqldumper.dll2005.90.2192.0163,10419-Set-200613: 50IA-64
Microsoft.SQLServer.mgdsqldumper.dll2005.90.2192.075,55219-Set-200615: 08x 86
Microsoft.SQLServer.sqlenum.dll9.0.2192.0875,29619-Set-200613: 52x 86
Msgprox.dll2005.90.2192.0542,49619-Set-200613: 51IA-64
Msmdlocal.dll9.0.2192.048,585,50419-Set-200613: 53IA-64
Msmdredir.dll9.0.2192.06,237,47219-Set-200613: 53IA-64
Replprov.dll2005.90.2192.01,617,18419-Set-200613: 52IA-64
Replrec.dll2005.90.2192.02,141,47219-Set-200613: 52IA-64
Sqlaccess.dll2005.90.2192.0349,47219-Set-200613: 51x 86
Sqlagent90.exe2005.90.2192.01,143,58419-Set-200613: 52IA-64
Sqlservr.exe2005.90.2192.072,233,76019-Set-200613: 53IA-64
Xpstar90.dll2005.90.2192.0951,07219-Set-200613: 51IA-64
Xpstar90.rll2005.90.2192.0152,35219-Set-200613: 50IA-64

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".

Mais Informação

Quando executa a consulta de Transact-SQL, repare que os seguintes itens aumentam gradualmente até ocorre o erro 701:
  • Expedidor de memória CACHESTORE_SQLCP de sys.dm_os_memory_clerks vista de gestão de sistema operativo do SQL Server
  • O objecto memória MEMOBJ_XSTMT sys.dm_os_memory_objects vista de gestão de sistema operativo do SQL Server
Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
824684Descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft

Passos para reproduzir o problema

  1. Para reproduzir o problema mais rapidamente, configure o SQL Server 2005 para utilizar uma pequena quantidade de memória. Para efectuar este procedimento, execute o seguinte script no SQL Server 2005.
    -- Enable advanced options
    USE master
    EXEC sp_configure 'show advanced options', 1
    go
    RECONFIGURE WITH OVERRIDE
    go
    
    -- Set the maximum amount of memory to 300 MB
    exec sp_configure 'max server memory', 300
    go
    reconfigure with override
    go
    dbcc freeproccache
    go
    
  2. Parar e reiniciar o serviço SQL Server, execute os seguintes comandos numa linha de comandos:
    net stop mssqlserver
    net start mssqlserver
  3. No SQL Server 2005, execute as seguintes instruções de Transact-SQL.
    drop table t
    go
    create table t (c1 int, c2 int, c3 int, c4 int, c5 int, c6 int, c7 int, c8 int, c9 int, c10 int)
    go
    
    drop function fn_test
    go
    create function fn_test (@p1 int, @p2 int, @p3 int, @p4 int, @p5 int, @p6 int, @p7 int, @p8 int, @p9 int, @p10 int)
    returns @t table (c1 nvarchar(4) )
    with schemabinding
    as
    begin
    insert into @t values (N'abcd')
    return
    end
    go
    drop function fn_scalar
    go
    create function fn_scalar (@p1 int, @p2 int, @p3 int, @p4 int, @p5 int, @p6 int, @p7 int, @p8 int, @p9 int, @p10 int)
    returns nvarchar(4) 
    with schemabinding
    as
    begin
    declare @s nvarchar (4)
    set @s = N'abcd' 
    
    return @s
    end
    
    go
    drop function fn_test2
    go
    create function fn_test2 ()
    returns @t table (c1 nvarchar(4) )
    with schemabinding
    as
    begin
    insert into @t values (N'abcd')
    return
    end
    
    
    go
    set nocount on
    go
    declare @i int
    set @i = 0
    while @i < 5000000
    begin
    insert into t values (@i, @i, @i, @i, @i, @i, @i, @i, @i, @i)
    set @i = @i + 1
    end
    
    go
    -- The following select query returns the 701 error if you restrict max server memory to 300 MB
    select count(*) from t cross apply dbo.fn_test(c1,c2,c3,c4,c5,c6,c7,c8,c9,c10)
    
    
Nota Estes passos utilizam um TVF Transact-SQL. Este problema também ocorre quando utiliza um TVF CLR.

Propriedades

Artigo: 924954 - Última revisão: 20 de novembro de 2007 - Revisão: 1.6
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition
Palavras-chave: 
kbmt kbautohotfix kbfix kbsql2005tsql kbexpertiseadvanced kbhotfixserver kbqfe kbpubtypekc KB924954 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 924954

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com