SQL Server Dondurulmuş Hayalet Temizleme geçici çözümü gerekiyor


15

5M ile 1.5G arasındaki satır sayısı ile birkaç tablo var

Her tablonun boyutu 100 bayt ile 30 MByte arasında değişen ve 'sıra dışı büyük değer türleri' olarak depolanan BLOB alanına sahiptir = AÇIK

Tablolar, her biri farklı diskte 3-4 dosya ile farklı dosya gruplarında saklanır.

Her gün bu masalar 5-100 Gb boyutunda ve 600k - 1.5M satırlarla büyüyor

2 haftadan 6 aya kadar değişen belirli bir süreden sonra , bazı satırlar silinir veya DB arşivine taşınır, bu nedenle - 6 aydan daha eski çalışma masalarında hiç satır yoktur.

Sunucunun geçerli yapılandırması:

  • SQL sunucu motoru 2008 R2 SP1 Enterprise @ 24 çekirdek, @ 64Gb RAM
  • SQL Server ekstra başlangıç ​​bayrakları ile çalışır:

-T 3640; (Saklı yordamdaki her ifade için istemciye DONE_IN_PROC iletileri göndermeyi ortadan kaldırır. Bu, SET NOCOUNT ON oturum ayarına benzer, ancak izleme bayrağı olarak ayarlandığında, her istemci oturumu bu şekilde işlenir)

-T 1118; (tempDB cinsinden ayırmaları bir seferde 1pg'den (ilk 8 sayfa için) bir dereceye kadar değiştirir.)

-T 2301; (Karar destek sorgularına özgü gelişmiş optimizasyonları etkinleştirir. Bu seçenek, büyük veri kümelerinin karar desteği işlenmesi için geçerlidir)

-T 1117; (Tüm veri dosyalarını bir kerede büyütür, aksi halde sırayla gider.)

-E; (Bir dosya grubundaki her dosya için ayrılan uzantı sayısını artırır. Bu seçenek, sınırlı sayıda kullanıcı dizin veya veri taraması çalıştıran veri ambarı uygulamaları için yararlı olabilir)

-T 834; (SQL Server'ın, http://msdn2.microsoft.com/en-us/library/aa366720.aspx , http://support.microsoft tampon havuzu için ayrılan bellek için Windows büyük sayfa ayırmalarını kullanmasına neden olur . com.tr / kb / 920093 )

  • SQL Server Büyük Sayfa Uzantıları kullanır
  • SQL Server hızlı dosya başlatma seçeneğini kullanır
  • AUTOSHRINK tüm veritabanları için KAPALI

Sorun şu ki, sunucunun çalışma süresinden (birkaç gün ila aylar arası) bir GHOST CLEANUPsüreçten başlayarak zorla yapılan temizlemeleri yapmayı reddediyor ve sadece normal işini yapıyor - birkaç saniye içinde birkaç sayfayı temizliyor ( which is seen thru Extended Events) , çünkü bu uygun değil , çünkü silinmiş tüm satırları temizleyemez

SQL Server 2005 RTM Enterprise zamanından beri sorun devam ediyor

Sorunu çözmeye nasıl çalıştım:

  • Tabloların kümelenmiş dizinlerinde SCAN işlemlerini zorlamaya çalıştı
  • Tabloların kümelenmiş dizinlerinde BLOB sütununun tüm içeriğini içeren SCAN işlemlerini zorlamaya çalıştı
  • sistem sp_clean_db_free_space & sp_clean_db_file_free_space
  • DB'deki tüm dosyalar ve sayfalar için manuel olarak dbcc cleanpage (@dbid, @fileid, @page)
  • kümelenmiş dizin yeniden oluşturma ve yeniden düzenleme
  • veritabanı yeniden oluşturma
  • DBCC KUVVET HASTALIKLARI

  • Sorguyu çalıştırdığımda:

    select * 
    from sys.dm_db_index_physical_stats(db_id(), object_id('ProblemTable'), 1, 0, 'detailed')

    Milyonlarca ve on milyonlarca hayalet kaydı görüyorum, ancak yalnızca LOB_DATA ayırma birimi türü için

Yardımcı olan tek şey:

  • sunucuyu SHUTDOWN komutuyla durdurma veya tüm ana bilgisayarı yeniden başlatma - GHOST CLEANUP işlemini yeniden başlattıktan sonra birkaç saat çalışır ve aslında tüm hayalet kayıtları temizler
  • EMPTYFILE seçeneğiyle DBCC SHRINKFILE - tüm verileri bir dosyadan diğer veya yeni oluşturulan dosyalara taşımak sadece bu dosyadaki hayalet kayıtlarını temizler - sorun gerçekten küçültme işlemlerinden nefret etmem. Ve bu ONE dosyası için 3-4 gün sürer

soru - sunucu kesinti olmadan GHOST CLEANUP'u zorlamak için herhangi bir programlı (tercih edilebilir) veya bakım yolu var mı, çünkü sunucu kesinti süresi çok fazla, kabul edilemez bile - maliyeti - binlerce ila on binlerce dolar / saat

Benimki gibi problemler fark edildi:

Ve aynısı burada:

Yanıtlar:


12

Son olarak, MS sorunu bir hata olarak tanıdı: http://support.microsoft.com/kb/2622823

Kısaca: Sabittir

  • Sql Server 2008 SP3 CU4
  • Sql Server 2008 R2 CU10
  • Sql Server 2008 R2 SP1 CU4

Sql Server 2012 SP1'de yıldan fazla çalışma süresi sorunu yaşamıyorum.


3

Sorunu sizinle birlikte çalıştırabilmeleri için CSS'ye gitmesi gereken bir soru budur. Muhtemelen yazılım güvenceniz ve bir destek sözleşmeniz var. Eğer birkaç yüz dolar yoksa, örneğin yeniden başlatılması size saatte binlerce dolara mal olursa, bu kadar büyük bir anlaşma olmamalıdır.

Veritabanının kapanmasına ve daha sonra çevrimiçi hale getirilmesine izin vermeyi denediniz mi? Bu, kilitlenme kurtarmanın çalışmasına neden olur ve hayalet temizliğini tekmeleyebilir.

Sık sık masaya mı yazıyorsunuz? Sık sık demek istediğim sürekli?

MSKB 932115'e gelince, hayalet kayıtlarının yalnızca tüm dosyalarda kaldığını mı görüyorsunuz yoksa dosya grubundaki ilk dosyayı mı temizliyor?

Neden -T1117 ve anlık dosya init kullanımı?


1. Kesinlikle MS desteğine gideceğim. 2. DB kapatırsam yaklaşık 10-30 dakika ileri geri ileri geri yükseltir, bu kabul edilemez. 3. GC IS çalışıyor, ancak silinen satır dışı LOB girişlerini işlemiyor. 4. Saniyede 20 ila 600 yazma ve sürekli olarak günün saatine bağlı olarak sürekli performans gösteren tablolara yazma. 5. DB'nin ilk dosyası kullanımda değil - büyük tablolar içermiyor ve sadece sistem depolama alanı olarak kullanılıyor, bu nedenle - herhangi bir hayalet kaydı yok.
Oleg Dok

-T1117 ile tüm yükü birkaç dosya arasında yaymak istiyorum, bunun yerine hala boş alanın bulunduğu dosya grubundan sadece bir dosya olduğunda - PFS'nin LATCH'larında yavaşlamaya başlar, anlık dosya başlatma dosya büyümesini en aza indirir, çünkü tur başına bir artış 10-50 Gb olarak ayarlanır. Dosyaları olabildiğince ayarlayamıyorum, çünkü bu tamamen tahmin edilemez - hangi dosyaların verilerini bugün ve hangi hacimde alacağını. SAN yöneticilerinden daha fazla alan eklemelerini istemek daha kolaydır, kime alan ekleyeceğimi tahmin etmekten daha kolaydır.
Oleg Dok
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.