أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

أداء بطيئاً عند تشغيل استعلام في SQL Server 2005 بتحديث جدول على ملقم مرتبط ومن ثم ربط الجدول إلى جدول على الخادم المحلي

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية942982
الأعراض
اطلع على السيناريو التالي:
  • لديك استعلام تحديث جدول على ملقم مرتبط ثم ربط الجدول إلى جدول على الملقم المحلي.
  • يستخدم الخادم المحلي Microsoft SQL Server 2005.
  • على الملقم المحلي تشغيل الاستعلام في SQL Server 2005.
في هذا السيناريو، الأداء بطيئة بالمقارنة مع الأداء نفس الاستعلام في Microsoft SQL Server 2000. على سبيل المثال، عند تشغيل الاستعلام في SQL Server 2000 تأخذ الاستعلام أقل من 1 ثانية إلى النهاية. ومع ذلك، عند تشغيل الاستعلام في SQL Server 2005 تأخذ الاستعلام 24 ثانية تقريبًا لإنهاء.
السبب
تنفيذ الاستعلام عملية "التفحص البعيد" على الجدول على ملقم مرتبط. عند تشغيل الاستعلام في SQL Server 2005 عملية "التفحص البعيد" استرداد كافة الصفوف في الجدول. إذا كان الجدول يحتوي على صفوف كثيرة ، عملية "التفحص البعيد" وقتاً طويلاً للانتهاء.

ومع ذلك، عند تشغيل الاستعلام في SQL Server 2000 العملية "الاستعلام البعيد" بإرسال الاستعلام لتشغيل على ملقم مرتبط. لذلك، إذا كان الجدول يحتوي على صفوف كثيرة ، "تفحص البعيد" تكتمل العملية في وقت قصير.
الحل البديل
كمحاولة للتغلب على هذه المشكلة قم بإضافة قيد UNIQUE أو قيد PRIMARY KEY في الجدول على الملقم المحلي. قم بإضافة القيد "إلى العمود المستخدمة في عملية JOIN.

على سبيل المثال، تحديث بيان DECLARE المذكورة في الخطوة 4 من "مزيد من المعلومات" المقطع التالي:
DECLARE @t2 table (c1 int primary key, c2 int)
تصريح
أقرت Microsoft أن هذه مشكلة في منتجات Microsoft المسردة في قسم "تنطبق على".
معلومات أخرى

خطوات إعادة إنشاء هذه المشكلة


ملاحظة تفترض الخطوات التالية وجود ملقمين التي تعمل بنظام التشغيل SQL Server 2005. هو اسم مثيل واحد ServerA\SQL2005. هو اسم المثيل ServerB\SQL2005.
  1. تشغيل العبارات التالية لإنشاء قاعدة بيانات في SQL Server إدارة Studio على مثيل ServerA من SQL Server 2005:
    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. تشغيل العبارات التالية إنشاء ملقم مرتبط في إدارة Studio على مثيل ServerB من SQL Server 2005: nvarchar(50) @ serverName
    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. تشغيل العبارة التالية لإنشاء جدول على مثيل ServerA من SQL Server 2005 ومن ثم نشر الجدول مع 50,000 صفوف من البيانات:
    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. تشغيل العبارات التالية على مثيل ServerB من SQL Server 2005. لاحظ أن الأداء بطيء.
    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

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 942982 - آخر مراجعة: 10/23/2007 23:07:31 - المراجعة: 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 KbMtar
تعليقات
/html> /body>