Makale numarası: 317375 - Son Gözden Geçirme: 27 Mart 2008 Perşembe - Gözden geçirme: 6.3

Işlem günlüğü beklenmedik biçimde büyüyor veya SQL Server çalıştıran bir bilgisayarda dolduğu

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

SQL Server 7.0, SQL Server 2000 ve SQL Server 2005 ' te otomatik büyüme ayarıyla, işlem günlüğü dosyalarının otomatik olarak genişletebilirsiniz.

Denetim noktaları ya da işlem günlüğü yedekleri tetikleyen işlem günlüğü truncations arasında oluşan hareketlerin sayısı basılı olduğunda, genellikle, işlem günlüğü dosyasının boyutunu stabilizes.

Ancak, bazı durumlarda hareket oturum tam olur ya da çok büyük ve çalışma alanı yetersiz olabilir. Genellikle, bir işlem, kullanılabilir disk alanı dosya alır oturum ve artık genişletilemiyor aşağıdaki hata iletisini alırsınız:
Hata: 9002, önem derecesi: 17, durum: 2
Veritabanı günlük dosyası ' %. * ls dolu.
SQL Server 2005 kullanıyorsanız, aşağıdakine benzer bir hata iletisi alırsınız:
Hata: 9002, önem derecesi: 17, durum: 2
Veritabanı için işlem günlüğü ' %. * ls dolu. Neden günlük alanı yeniden kuramıyor dışında bulmak için <a0></a0>, sys.databases log_reuse_wait_desc sütununa bakın.
Bu hata iletisinin yanı sıra, SQL Server veritabanları şüpheli işlem günlüğünün genişlemesi alanı yetersizliği nedeniyle işaretleyebilir. Bu bir durum kurtarma hakkında ek bilgi için SQL Server Books Online'da "Yetersiz disk alanı" konusuna bakın.

Ayrıca, işlem günlüğünün genişlemesi aşağıdaki durumlarda oluşabilir:
  • Bir çok büyük bir işlem günlüğü dosyası.
  • Işlemler başarısız olabilir ve geri dönmek yeniden başlatılabilir.
  • Hareketler, tamamlanması uzun zaman alabilir.
  • Performans sorunları oluşabilir.
  • Engelleme oluşabilir.

Neden oluyor

Işlem günlüğünün genişlemesi aşağıdaki nedenler veya senaryoları nedeniyle oluşabilir: Not SQL Server 2005'te, aşağıdaki öğeleri belirlemek için sys.databases Katalog görünümü log_reuse_wait ve log_reuse_wait_desc sütunlarından gözden geçirebilirsiniz:
  • Neden hareket günlük alanı yeniden
  • Neden işlem günlüğü kesilmiş olamaz

Kaydedilmeyen hareketler

Açık hareketler, açık COMMIT veya ROLLBACK komut vermek için kaydedilmemiş kalır. Bu en sık ortaya çıkar uygulama bir IPTAL veya karşılık gelen bir ROLLBACK komutunu olmadan Transact SQL KILL. bir komut yayımladığında. Hareket iptal oluşur, ancak onu geri.; Bu nedenle, SQL Server, durdurulan işlem hala açık olduğundan, bundan sonra her hareket kesecek edemiyor. Veritabanında belirli bir zaman etkin bir işlem olup olmadığını doğrulamak için DBCC OPENTRAN Transact-SQL başvuru kullanabilirsiniz. Bu belirli senaryosu hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
295108  (http://support.microsoft.com/kb/295108/ ) Eksik işlem çok sayıda kilitler ve servis talebi engelleme tutabileceğini
171224  (http://support.microsoft.com/kb/171224/ ) Transact-SQL KILL komut çalışma şeklini anlamak
Ayrıca, "DBCC OPENTRAN" SQL'de konusuna Server Books Online'da.

Senaryoları kaydedilmemiş hareketlere neden:
  • Tüm hatalar Al neden olduğunu varsayar uygulama tasarımı.
  • Tamamen SQL Server davranışı dikkate adlandırılmış hareketleri veya iç içe özel olarak adlandırılmış hareketleri alınmadığı geri geldiğinde, bir uygulama tasarımı. Iç adlı bir hareketle geri çalışırsanız, aşağıdaki hata iletisini alırsınız:
    Sunucu: <a1>hata</a1> 6401, Level 16, State 1, 13 satırı Cannot geri dönmek InnerTran. Herhangi bir işlem veya kayıt noktası o adı bulunamadı.
    SQL Server hata iletisi üretir sonra sonraki ifadeye devam eder. Bu, tasarım gereğidir. Daha fazla bilgi için SQL Server Books Online'da "İşlem yuvalanmış" veya "İç SQL Server" konusuna bakın.

    Uygulama tasarlarken, Microsoft aşağıdakileri önerir:
    • Yalnızca bir hareket birimi açın (başka bir işlem sizin çağırabilir olasılığını dikkate).
    • @@ TRANCOUNT, size bir COMMIT, bir ROLLBACK, bir RETURN, benzer bir komut veya deyimi vermek için önce denetleyin.
    • Başka @@ TRANCOUNT "sizin yuvalamak" ve bir hata oluştuğunda geri alınmasını dış @@ TRANCOUNT için plan varsayımı ile kodunuzu yazın.
    • Kayıt noktası'nı gözden geçirin ve hareketler için seçenekleri işaretleyin. (Bunlar kilitleri kaldırmak değil!)
    • Tam sınama gerçekleştirir.
  • Kullanıcı etkileşimi hareket içinde izin veren bir uygulama. Bu hareketin hangi engellemeye neden olur ve işlem büyüme açık işlem kesildi ve yeni hareketleri açık hareket sonra günlüğe eklenen oturum uzun süre açık kalmasına neden olur.
  • @@ TRANCOUNT olmadığını doğrulamak için denetleyen bir uygulama hiçbir açık hareketler olduğundan.
  • Ağ veya diğer hatalar bildiren olmadan, SQL sunucusu istemci uygulamanın bağlantısı kapatın.
  • Bağlantı havuzu oluşturma. Çalışan iş parçacığı, SQL oluşturduktan sonra yeniden bağlantı hizmeti, sunucu bunları kullanır. Kullanıcı bağlantı, bir hareket başlatır ve yapılıyor veya hareketi geri alma önce bağlantısını keser ve aynı iş parçacığının bundan sonra bir bağlantı kullanır, önceki işlem hala açık kalır. Bu durum, önceki bir hareketin açık kalmasını kilitlerin olur ve büyük günlük dosyası boyutlarını sonuçları günlüğüne kaydedilmiş hareketlerin kesme engeller.Bağlantı havuzu oluşturma hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    164221  (http://support.microsoft.com/kb/164221/ ) Bir ODBC uygulamada bağlantı havuzu etkinleştirme

Aşırı büyük hareketleri

Işlem günlüğü dosyalarını günlük kayıtları, bir hareketin hareket bazında kesiliyor. Işlem kapsamı, kaldırılmıyor sonra hareket günlükten onu tamamlar sürece hareketi ve tüm işlemleri başlatıldı, büyükse. Bu, büyük boyutlu günlük dosyaları neden olabilir. Hareket yeterince büyükse, günlük dosyası kadar kullanılabilir disk alanını kullanın ve "işlem günlüğü dolu" Hata 9002 gibi bir hata iletisi türü neden. Bu tür bir hata iletisini alırsanız yapmanız gerekenler hakkında ek bilgi için bu makalenin "Daha fazla bilgi" bölümünde sağlanmıştır. Ayrıca, çok fazla zaman ve büyük hareketleri geri almak için SQL Server yük alır.

Işlemi: DBCC DBREINDEX ve CREATE INDEX

SQL Server 2000 <a1>Kurtarma</a1> modelindeki değişiklikler nedeniyle, Tam kurtarma modu kullanıp DBCC DBREINDEX, çalışan işlem günlüğü önemli ölçüde daha, SQL Server 7.0 için bir eşdeğer kurtarma modunda SELECT INTO veya BULK COPY kullanımını ve "trunc. ile karşılaştırıldığında genişletin Chkpt. oturumu".

Bu yaklaşım, DBREINDEX operasyondan sonraki hareket günlüğü boyutu, bir sorun olabilir, ancak günlük geri yükleme için daha iyi performans sağlar.

Hareket günlüğü yedeklerden geri yükleme sırasında

Bu, aşağıdaki Microsoft Knowledge Base makalesinde açıklanmıştır:
232196  (http://support.microsoft.com/kb/232196/ ) Yedekten geri yükledikten sonra ulaşması için kullanılan günlük alanı görüntülenir.

SQL Server 2000 toplu günlük modu kullanacak biçimde ayarlayın ve bir BULK COPY veya SELECT INTO deyimi vermek, değişen her bir uzantının işaretlenir ve işlem günlüğünü yedekleme sonra yedeklendi. Bu işlem günlüklerini yedekleyin ve toplu işlemleri yaptıktan hatalarını kurtarıp izin verir, ancak bu işlem için işlem günlüklerinin boyutunu ekler. SQL Server 7.0, bu özellik içermez. Hangi kapsamları değiştirilir yalnızca SQL Server 7.0 kaydeder, ancak gerçek kapsamlarını kaydetmez. Bu nedenle, SQL Server 7.0 değil çok gibi ancak toplu günlük modunda, tam modda göre önemli ölçüde daha fazla alan SQL Server 2000'de günlüğe alır.

Istemci uygulamaların tüm sonuç işleme

SQL Server için bir sorgu vermek ve sonuçları hemen işlemeyen kilit tutan ve sunucunuzda eşzamanlılık azaltma.

Sorguda çıkış varsayın, satır gerektiren sonuç doldurmak için iki sayfa olarak ayarlayın. SQL Server ayrıştırdığında derler ve sorguyu çalıştırır. Bunun anlamı, paylaşılan kilitler, sorgunuzu karşılamak için gerekli olan satırları içeren iki sayfa olarak yerleştirilir. Ayrıca, tüm satır, bir SQL Server TDS paket sığmayacak varsayalım, sunucu istemci ile iletişim kurar (yöntemi). TDS paketleri doldurmuştur ve istemciye gönderilir. Ilk sayfa'den tüm satırlar üzerinde TDS paket sığıyorsa, SQL Server o sayfadaki paylaşılan kilidi b?rak?r, ancak ikinci sayfasında paylaşılan bir kilit bırakır. SQL Server sonra (DBNEXTROW/DBRESULTS, SQLNextRow/SQLResults veya FetchLast/FetchFirst kullanarak bunu yapabilirsiniz) daha fazla veri istemek istemci bekler.

Bu, verilerin geri kalanını istemci istekleri kadar paylaşılan kilidi tutulduğu anlamına gelir. Ikinci sayfasından veri isteyen diğer işlemler tarafından engellenebilir.

Işlem günlüğü genişletme işlemi tamamlandıktan ve false 'Tam günlük' hata iletileri alıyorsunuz önce zaman aşımı sorgular

Yeterli disk alanı olmasına karşın bu durumda, hala "dışında alanı" hata iletisi alırsınız.

Bu durum, SQL Server 7.0 ve SQL Server 2000 için değişir.

Sorguda, işlem günlüğü neredeyse doluysa, otomatik olarak genişletmek işlem günlüğü neden olabilir. Bu ek zaman alabilir ve sorguda durdurulmuş olabilir veya bu nedenle, zaman aşımı süresini aşmış olabilir. SQL Server 7.0, bu durumda Hata 9002 döndürür. Bu sorun, SQL Server 2000 için geçerli değildir.

SQL Server 2000'de bir veritabanı için açık Otomatik küçültme seçeneğiniz varsa, bir çok küçük sırasında otomatik olarak genişletmek bir işlem günlüğü çalışır, ancak Otomatik küçülme işlevi aynı anda çalışmadığından bu edemiyor zamanı vardır. Bu hata 9002 yanlış örneklerini de neden olabilir.

Genellikle, işlem günlüğü dosyalarının otomatik olarak genişlemesini hızlı gerçekleşir. Ancak, aşağıdaki durumlarda, bu normalden daha uzun sürebilir:
  • Büyüme katları kadar küçüktür.
  • Sunucu için çeşitli nedenler daha yavaştır.
  • Disk sürücüleri, yeterince hızlı değildir.

Unreplicated hareketleri

Çoğaltması kullanılıyorsa, yayımcı veritabanının işlem günlük boyutunu genişletebilirsiniz. Hareketler çoğaltılır nesneleri etkileyen "İçin çoğaltma." ile işaretlenmiş Kaydedilmemiş hareketleri gibi bu hareketler Günlük Okuyucu görev hareketleri dağıtım veritabanına kopyalar ve bunları unmarks kadar denetim noktası sonra veya daha sonra işlem günlüğü geri silinmez. Bir günlük okuyucu görev sorun <a0></a0>, bu hareketler yayımcı veritabanındaki okumanızı engeller, işlem günlüğünün boyutunu olmayan yinelenen hareketlerin artar sayısı olarak genişletmek devam edebilirsiniz. Eski olmayan yinelenmiş hareketi tanımlamak için DBCC OPENTRAN Transact-SQL başvuru kullanabilirsiniz.

Unreplicated hareketleri ile ilgili sorunları giderme hakkında daha fazla bilgi için SQL Server Books Online'da "sp_replcounters" ve "sp_repldone" konularına bakın.

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
306769  (http://support.microsoft.com/kb/306769/ ) Düzeltme: Anlık yayımlanan veritabanının işlem günlüğü kesildi
240039  (http://support.microsoft.com/kb/240039/ ) Düzeltme: Çoğaltma bilgilerini DBCC OPENTRAN bildirmiyor
198514  (http://support.microsoft.com/kb/198514/ ) Düzeltme: Yeni bir sunucuya geri yükleme günlüğünde kalmasını hareketleri neden olur.

Daha fazla bilgi

Herhangi bir veritabanı işlem günlüğünün, günlük genişlediğinde, SQL Server dahili olarak belirler, boyutu toplam boyutu ve günlük dosyasının büyüme artışı kullanımda dayalı sanal günlük dosyaları (VLFs) kümesi olarak yönetilir. Bir günlüğü, her zaman tüm VLFs birimlerinde genişletir ve yalnızca bir VLF sınırına sıkıştırabilirsiniz. Bir VLF üç durumdan birinde bulunabilir: ACTIVE KURTARıLABILIR ve REUSABLE.
  • ACTIVE: günlüğü etkin bölümü etkin olarak (kaydedilmemiş) bir hareketi) temsil eden en az bir günlük sırası numara (LSN) başlar. Günlük etkin bölümü, en son yazılan LSN ' sona erdirir. Etkin günlük herhangi bir bölümünü içeren herhangi bir VLFs kabul etkin VLFs. (kullanılmayan alanı fiziksel günlüğe herhangi VLF bir parçası değildir.)
  • KURTARıLABILIR: eski etkin hareket önündeki günlük bölümü yalnızca kurtarma amacıyla günlüğü yedekleri bir dizi gerekli değildir.
  • REUSABLE: işlem günlüğü yedekleri korumak, veya SQL Server, günlüğü yedeklediyseniz, önce en eski etkin hareket VLFs kullanır.
SQL Server fiziksel günlük dosyasının sonuna ulaştığında, bu alanda fiziksel dosyayı bir CIRCLING GERI göndererek yeniden başladıktan dosyalarının başına işlem. Gerçekte, SQL Server günlük dosyasındaki artık kurtarma veya yedekleme amacıyla gerekli olan alan geri dönüştürür. Günlük yedekleme sırası tutulmaktaysa, yedeklemek veya günlük kayıtları kesecek kadar en az önce günlük parçası LSN üzerine olamaz. SQL Server, günlük yedeklemenin gerçekleştirdikten sonra dosyanın başlangıcına geri daire. SQL Server'ı yeniden daireler sonra günlüğü yazmaya başlamadan önceki günlük dosyasındaki kayıtları için günlük yeniden bölümü sonra günlüğü etkin bölümü ve mantıksal günlük sonuna arasında.

Ek bilgi için SQL Server Books Online'da "İşlem günlüğü fiziksel Architecture" konusuna bakın. Ayrıca, bir mükemmel diyagramı ve bu (Soukup, Ron. tartışma sayfasında 190 "Inside SQL Server 7.0" görebilirsiniz Iç Microsoft SQL Server 7.0, Microsoft Press, 1999) ve ayrıca, "Inside SQL Server 2000" 186 aracılığıyla 182 (Delaney, Kalen. sayfaları Iç Microsoft SQL Server 2000, Microsoft Press, 2000). SQL Server 7.0 ve SQL Server 2000 veritabanı otomatik büyüme ve autoshrink seçenekleri vardır. Bu seçenekler, sıkıştırma veya işlem günlüğünüzü genişletmek amacıyla kullanabilirsiniz.

Bu seçenekler, sunucunuzun nasıl etkileyebileceği hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
315512  (http://support.microsoft.com/kb/315512/ ) SQL Server'da otomatik büyüme ve Autoshrink yapılandırma ile ilgili konuları
Işlem günlük dosyasının sıkıştırması ve kesme arasında bir fark yoktur. SQL Server işlem günlük dosyası bir tamsayıya yuvarlar, (örneğin, tamamlanmış hareketler), bir dosyanın içeriğini yani silinir. Ancak, disk alanı açısından dosyasının boyutu (örneğin, Windows Gezgini'nde veya dir</a0> komutunu kullanarak) görüntülerken boyutu aynı kalır. Ancak, alanın içinde .ldf dosyasını şimdi yeni hareketler tarafından yeniden kullanılabilir. Yalnızca SQL Server, işlem günlüğü dosyasının boyutunu küçültür, gerçekte fiziksel günlük dosyası boyutunun değiştirilmesi görüyor musunuz.

Işlem günlüklerinin daraltmak hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
256650  (http://support.microsoft.com/kb/256650/ ) Nasıl yapılır: SQL Server 7.0 işlem günlüğünü daraltma
272318  (http://support.microsoft.com/kb/272318/ ) SQL Server 2000'de DBCC SHRINKFILE ile işlem günlüğünü daraltma (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir.)
SQL Server 6.5 hareket günlüğü kullanımı hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
110139  (http://support.microsoft.com/kb/110139/ ) SQL işlem günlüğünün doldurmayı nedenleri

Nasıl yapılır: SQL Server 2005'te günlük alanı büyük miktarda kullanan sorguları bulun.

SQL Server 2005'te sys.dm_tran_database_transactions dinamik bir yönetim görünümü (DMV), büyük miktarlarda günlük alanı kullanan sorguları bulmak için kullanabilirsiniz. The sys.dm_tran_database_transactions aşağıdaki sütunlarda DMV yararlı olabilir:
  • database_transaction_log_bytes_used
  • database_transaction_log_bytes_used_system
  • database_transaction_log_bytes_reserved
  • database_transaction_log_bytes_reserved_system
  • database_transaction_log_record_count
Günlük alanı büyük miktarda tüketir gerçek deyimi metni edinme DMV sys.dm_exec_requests sql_handle sütun sorgulayabilirsiniz. DMV sys.dm_tran_database_transactions ve transaction_id sütunda DMV sys.dm_tran_session_transactions ve sonra ek bir birleşim ile sys.dm_exec_requests session_id sütunu ekleyerek yapabilirsiniz.

DMV sys.dm_tran_database_transactions hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/ms186957.aspx (http://msdn2.microsoft.com/en-us/library/ms186957.aspx)
DMV sys.dm_tran_session_transactions hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/ms188739.aspx (http://msdn2.microsoft.com/en-us/library/ms188739.aspx)
DMV sys.dm_exec_requests hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/ms177648.aspx (http://msdn2.microsoft.com/en-us/library/ms177648.aspx)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Anahtar Kelimeler: 
kbmt kbinfo KB317375 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:317375  (http://support.microsoft.com/kb/317375/en-us/ )