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 CLEANUP
sü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: