Share via


Decimal veri değişken uzunluk depolama

The decimal and numeric data types are typically stored on the disk as fixed-length data.The numeric data type is functionally equivalent to the decimal data type.Içinde SQL Server 2005 hizmet Pack 2 (SP2) ve sonraki sürümlerinde decimal ve numeric veri türleri, vardecimal depolama biçimi kullanarak, değişken uzunlukta sütun olarak depolanabilir. Vardecimal depolama biçimi, yalnızca kullanılabilir SQL Server Enterprise Developer ve değerlendirme sürümleri.

Not

This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Bunun yerine, SATıR ve SAYFA sıkıştırmasını kullanın.Daha fazla bilgi için bkz:Sıkıştırılmış tablolar ve dizinler oluşturma.

Not

Vardecimal bir depolama, bir veri türü biçimidir.

Vardecimal depolama biçimi, veri depolama boyutunu önemli ölçüde azaltabilir, ancak küçük bir miktar CPU yükü ekleme.Tabloya uygulanan vardecimal depolama biçimi düzey.Bu, bazı depolayamıyor anlamına gelir: decimal vardecimal depolama biçimi ve diğer sütunlar tablo sütunlarından. The decimal data remains an exact data type.

Vardecimal depolama biçimi üzerinde etkinleştirildiğinde bir tablo, decimal Veri, dizin ve sayfaları vardecimal depolama biçimi günlük verileri depolanır. Depolama biçimi değiştirme çevrimdışı bir işlemdir.Değiştirilmiş tablo, özel işlem süresince kilitli ve eşzamanlı okuma veya yazma erişimi için kullanılamaz.

Uygulama Vardecimal depolama biçimi

Sütun (1 için 38), depolama'nın duyarlığını bağlı bir decimal değer 5 ve 17 bayt arasında tüketir. Tablo vardecimal depolama biçimini kullanarak, tablosundaki her girdi için her bir satır değeri 0, NULL, veya bazı değeri bile, ondalık sütun tanımlanan aynı bayt sayısı tüketir bayt 3 numarası gibi daha küçük bir sayı, ifade.Bir tablo vardecimal depolama biçimde depolandığında decimal Her satır, sütun, sağlanan numarası ek yük 2 bayt içeren için gereken alan kullanır. Sonucu her zaman 5 ile 20 arasında bayttır.Bu, yük, mahsup hesabı'değerine depolamak için bir 2 bayt içerir.Ancak, null değerleri ve sıfır özel olarak değerlendirilir ve yalnızca 2 bayt gerçekleştirin.

Tablo, değişken uzunlukta sütun yoksa, değişken uzunlukta sütun saklamak için bir satır başına 2 bayt için ek bir ek yük vardır.tablo Zaten en az bir değişken uzunlukta sütun, sahip yok bir ek yük vardır.

Aşağıdaki tablo vardecimal depolama biçiminde ondalık veri saklamak için gerekli olan bayt sayısı ve normal biçimde Sabit ondalık veri saklamak için gerekli olan bayt sayısını gösterir.Listelenen değeri, bir tablo sabit bir biçimde depolandığında, her satır için kullanılır.Çeşitli değerler tablosu vardecimal depolama biçimde depolandığında, listelenen bayt sayısından daha az gerektirir.

Sütun duyarlığını

Ondalık boyutu (bayt) özgün sabit

En fazla vardecimal veri alanı (bayt)

Uzaklık (bayt) depolamak için genel gideri

Kullanılan en fazla vardecimal depolama (bayt)

1-3

5

3

2

5

4-6

5

4

2

6

7-9

5

5

2

7

10-12

9

6

2

8

13-15

9

8

2

10

16-18

9

9

2

11

19

9

10

2

12

20-21

13

10

2

12

22-24

13

11

2

13

25-27

13

13

2

15

28

13

14

2

16

29-30

17

14

2

16

31-33

17

15

2

17

34-36

17

16

2

18

37-38

17

18

2

20

Vardecimal depolama biçimi kullanma

Aşağıdaki sorunları çözümlemeye çalışırken vardecimal depolama biçimi kullanabilirsiniz:

  • Disk alanı yetersizliğinden yoktur.

  • Disk erişimini (g/Ç) sistem performansı üzerindeki performans sorunu var.

  • Değerleri çok küçük, NULL veya 0 olmasına karşın, duyarlık yüksek düzeyde verilerin bazıları olmalıdır (bir tablo ile veri ambarı gibi bir decimal 0 ya da tamsayı değerler içeren birçok satır içeren sütun).

Tablo depolama biçimini değiştirme, depolama tablonun (kümelenmiş dizin veya öbek) yeniden oluşturulması gerekir.Kümelenmiş dizin bir tablo içeriyorsa, bir decimal sütun, kümelenmiş anahtar değerlerinin içerdiği için tüm kümelenmemiş dizin de yeniden oluşturulması gerekir. Kümelenmiş dizin yoksa, bir decimal sütun, kümelenmemiş dizin yeniden oluşturulur, içerdikleri, bir decimal sütun. tablo Yığın olur (diğer bir deyişle, kümelenmiş dizin), tüm kümelenmemiş dizin öbek yeni satır konumlarda gösterecek şekilde yeniden oluşturulması gerekir.

Bir tablo, etkinleştirmek veya vardecimal depolama biçimi devre dışı bırakmak için yeniden oluşturma özgün tabloyu çift toplam depolama alanı birden fazla gerektirebilirsiniz.Tablo içermiyorsa decimal veya numeric sütunları, etkinleştirme vardecimal depolama biçimi, yalnızca bir meta veriler işlemi olur. Tablo ve dizinleri yeniden açtığınızda, çok sayıda günlük etkinliği bekler.

Vardecimal depolama biçimi yalnızca her iki okumak üzere kullanılan ve tablolarda okuma/yazma.Depolama tasarruf depolama biçimi satırları eriþilir, her saat dönüştürmek gerekli olan ek CPU kullanımı karşı dengelenmelidir.Ayrıca, yazarken bir tablo yani vardecimal kullanarak daha yüksek bir sayfa bölmeleri sayısı nedeniyle depolama biçimi performansı düşürebilir.

Sınırlamalar Vardecimal depolama biçimi

Aşağıdaki kısıtlamalar geçerlidir:

  • Gerektirir SQL Server 2005 SP2 veya sonraki sürümleri.

  • Depolama biçimi Vardecimal sistem veritabanlarında yeniden etkinleştirilemez: Master model, msdb, tempdb veya dağıtım. Vardecimal depolama biçiminde depolanan verilerde sorgu sıralar, bu verileri Sabit ondalık durumda tempdb içinde sıralanmıştır.Genellikle, veriler kaynak veritabanındaki vardecimal depolama biçimi kaynak tablo tarafından kullanılan alanı tempdb önemli ölçüde daha fazla alan gerektirir.

  • Vardecimal depolama biçimi, görünümler için uygulanamaz, görünüm, XML dizinler ve tam metin dizinleriyle dizine.Ancak, bu nesneleri underlie tabloları vardecimal depolama biçimi kullanabilirsiniz.

  • Meta veriler gibi iç tablolar ve bildirim tablolar vardecimal depolama biçimi kullanamazsınız.

  • Tablo değerli işlevler vardecimal depolama biçimi kullanamazsınız.

  • The numeric sütun that is stored in a vardecimal storage format tablo cannot also be encrypted.

  • Türdeş olmayan bölümleri (yani, Sabit ondalık biçimi ve vardecimal depolama biçimi bölümleri) desteklenmez.

  • Yeni tablo vardecimal depolama biçimden oluşturulan s tablo kullanarak Transact-SQL SELECT... INTO… sözdizimi vardecimal depolama biçimi değil devralır.

  • veritabanı yansıtması için etkinleştirilen veritabanlarının değiştirilen vardecimal depolama biçimi durumlarına bulunamaz.Sonra silmelisiniz veritabanı yansıtması vardecimal depolama biçimi, veritabanı'nı etkinleştirmek için.Ancak, veritabanı tek tek tabloların etkinleştirilmiş veya vardecimal depolama biçimi için devre dışı bırakılmış, yansıtma kaldırma gerekmez.

  • SQL Server tüm güncelleştirmelerin başarısız olur ve tablonun her zaman Sabit ondalık biçimine verilmesi garanti çalıştırabilmesi gerekir.Bu nedenle, ek yükü varolan bir satır, 8060 baytı veya varolan bir dizin değeri 900 baytı aşamaz için aşmasına neden olursa bir tablo için vardecimal depolama biçimi değiştirilemez.

    Not

    Vardecimal storage format differs from variable text (varchar) storage in that SQL Server lets you create a row that could exceed 8060 bytes if all variable columns are at the maximum size.SQL Server enforces the 8060-byte limit when text data is inserted or updated.SQL Server does not let you create a set of decimal columns that could ever exceed the 8060 byte limit for a row.Tablo biçimi vardecimal depolama birimine değiştirildiğinde 8060 baytlık sınırı zorlanır.

  • Kopyala Veritabanı Sihirbazı'nın detach ve bağlama yöntem kullanarak bir veritabanını aktardığınız, bağlama işlemi başarısız olur hedef Database Engine is not SQL Server 2005 SP2 veya sonraki sürümü. The SQL Server Management Objects yöntem will create the new database and tables without using the vardecimal storage format. Veritabanı ve tablo vardecimal biçimine Transferden sonra değiştirilebilir Database Engine olan SQL Server 2005 SP2 veya sonraki sürümü.

yedek ve Kurtarmaveritabanı yansıtması, sp_attach_db ve günlük sevkiyat

yedek ve Kurtarmaveritabanı yansıtması sp_attach_db ve günlük aktarma vardecimal depolama biçimi ile düzgün; ancak, dahil etmek için vardecimal depolama kullanarak bir veritabanı biçimi, her örnek SQL Server için en az yükseltilmesi gerekiyor SQL Server 2005 SP2. Örneğin, bir günlük geri yükleme yükleyemiyor yedek vardecimal depolama biçimi için etkin bir veritabanı için etkinleştirilmiş bir veritabanını veya etkinleştirilmemişse, gelen vardecimal depolama biçimi etkin için etkinleştirilmiş bir veritabanını iliştirin veya bir veritabanına vardecimal depolama biçimi için etkinleştirilmiş bir veritabanını yansıtmadan SQL Server 2005 Önceki bir sürümüne SP2 SQL Server. geri yükleme, bir tam yedek vardecimal depolama biçimini etkin hale vardecimal depolama biçimi için etkinleştirilmiş bir veritabanına vardecimal depolama biçimi için etkinleştirilmiş bir veritabanını, veritabanı.

Tablo vardecimal depolama biçimine dönüştürüldüğünde, yedek günlük zincirdeki geçerli kalır ve veritabanını yedekten son artı geçerli günlük zinciri uygulayarak geri yüklenebilir.Önlemek için geçerli olmayan yedek oluşturmak, veritabanı için basit değiştirmelisiniz kurtarma modeli vardecimal depolama biçimi kaldırmak için herhangi bir tabloyu değiştirmek için önce.Tüm vardecimal depolama biçimini kaldırdıktan sonra tablo, tam veritabanı yedeği oluşturmalısınız.

veritabanı yansıtması ile Vardecimal depolama biçimi kullanma

Aşağıdaki yordamlarveritabanı yansıtması ile vardecimal depolama biçimi kullanmak için adımlar sağlar.

veritabanı yansıtması ile vardecimal depolama biçimi kullanmak için

  1. Patron hem de yansıtmayı ortak örneği en az getirmek SQL Server 2005 SP2.

  2. Şu anda veritabanı yansıtması,'nı kullanarak veritabanı yansıtması kaldırın ve yansıtma ortağı silmek.Daha fazla bilgi için bkz:Nasıl Yapılır: Kaldırma veritabanı yansıtması (Transact-SQL).

  3. Depolama biçimi vardecimal etkinleştirmeden asıl veritabanı (veritabanı açıksa SQL Server 2005) ve emin asıl veritabanı tam kurtarma modelidir.

  4. Tam'ı kullanarak veritabanı yansıtması oluşturmak ve yedekleri asıl veritabanı oturum.Daha fazla bilgi için bkz:Nasıl Yapılır: Windows kimlik doğrulaması (Transact-SQL) kullanarak oturum yansıtma bir veritabanı oluşturmak.

  5. Tek tek tabloların, vardecimal saklama biçimi kullanan değiştirin.

Not

Veritabanı tek tek tabloların, Depolama biçimini değiştirmek için yansıtma kaldırmak zorunda değildir.

Vardecimal depolama biçimi kaldırmak için

  1. Tablolarda değişiklik asıl veritabanı vardecimal depolama biçimi kaldırmak için.

  2. veritabanı yansıtması kaldırın.

  3. asıl veritabanı, Basit kurtarma moduna küme.Bu günlük zinciri keser.

  4. Veritabanı açıksa SQL Server 2005, vardecimal depolama biçimi üzerinde devre dışı asıl veritabanı.

  5. Yansıtmayı ortak veritabanındaki bırakın.

  6. Asıl veritabanının Tam kurtarma moduna değiştirebilirsiniz.

  7. asıl veritabanı yedeklemek ve veritabanı yansıtması yeniden kurmak.

Çoğaltma işlemi etkilerini Vardecimal depolama biçimi

Çoğaltma, tablolarda vardecimal saklama biçimi kullanan, ancak aşağıdaki önemli noktalar her zamanki gibi çalışır:

  • decimal vardecimal depolama biçiminde depolanan veri türleri, çoğaltma sırasında aktarımının Sabit ondalık biçime dönüştürülür.dağıtım veritabanı vardecimal depolama biçimi için etkin duruma getirilemez.Bu nedenle Dağıtım veritabanında çoğaltma tablolarındaki depolandığında veri vardecimal depolama biçiminde saklanmaz.Günlük kayıtlarının sırasında abone, normalde uygulanır.

  • Sabit ondalık biçiminde tabloya vardecimal depolama biçimi tablo yinelenmiş ve Sabit ondalık biçim tablosu vardecimal depolama biçimi tabloya çoğaltılabilir.

  • Tablo oluşturma işlemi için yeni bir abonelik ilgili vardecimal saklama biçimi kullanan bir tablo oluşturun.Bu, hizmet paketi düzey ne olursa olsun başarılı olması çoğaltma sağlar Database Engine, veya abone veritabanı vardecimal depolama biçimi, etkin durumu. Abone tablo vardecimal depolama biçimi sonra abone en etkin tablo oluşturulur veya uygulanmadan önce oluşturma komut dosyaları ile değiştirme.

Aşağıdaki tablo çeşitli aboneleri için komut dosyası gereksinimleri açıklanır.

Abone

Komut dosyası

SQL Server 2000 veya SQL Server sürüm 7.0

Tablo oluşturma komut dosyaları, hiçbir değişikliğe gerek olmadan kullanılabilir.

SQL Server 2005, veritabanı vardecimal depolama biçimi için işaretlendi.

Tablo oluşturma komut dosyaları, hiçbir değişikliğe gerek olmadan kullanılabilir.

SQL Server 2005, veritabanı vardecimal depolama biçimi olarak işaretlenmiş ancak bir abone istediğiniz tablo etkin vardecimal depolama biçimi için.

Tablo oluşturma komut dosyaları, hiçbir değişikliğe gerek olmadan kullanılabilir.

SQL Server 2005, istediğiniz ve veritabanı vardecimal depolama biçimi olarak işaretleniyor SQL Server 2005 Etkin vardecimal depolama biçimi için abone tablosudur.

Tablo oluşturma komut dosyaları, veritabanındaki vardecimal depolama biçimi etkinleştirmek ve tabloların vardecimal depolama biçimi etkinleştirmek için değiştirilebilir.Veya, abone veritabanı ve tablo "Etkinleştirme Vardecimal depolama izleyen biçimi" bölümünde açıklanan saklı yordamlar kullanılarak etkinleştirilebilir.

Ek konuları

Vardecimal depolama biçimi çalışırken, akılda tutulması gereken ek konuları listesi aşağıdadır:

  • Hiçbir etkisi toplu alma ve verme (vardecimal depolama biçimi varKullanımıbcp) operasyonlar.

  • VERIUZUNLUĞU işlev vardecimal depolama biçimi algılamaz ve Sabit ondalık biçiminde depolanan bayt sayısını verir.

  • Nadir durumlarda vardecimal depolama biçimi engeller SQL Server ondalık veri sabit için en uygun olan bir sorgu planı kullanarak.

  • Vardecimal depolama biçimi, herhangi bir veritabanı uyumluluk düzey ile kullanılabilir.

  • Bir tablo, sütun varsa, decimal veya numeric veri ne zaman türü sp_tableoption gerçekleştirildiğinde, tabloyu, vardecimal saklama biçimi kullanan belirtmek için tablo meta veriler değiştirilir. Yeni zaman decimal sütunlar, daha sonra vardecimal depolama biçiminde depolanacak eklenir. Hiçbir özel teknikleri eklemek veya sütunlarından kaldırmak için gerekli olan bir tablo vardecimal saklama biçimi kullanan.

Vardecimal depolama biçimini etkinleştirme

Etkinleştirmek veya vardecimal değiştirmek için depolama biçimi, aşağıdaki izinleri gerektirir:

  • Vardecimal etkinleştirmek için sunucuda ALTER DATABASE veritabanında saklama biçimi gerektirir.

  • Bir tablo için vardecimal değiştirmek için ALTER iznine tablosundaki depolama biçimini gerektirir.

Vardecimal depolama biçimi etkinleştirmeden önce ilk, doğrulamalısınız tablo vardecimal depolama biçimi etkinleştirildiğinde küçülür.Çoğu satır için tanımlanmış bir sütun duyarlığını zaman vardecimal depolama biçimi ile ilişkili ek yükü tasarrufu birden fazla olabilir ve bir büyük neden tablo.Tablo değiştirmeden önce satır boyutunu azaltma tahmin etmek için , kullanan sp_estimated_rowsize_reduction_for_vardecimal saklı yordamını.If you decide to change the storage format of the table, enable the database for vardecimal storage format, and then enable individual tables for the vardecimal storage format.SQL Server 2008 databases do not have to be enabled for the vardecimal storage format.

' De bir SQL Server 2008 Veritabanı, depolama biçimini vardecimal etkinleştirebilirsiniz. decimal saklı yordamları'ı kullanarak, veri türleri veya SQL Server Management Studio:

  • Çalışma sp_db_vardecimal_storage_format veritabanındaki vardecimal depolama biçimi etkinleştirmek için (ise örnekSQL Server olan SQL Server 2005SP 2) ve çalıştırın sp_tableoptionuygun tablolardaki vardecimal depolama biçimi etkinleştirmek için.

  • Içinde Management Studio, kullanın Veritabanı özellikleri ve Seçenekleri sayfa veritabanındaki vardecimal depolama biçimi etkinleştirmek için.Kullanmanız gerekir sp_tableoption bir vardecimal depolama biçime değiştirmek için.

Not

Yandakiyle başlayan SQL Server 2008, tüm veritabanlarının vardecimal depolama biçimi için etkinleştirilir.

Biçim tabloları Vardecimal depolama tanımlama

Veritabanındaki tabloları vardecimal saklama biçimi kullanan belirlemek için , OBJECTPROPERTY işlev ve TableHasVarDecimalStorageFormat özellik için arama'yı kullanın.

The following example returns 1 if the Production.WorkOrderRouting tablo uses the vardecimal storage format, and 0 if it does not.

USE AdventureWorks ;
GO
SELECT OBJECTPROPERTY(OBJECT_ID('Production.WorkOrderRouting'), 
   'TableHasVarDecimalStorageFormat') ;
GO

Aşağıdaki örnek aramaları AdventureWorks vardecimal saklama biçimi kullanan tüm tablolar için veritabanı.

USE AdventureWorks ;
GO
SELECT name, object_id, type_desc
FROM sys.objects 
 WHERE OBJECTPROPERTY(object_id, 
   N'TableHasVarDecimalStorageFormat') = 1 ;
GO

Sorunları Vardecimal depolama biçimini kaldırma

Tablodan vardecimal depolama biçimi kaldırmak için , tablo Sabit ondalık biçiminde yeniden oluşturulması gerekir.Bu tablo tarafından kullanılan disk alanını önemli ölçüde arttırabilir.Yeterli disk alanı yoksa, işlem başarısız olur.Bu durumda, vardecimal depolama biçimi devre dışı bırakmak için , yeterli disk alanı kullanılabilir olduğundan emin olmalısınız SQL Server. Genişletme işlemi de vardecimal ve normal biçimlendirme veri depolamak için geçici boş alan gerektirir.Genişletilmiş tablo kullanılabilir disk alanını sonra genişletme sığması, ancak yalnızca geçici disk alanı yetersizliği nedeniyle genişletmek başarısız unexpanded yeni bir tablo için tablonun satır kopyalayarak veri artırarak genişletebilirsiniz.

Hemen değiştirilmiş sonra vardecimal depolama biçimi, bir veritabanından kaldırmak için , veritabanını bırakın ve sonra veritabanını vardecimal depolama biçimi önce etkinleştirilmiş bir veritabanını, yapıldığı bir yedekten geri yükleme yükleyin.

Bir veritabanından, taşıdığınız bir SQL Server 2005 Önceki bir sürüm veya başka bir sürümüne Kurumsal, geliştirici veya deneme sürüm SQL Server, gerekir önce gerekli sürümleri birini kullanarak veritabanını açın, vardecimal depolama biçimi kaldırmak ve sonra veritabanı geçirilir. Geçersiz bir sunucuya vardecimal depolama biçimi içeren bir veritabanını iliştirmek başarısız olur.