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:
- http://support.microsoft.com/kb/932115
- http://www.sqlservercentral.com/Forums/Topic496244-149-1.aspx
Ve aynısı burada: