Sorunuzun basit cevabı "hayır" olur. Görünüşe göre, SP1'de çok uzun süren bir sorguya sahip olduğunuz ve Tablo1'de paylaşılan kilitleri alan herhangi bir UPDATE
veya INSERT
SP2'nin SP1 tamamlanıncaya kadar beklemesi gerekir, böylece gerekli özel kilitler alınabilir (işlemlerden bahsetmediniz) yalıtım seviyeleri bu yüzden ben daha sonra herhangi bir sonraki işlem değil zaman alır SELECT
kendisi olduğunu kabul edeceğim - SP1 o zaman bazı UPDATE
s veya INSERT
s kendi gerçekleştirebilir olduğunu söylemiş olmasına rağmen). Toplayabildiğim kadarıyla, SP1'in SELECT
SP2'nin UPDATE
s performansını gerçekleştirebilmesi için kilitlerini serbest bırakmasını ve daha sonra SP2'nin kilitlerini serbest bırakmasını istediğinizde SP1'in SELECT
'a devam etmesine izin verin. Korkarım ki bu SQL'in kilitleme mantığına ve gerçekten de ACID ilkelerine aykırı. SP1 (veya başka bir işlem) her UPDATE
gerçekleştirdiğinde tutarlı bir sonuç elde etmek için SP1'in SELECT
yeniden başlatılması gerektiğinden, veritabanı performansı için felaketle sonuçlanacak şekilde çalışmasını istiyordu.
Saklı yordamlarınızı/uygulamalarınızı yeniden yapılandırmaya bakmanız gerektiği gibi geliyor. Bir SP'yi düzenli olarak çalıştıran, 15 dakika süren ve potansiyel olarak bir masaya kilitlenebilen bir ana darboğaz gibi görünüyor. Kırılmayabilir - belki SP2'nin mantığından bazılarını segmentlerden birine dahil edebilir mi? Ayrıca, neden bu kadar uzun sürüyor? SELECT
zamanını azaltmak için uygulanabilecek indeksleme yok ve aynı zamanda ıstırap çektiğiniz tablo/aralık kilitlerinden de kaçınıyor musunuz?
Hmmm. Cevabı biliyorsun, ama kullanmak istemiyorsun. –
Peki, daha temiz bir yol olup olmadığını bilmek istiyorum. –
Netleştirmek gerekirse, SP1 SP1 tamamlanıncaya kadar SP2'nin tablodan okuyamadığı özel tablo kilitlerini alır? Ve "SP1'e geri ver" ile ne demek istiyorsun? Ne geri verdin? – strickt01