Share via


Değişken uzunlukta ondalık veri saklama

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.De SQL Server 2005 Service Pack 2 (SP2) ve sonraki sürümleri, decimal ve numeric veri türlerini kullanarak değişken uzunlukta sütun olarak saklanabilirvardecimal depolama biçimi. Vardecimal depolama biçimi yalnızca kullanılabilir SQL Server kuruluş, Developer ve değerlendirme sürümleri.

Not

Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın. SATIR ve sayfa sıkıştırması kullanın.Daha fazla bilgi için bkz: Sıkıştırılmış tablolar ve dizinler oluşturma.

Not

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

Vardecimal depolama biçimi veri depolama boyutunu önemli ölçüde azaltabilir, ancak cpu yükü az miktarda ekleyin.Vardecimal depolama biçimi sırasında uygulanan tablo düzeyi.Yani bazı depolayamaz decimal sütunları bir tablo vardecimal depolama biçimi ve değil diğer sütunlar.The decimal data remains an exact data type.

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

Vardecimal depolama biçimi uygulama

Sütun (1 için 38), depolama, precision bağlı bir decimal değeri tüketir arasında 5 ile 17 bayt.Bir tablo vardecimal depolama biçimi kullanarak, her bir satırın değerini null, 0'dır ve ya bazıları, değer bile ondalık sütun tanımlanan için tablosundaki her giriş aynı sayıda bayt tüketir daha az sayıda bayt ifade, 3 numarası gibi.Zaman bir tablo vardecimal depolama biçimi ' saklanan decimal her satırdaki sütunların yalnızca alan sağlanan numarası artı 2 bayt yükünü içermesi gereken tüketmekSonuç her zaman 5 ile 20 bayttır.Bu uzaklık değerini depolamak için yük 2 bayt içerir.Ancak, null değerler ve sıfır özel olarak kabul edilir ve yalnızca 2 bayt gerçekleştirin.

Değişken uzunlukta sütun tablo yoksa, değişken uzunlukta sütun sayısını saklamak için satır başına 2 baytlık bir ek yük vardır.tablo En az bir değişken uzunlukta sütun zaten hiç bir ek yük vardır.

Aşağıdaki tablo normal sabit biçimde ondalık veri saklamak için gereken bayt sayısını ve en fazla vardecimal depolama biçimi ondalık veri saklamak için gereken bayt sayısını gösterir.Bir tablo sabit biçimde depolandığında, her satır için listelenen değer kullanılacak.Çeşitli değerler Tablo vardecimal depolama biçimi depolandığında, listelenen bayt sayısından daha az gerektirir.

Sütun duyarlığını

Özgün Sabit ondalık boyutu (bayt)

En fazla vardecimal veri alanı (bayt)

Uzaklık (bayt) depolamak için ek yük

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

Vardecimal depolama biçimi aşağıdaki sorunları gidermek çalışırken kullanabilirsiniz:

  • Disk alanı yetersizliğinden yoktur.

  • Disk erişimi (g/Ç) sistem performansı üzerinde bir performans sorunu olur.

  • Yüksek olmalıdır düzey bazı verilerin doğruluğunu bile değerleri çok küçük, null veya 0 (bir veri ambarı ile bir tablo gibi bir decimal 0 veya tamsayı değerleri içeren çok sayıda satır içeren bir sütun).

Tablo depolama biçimini değiştirme depolama tablo (kümelenmiş dizin veya yığın) yeniden oluşturulması gerekir.Kümelenmiş dizini bir tablo içeren bir decimal , sütun Kümelenmiş anahtar değerleri. içerdikleri çünkü tüm kümelenmemiş dizinleri de yeniden oluşturulması gerekirKümelenmiş dizin yoksa, bir decimal sütunu, kümelenmemiş dizinleri yeniden içerenleri bir decimal sütun.Tablo bir yığın içindeyse (diğer bir deyişle, kümelenmiş dizin), tüm kümelenmemiş dizinler yığınındaki yeni satır konumlarını gösterecek şekilde yeniden oluşturulması gerekir.

Vardecimal depolama biçimi devre dışı bırakmak veya etkinleştirmek için bir tablo yeniden inşa etmek çift toplam depolama alanı özgün tablonun birden fazla zorunlu kılabilirsiniz.Tablo içeriyorsa, decimal veya numeric sütunlar, etkinleştirme vardecimal depolama biçimi olan bir meta veriler işlemi yalnızca.Günlük etkinliği çok sayıda tablo ve dizinleri yeniden oluşturulurken bekler.

Vardecimal depolama biçimi hem salt için kullanılabilir ve tablolar okuma/yazma.Depolama tasarrufu depolama biçimi satırları bunlar erişilen her saat dönüştürmek için gerekli olan ek cpu kullanımı karşı dengelenmelidir.Ayrıca, yazarken bir tablo yani vardecimal kullanarak sayfa ayırmaya artan sayısı nedeniyle depolama biçimi performansını yavaşlatabilir.

Vardecimal depolama biçimi sınırlamaları

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

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

  • Vardecimal depolama biçimi içinde sistem veritabanları yeniden etkinleştirilemez: master, model, msdb, tempdb, or distribution.Vardecimal depolama biçimi içinde depolanan verileri bir sorgu sıralar, veri, sıralı tempdb bir sabit ondalık durumu.Tipik olarak, verileri önemli ölçüde daha fazla alan gerektirir tempdb vardecimal depolama biçimi kaynak tarafından kapladığı alandan tablo kaynak veritabanı.

  • Vardecimal depolama biçimi görünümlere uygulanamaz, dizin oluşturulmuş görünümler, xml dizinler ve tam metin dizinleri.Ancak, bu nesneler 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 column that is stored in a vardecimal storage format table cannot also be encrypted.

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

  • Yeni tablovardecimal depolama biçimi oluşturulan s tablo kullanarak …Transact-SQL seçin INTO… sözdizimi devralma vardecimal depolama biçimi.

  • Veritabanları için veritabanı etkin olan yansıtma vardecimal depolama biçimi durumlarına değişti.Veritabanı kaldırmanız gerekir yansıtma veritabanı vardecimal depolama biçimi etkinleştirmek için.Ancak, veritabanını Kaldır gerekmez yansıtma tek tek tabloların ne zaman etkin veya vardecimal depolama biçimi için devre dışı.

  • SQL Server tüm güncelleştirmeler başarısız olur ve tablo her zaman Sabit ondalık biçimine verilmesi garanti çalıştırabilmesi gerekir.Bu nedenle, ek yükü bir varolan satır 8060 baytı ya da varolan bir dizin değeri 900 bayt aşmasına aşmasına neden olursa bir tablo vardecimal depolama biçimi için 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ştiğinde 8060 baytlık sınırı zorlanır.

  • Ayır ve iliştir yöntem Kopyala Veritabanı Sihirbazı'nı kullanarak veritabanı aktarma sırasında Ekle işlemi başarısız olur hedef Veritabanı Altyapısı değil SQL Server 2005 SP2 veya sonrası.The SQL Server Management Objects method will create the new database and tables without using the vardecimal storage format.Veritabanını ve tabloları vardecimal biçimine aktarımdan sonra değiştirilebilir Veritabanı Altyapısı olan SQL Server 2005 SP2 veya sonrası.

Yedekleme ve Kurtarma, veritabanı ikizleme, sp_attach_db ve günlük sevkiyat

Yedekleme ve Kurtarma, veritabanı yansıtması, sp_attach_dbhem de günlük aktarma vardecimal depolama biçimi; ile düzgün çalışır Ancak, dahil etmek için vardecimal depolama birimini kullanarak bir veritabanı biçimi, her örnek SQL Server gerekir yükseltme için en az SQL Server 2005 SP2.Örneğin, etkin vardecimal depolama biçimi için etkin olan bir veritabanına veya yansıtma için etkin bir veritabanı vardecimal depolama biçimi için etkin bir veritabanından veritabanı günlük yedeğini geri yükleme yükleyemiyor, veya vardecimal depolama biçimi tarafından etkinleştirilmiş etkinleştirilmiş bir veritabanını iliştirmek SQL Server 2005 SP2'ye bir önceki sürüm , SQL Server.geri yükleme, bir tam yedek etkin vardecimal depolama biçimi için veritabanı vardecimal depolama biçimi için etkin bir veritabanı, veritabanı vardecimal depolama biçimi için etkinleştirilir.

Bir tablo için vardecimal depolama biçimi değişti, günlük yedeği zinciri geçerli kalır ve son uygulayarak veritabanı geri yüklenebilir tam yedek artı geçerli günlük zinciri.Oluşturma önlemek için vardecimal depolama biçimi kaldırmak için herhangi tablo geçerli veritabanı Basit kurtarma modeli, önce değiştirmeniz gerekir değil yedekleri değiştirin.Herhangi bir tablo vardecimal depolama biçimi'ı kaldırdıktan sonra tam bir veritabanı oluşturmanız gerekir yedek.

Veritabanı yansıtma ile Vardecimal depolama biçimi kullanma

Aşağıdaki yordamlarda veritabanı ile vardecimal depolama biçimi kullanmak için adımlarını sağlar yansıtma.

Veritabanı ile vardecimal depolama biçimi kullanmak içinyansıtma

  1. Hem patron hem de yansıtmayı ortak örnekleri az getirmek SQL Server 2005 SP2.

  2. Şu anda veritabanı yansıtması, kullanarak veritabanı yansıtması kaldırma ve yansıtma ortak silmek.Daha fazla bilgi için bkz: Nasıl yapılır: Veritabanı yansıtma (Transact-sql) Kaldır.

  3. Vardecimal depolama biçimi etkinleştirmeden asıl veritabanı (veritabanı üzerinde ise SQL Server 2005) ve emin olun asıl veritabanı olan tam kurtarma modeli.

  4. Tam kullanarak veritabanı yansıtma kurmak ve yedeklerden oturum asıl veritabanı.Daha fazla bilgi için bkz: Nasıl yapılır: Bir veritabanı oturumu Windows kimlik doğrulaması (Transact-sql) kullanarak yansıtma kurmak.

  5. Vardecimal depolama biçimi kullanmak için tek tek tabloların değiştirin.

Not

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

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ını Kaldır yansıtma.

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

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

  5. Yansıtma ortak veritabanını bırakma.

  6. Değişiklik asıl veritabanı tam kurtarma moduna dön.

  7. Geri yukarı asıl veritabanı ve veritabanı yeniden yansıtma.

Vardecimal depolama biçimi çoğaltma işlemleri üzerindeki etkisini

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

  • decimal vardecimal depolama biçimi ' depolanan veri türleri, çoğaltma sırasında transfer için Sabit ondalık biçime dönüştürülür.The distribution database cannot be enabled for vardecimal storage format.Çoğaltma tablolarda depolanır, bu nedenle, veri vardecimal depolama biçimi ' depolanmaz distribution veritabanı.Abone tarafında günlük kayıtları genellikle uygulanır.

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

  • Tablo oluşturma işlemi yeni bir abonelik ilgili tabloları vardecimal depolama biçimi kullanarak oluşturun.Bu, hizmet paketi düzey ne olursa olsun başarılı olması, çoğaltma sağlar Veritabanı Altyapısı, veya vardecimal depolama biçimi etkin durumunu abone veritabanı.Abone tablosu tablo oluşturulduktan sonra abone uygulanmadan önce oluşturma komut dosyaları değiştirerek veya vardecimal depolama biçimi için etkinleştirilir.

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

Abone

Komut dosyası

SQL Server 2000ya da SQL Server sürüm 7.0

Tablo oluşturma komut dosyaları değişiklik olmadan kullanılabilir.

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

Tablo oluşturma komut dosyaları değişiklik olmadan kullanılabilir.

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

Tablo oluşturma komut dosyaları değişiklik olmadan kullanılabilir.

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

Tablo oluşturma komut dosyaları veritabanında vardecimal depolama biçimi etkinleştirmek ve tabloları vardecimal depolama biçimi etkinleştirmek için değiştirilebilir.Abone veritabanı ve tablolarına "Etkinleştirme Vardecimal depolama biçimi" bölümünde açıklanan saklı yordamlar kullanılarak etkinleştirilebilir veya izler.

Dikkat edilecek diğer noktalar

Vardecimal depolama biçimi çalışırken dikkate alınması gereken hususlar listesi aşağıdadır:

  • Vardecimal depolama biçimi toplu alma ve verme etkisi (bcp) işlemleri.

  • VERİUZUNLUĞU işlev vardecimal depolama biçimi algılamak ve Sabit ondalık biçiminde depolanan bayt sayısını döndürür.

  • Çok seyrek, vardecimal depolama biçimi engeller SQL Server kullanan bir sorgu planı için idealSabit ondalık veri.

  • Tüm veritabanı uyumluluk düzey ile vardecimal depolama biçimi kullanılamaz.

  • Hiçbir sütun bir tablo varsa, decimal veya numeric veri türü sp_tableoption ise yürütülen, tablo meta veriler tablosu vardecimal depolama biçimi. kullandığını belirtmek için değiştirilirYeni zaman decimal sütunlar eklenir daha sonra bunlar depolanmış vardecimal depolama biçimi.Hiçbir özel teknikler eklemek veya kaldırmak için gerekli olan bir tablo , vardecimal depolama biçimi kullanıyor.

Vardecimal depolama biçimi etkinleştirme

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

  • Veritabanında saklama biçimi vardecimal etkinleştirmek için sunucu üzerinde alter database gerektirir.

  • Bir tabloyu değiştirmek için vardecimal depolama biçimi tablo üzerinde alter izni gerektirir.

Vardecimal depolama biçimi etkinleştirmeden önce ilk tablo vardecimal depolama biçimi etkinleştirildiğinde küçültecektir doğrulamalısınız.Vardecimal depolama biçimi ile ilişkili ek yük tanımlanmış sütun duyarlığını çoğu satırlar için gerekli olduğunda, birden çok tasarruf olabilir ve büyük bir yol açabilir tablo.Tablo değiştirmeden önce satır boyutunu azaltma tahmin etmek için kullanmak sp_estimated_rowsize_reduction_for_vardecimal saklı yordam.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.

İçinde bir SQL Server 2008 , veritabanı vardecimal depolama biçimi için etkinleştirebilir decimal kullanarak, veri türleri, saklı yordamlar veya SQL Server Management Studio:

  • Çalıştır sp_db_vardecimal_storage_format veritabanında vardecimal depolama biçimi etkinleştirmek için (, örnek , SQL Server olan SQL Server 2005, sp 2) ve çalıştırın sp_tableoption, uygun tabloları vardecimal depolama biçimi etkinleştirmek için.

  • De Management Studio, kullanma Veritabanı özellikleri Seçenekleri sayfası veritabanında vardecimal depolama biçimi etkinleştirmek için.Kullanmanız gereken sp_tableoption bir tablo vardecimal depolama biçimi için değiştirmek için.

Not

İle başlayan SQL Server 2008, tüm veritabanları etkin vardecimal depolama biçimi.

Vardecimal depolama biçimi tabloları tanımlama

Bir veritabanındaki tabloları vardecimal depolama biçimi kullanıyorsanız belirlemek için objectproperty kullanın işlev ve Ara TableHasVarDecimalStorageFormat özellik.

Aşağıdaki örnek verir 1 , Production.WorkOrderRouting Tablo vardecimal depolama biçimi kullanır ve 0 , bunu yapar değil.

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

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

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

Vardecimal depolama biçimi kaldırma sorunları

Bir 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 durum, vardecimal depolama biçimi devre dışı bırakmak için kullanılabilir yeterli disk alanı olduğundan emin olun gerekir SQL Server.Genişletme işlemi aynı zamanda hem vardecimal hem normal biçiminde veri depolamak için geçici boş alan gerektirir.Genişletilmiş tablo üzerindeki kullanılabilir disk alanı genişletme sonra uyma, ancak yalnızca geçici disk alanı yetersizliği nedeniyle genişletmek başarısız oluyor, tablonun satır unexpanded yeni bir tabloya kopyalayarak veri artırarak genişletebilirsiniz.

Değiştirilmiş hemen sonra bir veritabanından vardecimal depolama biçimi kaldırmak için veritabanını ve veritabanından geri yükleme bir yedek , etkin veritabanı vardecimal depolama biçimi önce yapıldı.

Ne zaman taşıyacağınız bir veritabanından bir SQL Server 2005 kuruluş, geliştirici, değerlendirme edition başka bir sürümüne veya önceki bir sürüm için SQL Serverönce gerekli sürümleri birini kullanarak veritabanını açın, vardecimal depolama biçimi kaldırmak ve sonra geçiş veritabanı.Uygun olmayan bir sunucu için vardecimal depolama biçimi içeren bir veritabanını iliştirmek başarısız olur.