Belirtiler
Microsoft Dynamics CRM 4.0, Microsoft Dynamics CRM 2011, Microsoft Dynamics CRM 2013 veya Microsoft Dynamics CRM 2015'i çalıştırdığınızda, AsyncOperationBase tablosu büyür ve çok büyük olur. Tablo milyonlarca kayıt içerdiğinde performans yavaştır.
Buna ek olarak, aşağıdaki gibi hatalar çalıştırılan sunucudaki uygulama olay günlüğüne kaydedilir Microsoft Dynamics CRMMicrosoft Dynamics CRM:
Not
Olay Türü: Hata
Olay Kaynağı: MSCRMDeletionService
Olay Kategorisi: Yok
Olay Kimliği: 16387
Tarih: 2009/01/26
Zaman: 11:41:54
Kullanıcı: N/A
Bilgisayar: CRMSERVER
Açıklama: Hata: Silme Hizmeti tabloyu temizleyemedi=CleanupInactiveWorkflowAssembliesProcedure Daha fazla bilgi için, http://go.microsoft.com/fwlink/events.asp'teki Yardım ve Destek Merkezi'ne bakın.
Çözüm
Bu sorunu çözmek için, **OrgName** yer tutucusunun<> kuruluşunuzun gerçek adını temsil ettiği **<OrgName>_MSCRM veritabanında aşağıdaki betiği çalıştırarak AsyncOperationBase tablosunu temizleyin.
Uyarı Verileri temizlemeden önce, tamamlanan sistem işlerinin bazı durumlarda iş değeri olduğunu ve uzun süre depolanmaları gerektiğini unutmayın. Bu nedenle, bu konuyu öncelikle kuruluşunuzun yönetim kadrosuyla görüşmeniz gerekir.
Etkilenen sistem işleri:
SQM veri toplama. Yazılım Kalitesi Metrikleri, müşteri deneyimi programı için veri toplar.
Sözleşme Durumları SQL işini güncelleştirin. Bu iş günde bir kez gece yarısı çalışır. Bu iş, süresi dolan sözleşmeleri Süresi Doldu durumuna ayarlar.
Kuruluş Tam Metin Katalog Dizini. CRM'de Microsoft Bilgi Bankası makalelerini aramak için tam metin dizinini db cinsinden doldurur.
Yinelenen işler iptal edildiyse kaldırılır.
Notlar
Microsoft Dynamics CRM için Bu Bilgi Bankası makalesindeki SQL betiği yalnızca bir kerelik bir çalışmadır. Bunu, yinelenen gecelik, haftalık veya aylık olarak çalıştırılacak bir SQL işi olarak ekleyebilirsiniz. CRM'niz çalışırken, iş gereksinimlerinize bağlı olarak bu makaleyi haftalık olarak uygulamanız veya çözümü özel TOPLU SİL işleri yazarak uygulamanız gerekir. (BulkDeleteRequest.QuerySet özelliğinde, BulkDeleteRequest sınıfında ve silme sırasına ilişkin CRM SDK belgelerimize bakın)
İş akışları için AsyncOperation kayıtlarının ve bunlara karşılık gelen kayıtların WorkflowLogBase nesnesinden silindiğinden emin olun.
İlgili tüm bulkdeletefailure ve bulkdeleteoperation kayıtlarının silindiğinden emin olun.
Türlerin durum kodu 3 ve türlerin durum kodu 30 veya 32 ise yalnızca aşağıdaki Zaman Uyumsuz işlem türlerinin silindiğinden emin olun:
- İş Akışı Genişletme Görevi (1)
- SQM verilerini topla (9)
- PersistMatchCode (12)
- FullTextCatalogIndex (25)
- UpdateContractStates (27)
- İş Akışı (10)
IF EXISTS (SELECT name from sys.indexes
WHERE name = N'CRM_AsyncOperation_CleanupCompleted')
DROP Index AsyncOperationBase.CRM_AsyncOperation_CleanupCompleted
GO
CREATE NONCLUSTERED INDEX CRM_AsyncOperation_CleanupCompleted
ON [dbo].[AsyncOperationBase] ([StatusCode],[StateCode],[OperationType])
GO
while(1=1)
begin
declare @DeleteRowCount int = 10000
declare @rowsAffected int
declare @DeletedAsyncRowsTable table (AsyncOperationId uniqueidentifier not null primary key)
insert into @DeletedAsyncRowsTable(AsyncOperationId)
Select top (@DeleteRowCount) AsyncOperationId from AsyncOperationBase
where
OperationType in (1, 9, 12, 25, 27, 10)
AND StateCode = 3
AND StatusCode in (30, 32)
select @rowsAffected = @@rowcount
delete poa from PrincipalObjectAccess poa
join WorkflowLogBase wlb on
poa.ObjectId = wlb.WorkflowLogId
join @DeletedAsyncRowsTable dart on
wlb.AsyncOperationId = dart.AsyncOperationId
delete WorkflowLogBase from WorkflowLogBase W, @DeletedAsyncRowsTable d
where
W.AsyncOperationId = d.AsyncOperationId
delete BulkDeleteFailureBase From BulkDeleteFailureBase B, @DeletedAsyncRowsTable d
where
B.AsyncOperationId = d.AsyncOperationId
delete BulkDeleteOperationBase From BulkDeleteOperationBase O, @DeletedAsyncRowsTable d
where
O.AsyncOperationId = d.AsyncOperationId
delete WorkflowWaitSubscriptionBase from WorkflowWaitSubscriptionBase WS, @DeletedAsyncRowsTable d
where
WS.AsyncOperationId = d.AsyncOperationID
delete AsyncOperationBase From AsyncOperationBase A, @DeletedAsyncRowsTable d
where
A.AsyncOperationId = d.AsyncOperationId
/*If not calling from a SQL job, use the WAITFOR DELAY*/
if(@DeleteRowCount > @rowsAffected)
return
else
WAITFOR DELAY '00:00:02.000'
end
Silme betiğinin performansını iyileştirme
Genel Microsoft Dynamics CRM performansını geliştirmek için, Microsoft Dynamics CRM Silme Hizmeti'ni Microsoft Dynamics CRM boyunca yoğun olmayan saatlerde çalışacak şekilde zamanlayın. Hizmet, varsayılan olarak Microsoft Dynamics CRM yüklendiği saatte çalışır. Ancak, hizmeti varsayılan saat yerine 22:00'da çalışacak şekilde ayarlayabilirsiniz. Bunu yapmak için Microsoft Dynamics CRMMicrosoft Dynamics CRM ScaleGroup Job Editor'ı kullanın. Daha fazla bilgi için aşağıdaki CodePlex web sitesini ziyaret edin:
http://crmjobeditor.codeplex.com/ Notlar- Bu eylem, betiğin performansını doğrudan etkilemez.
- Microsoft Dynamics CRM 4.0 için iş editörü kapatıldı ve artık kullanılamıyor.
Bu makaledeki silme betiklerinin performansını ve benzer silme işlemlerini çalıştıran Microsoft Dynamics CRM Silme Hizmeti kodunu geliştirmek için, bu makaledeki silme betiğini çalıştırmadan önce OrganizationName_MSCRM veritabanına aşağıdaki üç dizini ekleyin:
CREATE NONCLUSTERED INDEX CRM_WorkflowLog_AsyncOperationID ON [dbo].[WorkflowLogBase] ([AsyncOperationID]) GO CREATE NONCLUSTERED INDEX CRM_DuplicateRecord_AsyncOperationID ON [dbo].[DuplicateRecordBase] ([AsyncOperationID]) GO CREATE NONCLUSTERED INDEX CRM_BulkDeleteOperation_AsyncOperationID ON [dbo].[BulkDeleteOperationBase] (AsyncOperationID) GONot Bu dizinleri eklemezseniz, silme betiğinin çalıştırılması saatler sürebilir.
Bu betiği çalıştırırken Microsoft Dynamics CRM Zaman Uyumsuz İşleme Hizmeti'ni durdurun.
İsteğe bağlı: Aşağıdaki dizinleri yeniden oluşturun ve istatistikleri güncelleştirin:
-- Rebuild Indexes & Update Statistics on AsyncOperationBase Table ALTER INDEX ALL ON AsyncOperationBase REBUILD WITH (FILLFACTOR = 80, ONLINE = OFF,SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = OFF) GO -- Rebuild Indexes & Update Statistics on WorkflowLogBase Table ALTER INDEX ALL ON WorkflowLogBase REBUILD WITH (FILLFACTOR = 80, ONLINE = OFF,SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = OFF) GOTam Tarama ile İsteğe Bağlı Güncelleştirme İstatistikleri Bu sorguya katılan tüm tablolarda, aşağıdaki komutları kullanarak (tercihen en yoğun olmayan saatlerde):
UPDATE STATISTICS [dbo].[AsyncOperationBase] WITH FULLSCAN UPDATE STATISTICS [dbo].[DuplicateRecordBase] WITH FULLSCAN UPDATE STATISTICS [dbo].[BulkDeleteOperationBase] WITH FULLSCAN UPDATE STATISTICS [dbo].[WorkflowCompletedScopeBase] WITH FULLSCAN UPDATE STATISTICS [dbo].[WorkflowLogBase] WITH FULLSCAN UPDATE STATISTICS [dbo].[WorkflowWaitSubscriptionBase] WITH FULLSCANİsteğe bağlı: Microsoft SQL Server SQL Server günlüklerinin fazla oluşturulmasını önlemek için MSCRM veritabanının kurtarma modelini Basit olarak değiştirin. SQL Server 2005'te, Microsoft SQL Server Management Studio'da Yönetici olarak oturum açın, org_name>_MSCRM veritabanınızı <sağ tıklatın, Özellikler'i, Seçenekler'i tıklatın ve sonra Kurtarma Modeli'ni tıklatın. Basit Olarak İşaretleyin ve Tamam'a tıklayın. Bu betiği ilk kez çalıştırdıktan sonra, <en iyi veri kurtarılabilirlik modeli için org_name>_MSCRM veritabanı kurtarma modeli FULL'a döndürülmelidir.
Betiğin @DeleteRowCount performansını artırmak için 10.000 değerini düşürebilirsiniz
Bu makaledeki betik tarafından silinecek kayıt sayısını belirlemek için OrganizationName_MSCRM veritabanında aşağıdaki sayım betiğini çalıştırın:
Select Count(AsyncOperationId)from AsyncOperationBase WITH (NOLOCK)
where OperationType in (1, 9, 12, 25, 27, 10)
AND StateCode = 3 AND StatusCode IN (30,32)
Komut dosyası hatası
Temizleme betiğini çalıştırdığınızda, aşağıdakine benzer bir hata iletisi alabilirsiniz:
Not
DELETE deyimi, REFERENCE kısıtlaması "asyncoperation_workflowwaitsubscription" ile çakışmıştır. Çatışma "Contoso_MSCRM" veritabanında, "dbo" tablosunda meydana geldi. WorkflowWaitSubscriptionBase", 'AsyncOperationId' sütunu. Açıklama sonlandırıldı.
Bu hata iletisini alırsanız, temizleme betiğini durdurun ve tamamlanmış veya iptal edilmiş iş akışları için var olan kalan WorkflowWaitSubscription kayıtlarını kaldırmak için bu adımları izleyin. Bu kayıtların artık var olmaması gerekir, çünkü iş akışları tamamlandığında veya iptal edildiğinde silinmiş olmaları gerekir. Bu sorgudan döndürülen hiçbir kayıt görmemeniz gerekir. Bu sorguda görüntülenen WorkflowWaitSubscriptionBase tablosunda kalan her şey yalnız bırakılmış kayıttır. Microsoft CRM Zaman Uyumsuz işlemi iptal edilmiş veya tamamlanmış durumda olduğundan bu kayıtları kullanıcı arabirimi aracılığıyla silemezsiniz.
Aşağıdaki betik, tamamlanmış ve iptal edilmiş iş akışı kayıtları için kaç tane yalnız bırakılmış WorkflowWaitSubscriptionBase kaydı bulunduğunu doğrular:
select count(*) from workflowwaitsubscriptionbase WITH (NOLOCK)
where asyncoperationid in
(Select asyncoperationid from AsyncOperationBase WITH (NOLOCK)
where OperationType in (1, 9, 12, 25, 27, 10)
AND StateCode = 3 AND StatusCode IN (30,32))
Aşağıdaki betik, tamamlanmış ve iptal edilmiş iş akışı kayıtlarına ait WorkflowWaitSubscriptionBase kayıtları için WorkflowWaitSubscriptionBase kayıtlarını siler:
delete from workflowwaitsubscriptionbase
where asyncoperationid in(Select asyncoperationidfrom AsyncOperationBase
where OperationType in (1, 9, 12, 25, 27, 10)
AND StateCode = 3 AND StatusCode IN (30,32))
Bu delete deyimi yürütüldükten sonra, AsyncoperationBase ve İş Akışı temizleme betiği başarıyla tamamlanır.
Daha Fazla Bilgi
Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarına tıklayın:
954929 AsyncOperation varlığı [Org]_MSCRM veritabanının önemli bir bölümünü tüketir ve veritabanında düşük performansa neden olur Microsoft Dynamics CRM
957871 İş Akışı Genişletme Görevi kayıtları, MSCRM veritabanındaki AsyncOperationBase tablosunun Microsoft Dynamics CRM 4.0'da çok büyümesine neden oluyor Yazılım güncelleştirme terminolojisi hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:
824684 Microsoft yazılım güncelleştirmelerini açıklamak için kullanılan standart terminolojinin açıklamasıMicrosoft Business Solutions CRM yazılım düzeltmesi ve güncelleştirme paketi terminolojisi hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:
887283 Microsoft Business Solutions CRM yazılım düzeltmesi ve güncelleştirme paketi adlandırma standartları