Bu makalede, Microsoft SQL Server için bazı tabloların kullanılmayan alanı önemli ölçüde artırır bir senaryo açıklanır. Sonra makaleyi, bu soruna geçici bir çözüm bulmak için kullanabileceğiniz aşağıdaki iki yöntemden anlatılmaktadır:
Öbek tabloları, kümelenmiş dizinler kullanan tablolara dönüşür.
Açık nesneleri yapılandırma seçeneği, yüksek bir değere ayarlayın.
Bir SQL Server örneği bir ya da daha fazla kullanıcı veritabanı vardır.
Bu veritabanlarındaki tablolara toplam sayısı, bu bölümün sonundaki tabloda listelenen özel eşik değerinden büyük. Bu tablolar sistem tablosu, kullanıcı tablo ve geçici tablo içerir.
SQL örneğine bağlı olan uygulamaları Server bu tabloların çoğu başvuru.
Bu senaryoda, aşağıdaki belirtilerden görebilirsiniz:
Normal hızından daha hızlı bir hızda bu kullanıcı veritabanlarını kullanan alan büyüyor. Bu kullanıcı veritabanlarını Autogrowth ayarlarına bağlı veritabanı dosyaları, normal durumda ulaşması daha sık ulaşması.
Bu kullanıcı veritabanlarını kullanan alanının kullanılmayan bölümü, normal kullanılmayan bölümü daha büyük olacaktır.
Kümelenmiş dizin, yığın depolama yapısını ve metin görüntü ağaç gibi bu kullanıcının veritabanları için depolama yapıları özelliklerini görüntülediğinizde, çok sayıda kullanılmayan alanı görürsünüz.
Ayrılmış alan sysindexes tablosunda dizin girdileri için 8'in katları artar. Bununla birlikte, kullanılan alanı sysindexes tablosunda dizin girdileri için 1 veya 2 gibi yalnızca küçük bir sayı olarak artırır. Diğer bir deyişle, yeni bir kapsam içinde ayrılan her sekiz sayfa için yalnızca birkaç sayfa şimdiye kadar bu uzantı kullanılır.
Bu makalenin önceki bölümlerinde açıklanan eşik, aşağıdaki koşullara bağlı olarak değişir:
Kullanmakta olduğunuz SQL Server'ın belirli bir sürüm
SQL için yapılandırdığınız bellek Server
Aşağıdaki tabloda, bu eşikleri için SQL Server'ın farklı sürümleri listelenmektedir.
Bu tabloyu kapaBu tabloyu aç
Sürüm
<a1>Bellek</a1> (bayt)
Eşiği
Kuruluş/standart/Developer
Birden fazla 671,088,640
8192
Kuruluş/standart/Developer
' Den küçük 671,088,640
2048
Kuruluş/standart/Developer
' Den küçük 67,108,864
512
Kuruluş/standart/Developer
' Den küçük 8,388,608
128
Kişisel/MSDE
Uygulanamaz
128
Bellek, kullanmakta olduğunuz SQL Server örneği için <a1>en fazla sunucu belleği</a1> ayarına karşılık gelir. En fazla sunucu belleği ayarını yapılandırmak için sp_configure Sistem saklı yordamını kullanabilirsiniz.
Not SQL Server 2005'te kullanılan alan bilgileri ile rezerve edilmiş bilgi edinmek için sys.dm_db_partition_stats Katalog görünümü sorgulayabilirsiniz. SQL Server 2000'de, bu bilgileri edinmesi için sysindexes tablo sorgulayabilirsiniz.
SQL Server'ı iki tür önbelleğe alınmış bilgi için alan ayırma bellekte saklar: tahsisat önbellek ve boş alan önbellek. Tahsisat önbellek, belirli bir dizinin en son ayrılmış kapsamları için kapsam kimliği içerir. Boş alan önbellek bu uzantılardan tahsis son ayrılmış sayfa için sayfa numaralarını içerir. Ayrıca, sayfaları durumunu içerir. Bu önbelleklerinin boş duruma gelirse, "Belirtiler" bölümünde açıklanan sorunlar oluşur.
Aşağıdaki nedenler yüzünden bu önbelleklerinin boş olur:
Eşitlemeler arasındaki bellek içi meta veri bilgi ve bu bilgileri, disk üzerinde gerçekleştirmelisiniz farklı komutları çalıştırabilirsiniz. Örneğin, aşağıdaki komutlardan birini çalıştırın:
dbcc updateusage
İSTATİSTİKLERİ GÜNCELLEŞTİRME
Açık nesneleri seçeneği kullanılarak yapılandırılmış olan tüm nesne tanımlayıcıları kullanılır. Bu nedenle, yok bir boş tanımlayıcıları vardır.
Bu soruna geçici bir çözüm için aşağıdaki yöntemlerden birini kullanın:
Öbek tabloları, kümelenmiş dizinler kullanan tablolara dönüşür.
Açık nesneleri yapılandırma seçeneği, yüksek bir değere ayarlayın.
Bu yöntem, kullanılmayan bir tablo için ayrılan alan için büyüme oranı azaltabilirsiniz. Aşağıdaki bölümlerde, bu iki yöntem açıklanmaktadır. Bölümler, neden bu yöntemlerden bu makalede açıklanan sorunu gidermek de açıklanmaktadır.
Öbek tabloları kümelenmiş dizinler kullanan tablolara dönüşür...
Not Kümelenmiş dizinler kullanan tablolara öbek tabloları dönüştürdükten sonra düzenli olarak gereksiz yere kullanılmayan herhangi bir alana geri kazanmak için dizin bakım işlemleri gerçekleştirebilirsiniz. Örneğin, aşağıdaki komutları çalıştırabilirsiniz:
DBCC DBREINDEX
DBCC INDEXDEFRAG
aşağıdaki normal öbek tablodaki bir kayıt eklediğinizde, işlemler kümesidir:
Tabloya bir satır eklemek 1. deneyin.
2. Bu tablo, dizin kimliği 0 için boş alan önbelleği bakın.
3. Geçerli sayfalar boş alan önbelleğinde var olup olmadığını belirleyin.
4. Evet ise:
4. 1 '. Sayfa yeterli alan yoksa, sayfanın veri ekleyin.
5. Yüklenmemişse:
5.1. SQL Server yeni bir sayfa için bu satırı tahsisatı gerekir.
Bu tablo, dizin kimliği 0 tahsisat önbellek 5,2. bakın.
5.3. Geçerli kapsamlarını tahsisat önbelleğinde var olup olmadığını belirleyin.
5.4. Evet ise:
5.4.1. Kapsamı sekiz sayfaların hiçbirini bu yeni sayfa ayırma isteği için kullanılıp kullanılamayacağını belirler.
5.4.2. Evet ise:
5.4.2.1. Tahsis edilecek bir sayfadan bu uzantı zaten ayrılmış.
5.4.2.2. 5.5.5. Adıma gidin.
5.4.3. Yüklenmemişse:
5.4.3.1. 5.5.1. Adıma gidin.
5.5. Yüklenmemişse:
5.5.1. Veriyle genel tahsisat Haritası'nı (GAM) ve ikincil genel tahsisat Haritası (SGAM), tahsis edilecek yeni bir kapsam bulmak için kullanın.
5.5.2. Yeni bir kapsam ayrılamadı.
5.5.3. 5. 1. Adımdaki yeni sayfa ayırma isteğini yerine getirmek için bu yeni uzantı bir sayfa kullanın.
5.5.4. Tahsisat önbelleğinde, yeni ayrılan bu uzanım ile ilgili bilgileri doldurun.
5.5.5. <a1>Doldur</a1> Bu konuda bilgi yeni sayfa önbelleğinde boş alan ayırır.
Önbellekteki Ayırma ve boş alan önbelleği sonraki ekleme operasyonlar arasında boşsa, ekleme işlemlerinin başarılı olması, SQL Server yeni sayfalar yeni bir kapsam tahsis. Tablonun meta verileri bellekten kaldırıldığında, önbellekteki ayırma ve boş alan önbelleğini de kaldırılır. Bu nedenle tabloya başvuran bir ekleme işlemini gerçekleştirdiğiniz bir sonraki açışınızda bu önbelleklerinin boştur. Bu durumda, SQL Server gerekir adım 5 gerçekleştirin ve sonra da 5.5 adım. Bu davranış, yalnızca bir sayfa olarak kullanıldığında, sekiz sayfa tahsis göstermek son ayrılmış kapsamlarını neden olur. Tablo üzerinde gerçekleştirdiğiniz her ekleme işlemi için bir en kötü Durum senaryosunda, 56 kilobayt (KB) boş alan harcanan.
Tipik bir kümelenmiş dizini olan bir tabloya veri eklediğinizde, operasyon dizisi aşağıdadır.
Tablodaki bir satır eklemek 1. deneyin.
SQL Server kümeleme anahtarının depolamalısınız veri sayfası'nı bulmak için B-ağaç 2. çapraz geçiş yapma.
3. Yeterli alan sayfasında yeni bir satır için olup olmadığını.
4. Evet ise:
4.1. Verileri bu sayfaya yerleştirin.
5. Yüklenmemişse:
5.1. SQL Server yeni bir sayfa için bu satırı tahsisatı gerekir.
Bu tablo, dizin kimliği 1'için tahsisat önbellek 5,2. bakın.
5.3. Geçerli kapsamlarını tahsisat önbelleğinde var olup olmadığını belirleyin.
5.4. Evet ise:
5.4.1., Sekiz sayfalardan herhangi birindeki sürece bu yeni sayfa ayırma isteği için kullanıp kullanamayacağını belirler.
5.4.2. Evet ise:
5.4.2.1. Tahsis edilecek bir sayfadan bu uzantı zaten ayrılmış.
5.4.3. Yüklenmemişse:
5.4.3.1. 5.5.1. Adıma gidin.
5.5. Yüklenmemişse:
Veriyle GAM ve SGAM 5.5.1., tahsis edilecek yeni bir kapsam bulmak için kullanın.
5.5.2. Yeni bir kapsam ayrılamadı.
5.5.3. 5. 1. Adımdaki yeni sayfa ayırma isteğini yerine getirmek için bu uzanım bir sayfa kullanın.
5.5.4. Tahsisat önbelleğinde, yeni ayrılan bu uzanım ile ilgili bilgileri doldurun.
"Neden" bölümünde açıklanan nedeniyle önbellekteki ayırma ve boş alan önbellek temizlenir, bu tablonun sonraki ekleme işlemleri arasında yeni bir sayfa ayırmaya hemen gerek yoktur. Eklenen veriler, varolan sayfanın belirli bir küme tuşa fiziksel bulunmalı sığabilecek sürece, bu geçerlidir. Veri sayfası dolduğunda, önbelleklerinin boş ise, SQL Server gerekir 5. adımı gerçekleştirin ve sonra 5.5 adım. Kümelenmiş bir dizin'i kullanıyorsanız, bu makalede, gösteren, yeni sayfalar için tahsis edilen senaryosu öbek tablodaki bir kayıt burada eklenen senaryoya göre çok daha az sıklıkta oluşur.
Sorun oluşur ve Tahsisat önbellek ve boş alan önbellek boş olan iki durumlar şunlardır: Tablonun şema veri sayfasına sığacak şekilde 100 satır verdiğini varsayılır.
Tablonun yalnızca bir yığın depolama yapısını varsa, SQL Server her ekleme işlemi için yeni bir kapsam ayırma ve tek bir sayfa bu kapsamı kullanın.
Tablo, kümelenmiş bir dizin varsa, SQL Server her 100 ekleme işlemi için yeni bir kapsam ayırma ve tek bir sayfa bu kapsamı kullanın.
Açık nesneleri yapılandırma seçeneği yüksek bir değere ayarlayın.
Bu sorun, öncelikle belirtilen bellek alanındaki nesneleri açma seçeneği dayalı tüm yuvası SQL Server kullanması nedeniyle oluşur. Bu makalede açıklanan sorunla karşılaştığınızda, belirli SQL Server örneğinde başvurulan tablolar neredeyse tüm yerleştirmek için bu seçeneği değerini ayarlayabilirsiniz.
Bu sorunu engelleyen bir nesne açık seçenek değerini belirlemek için <a0></a0>, aşağıdaki adımları izleyin:
Belirli SQL Server örneğinde varolan tablolara toplam sayısını belirler.
Not Tablolar, kullanıcı tablo ve sistem tabloları içerir. Sistem veritabanlarından alınan tabloları dahil etmeniz gerekir.
Geçici tablolara ve farklı sorgular ve bu uygulamaları kullanan worktables yer sağlayan bir arabellek boyutu tahmin.
Arabellek sayısı SQL Server'ın bu örneğinin erişilen tablo belirlemek için kullanıcı tablosu ve sistem tabloları ekleyin. Açık nesneleri yapılandırma seçeneği ayarlamanız gerekir (değer) bu toplam sayısıdır.
Bellek tüketimi, SQL sırasında ön tahsis olduğundan sunucu başlamasından bu değeri temel alan, açık nesneleri yapılandırma seçeneği çok yüksek bir değere ayarlanmadı gerekir. Açık nesneleri seçeneği, çok yüksek bir değere ayarlarsanız, özgün olarak başka amaçlarla gibi ve veri arabellekleri, Sorgu yürütmesi için kullanılan bellek yerine seçeneği nesneleri açmak için <a1>bellek</a1> alanında Tablo meta verileri korumak için kullanılır.
Normal koşullarda açık nesneleri yapılandırmasını değiştirmeniz önerilmez. Bu makalede anlatılan sorunla karşılaştığınızdan emin değilseniz, yalnızca bu değeri değiştirin.
Açık nesneleri seçenek ayarları, bu soruna neden müşteri adayı
SQL Server nesnesine ilişkin bilgiler, belirli bir nesnenin (tablo) sorguya başvuruyor her belleğe yükler. Tüm dizini meta verileri SQL Server, belleğe yüklenmiş nesne bilgilere başvurular var. Bu makalede açıklanan tahsisat önbellekler, belirli bir dizin ile ilişkilendirilir. Açık nesneleri seçeneği belleğe yükleyebilir ve SQL Server örneği tanımlayıcılarının sayısını denetler.
SQL Server başladığında, bellek içi sürümünü nesne meta verilerini tutmak için belirli bir yuva veya tanımlayıcıları, SQL Server atar. Ayrılmış bir yuva numarasını SQL Server sürümü ve SQL Server için yapılandırılmış bellek “ Belirtiler ” bölümünde anlatıldığı şekilde bağlıdır. Bu yuvalar, başlangıçta boş bir liste bir parçası olur. Belirli bir algoritma nesnesi meta verileri için boş listesinden yuvası atamak için kullanılır. Algoritma aşağıdaki iki çalışma modu vardır.
Mod 1
SQL Server'ı başlattıktan sonra yeni bir nesne başvuruda bulunulan her bellek tanımlayıcıları boş listeden birini kullanır. SQL Server, meta verileri, sorguda başvurulan bir nesne hakkında yüklendiğinde tüm varolan Yuvalar kullanmaya devam eder. Yine de yuva girişi olduğundan boş listesinde, SQL Server bu yuva kullanmaya devam eder. Varolan bir yuva için SQL Server başka bir nesne tarafından kullanılan bellek yeniden değil.
Mod 2
SQL Server, nesneyi yeni bir sorguda başvurulan ve boş liste boş duruma, varolan nesne, meta verilerini bellekten kaldırılan bir yuva olup olmadığını belirlemek için tüm nesnelerin listesini tarar. Sorguda, tablonun yalnızca başvuru olarak SQL Server yuvasına nesne meta verileri tutmalıdır. Sorgu bittiğinde, yeni bir sorgu farklı bir tabloya başvuruyorsa SQL Server yuvayı yeniden kullanabilirsiniz.
Nesne meta verilerini bellekten kaldırıldığında, tüm ilişkili dizin meta verilerini de kaldırılır. Bu davranış oluştuğunda, SQL Server da önbellekteki ayırma ve boş alan önbelleği kaybeder. Sonra farklı bir sorgu, bu tabloyu yeniden başvurduğunda, bu tahsisat önbelleklerinin boştur. Bu nedenle, SQL Server bir sayfa ayırmaya çalıştığında bir sonraki başlatılışında, SQL Server yeni bir kapsam ayırmaya çalışır.
SQL Server, SQL Server, herhangi bir yuva geri edemiyor kadar nesne meta verilerini içeren bir yuva geri kazanmak SQL Server devam ederse, boş listesinin boyutunu artırır.
Yapılandırma seçeneklerini değiştirmek için sp_configure depolanan yordamı kullanma hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
Ö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:924947
(http://support.microsoft.com/kb/924947/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.