Teď jste offline a čekáte, až se znova připojí internet.

Výkon je pomalý při spuštění dotazu v SQL Server 2005, které aktualizace tabulky na propojený server a potom spojí tabulku k tabulce na místním serveru

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

Projděte si také anglickou verzi článku:942982
Příznaky
Předpokládejme následující situaci:
  • Máte dotaz, který aktualizuje tabulku na propojený server a potom spojí tabulku k tabulce na místním serveru.
  • Místní server je spuštěn 2005 Microsoft SQL Server.
  • Na místním serveru spusťte dotaz SQL Server 2005.
V tomto scénáři je pomalé porovnání výkonu stejný dotaz 2000 Microsoft SQL Server. Například při spuštění dotazu SQL Server 2000 dotazu trvá dokončení menší než 1 sekunda. Však při spuštění dotazu SQL Server 2005 v dotazu trvá přibližně 24 sekund na dokončení.
Příčina
Dotaz provádí operace vzdálené skenování na tabulce propojeného serveru. Při spuštění dotazu v SQL Server 2005 operace vzdálené Scan načte všechny řádky v tabulce. Pokud tabulka obsahuje mnoho řádků, skenovat vzdálené operace trvá dlouho dokončení.

Při spuštění dotazu SQL Server 2000 operace vzdálený dotaz odešle dotaz spustit na propojeného serveru. I když tabulka obsahuje mnoho řádků, operace vzdálené skenování je tedy dokončení v krátké době.
Jak potíže obejít
Chcete-li vyřešit tento problém, Přidat omezující podmínce UNIQUE nebo omezení PRIMARY KEY v tabulce na místním serveru. Přidat omezení sloupec použít pro operaci JOIN.

Například prohlášení DECLARE uvedených v části Krok 4 "Další informace" následující aktualizaci:
DECLARE @t2 table (c1 int primary key, c2 int)
Prohlášení
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Další informace

Kroky pro reprodukci problému


Poznámka: Následující postup předpokládá, že máte dva servery se systémem SQL Server 2005. Název jedné instance je ServerA\SQL2005. Název instance je ServerB\SQL2005.
  1. Na instanci serveru SQL Server 2005 Server_a spusťte následující příkazy k vytvoření databáze SQL Server Management Studio:
    USE MASTERGOIF EXISTS (SELECT * FROM sysdatabases where name = 'LinktestTarget')	DROP DATABASE LinktestTargetGOCREATE DATABASE LinktestTargetGOALTER DATABASE LinktestTarget MODIFY FILE(NAME = 'LinktestTarget', SIZE = 200MB)GOALTER DATABASE LinktestTarget MODIFY FILE(NAME = 'LinktestTarget_log', SIZE = 100MB)GO
  2. V ServerB instance SQL Server 2005, spusťte následující příkazy vytvořit propojený server Management Studio:
    DECLARE @serverName nvarchar(50)SET @serverName = @@serverNameIF EXISTS (SELECT * FROM master..sysservers WHERE srvname = 'LS')	EXEC master.dbo.sp_dropserver @server=N'LS', @droplogins='droplogins'EXEC sp_addlinkedserver    @server = N'LS',    @srvproduct = N'SQLDB',    @provider = N'SQLOLEDB',    @datasrc = N'ServerA\SQL2005',    @catalog = N'LinktestTarget'EXEC sp_serveroption N'LS', N'data access', N'true'EXEC sp_serveroption N'LS', N'rpc out', N'true'EXEC sp_serveroption N'LS', N'rpc', N'true'EXEC sp_serveroption N'LS', N'use remote collation', N'true'EXEC sp_addlinkedsrvlogin  @rmtsrvname = N'LS',  @useself = N'true',  @locallogin = N'sa'
  3. Na instanci serveru SQL Server 2005 Server_a spustit následující příkaz k vytvoření tabulky a naplnit tabulku s 50 000 řádků dat:
    USE LinktestTargetGOCREATE TABLE [T1] (	[c1] [int]  NOT NULL,	[c2] [int] NOT NULL,	[c3] char (4000) NOT NULL,	CONSTRAINT [PK_t1] PRIMARY KEY CLUSTERED ([c1])WITH FILLFACTOR = 80 ON [PRIMARY] ) ON [PRIMARY]GOSET NOCOUNT ONGODECLARE @counter intSET @counter = 1WHILE @counter < 50000BEGIN	INSERT INTO T1 (c1, c2, c3) VALUES (@counter, @counter,'')	SET @counter = @counter + 1ENDGOUPDATE STATISTICS T1 (PK_t1) WITH FULLSCAN
  4. V ServerB instance SQL Server 2005 spusťte následující příkazy. Všimněte si, že výkon je pomalý.
    DECLARE @t2 table (c1 int, c2 int)INSERT INTO @t2 (c1, c2) VALUES (399990, 399990) UPDATE ASET A.c2 = B.c2FROM LS.LinktestTarget.dbo.T1 AS A 	JOIN @t2 as B on B.c1 = A.c1

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 942982 - Poslední kontrola: 10/23/2007 23:07:31 - Revize: 1.1

Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition

  • kbmt kbexpertiseadvanced kbtshoot kbprb KB942982 KbMtcs
Váš názor