Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 21847|Yanıt: 0

[İletişim] Sql Server Bölümlenmiş Tabloların Özeti

[Bağlantıyı kopyala]
Yayınlandı 13.07.2021 13:52:31 | | |

Resmi belgeler


Bölüm tablosu oluşturmak için yüksek düzey adımlar

1. Bir dosya grubu oluşturun (oracle tablosuna benzer), tabii ki oluşturamazsınız, tüm bölümleri tek bir dosya grubuna koyabilirsiniz

2. Bir bölümleme fonksiyonu oluşturun ve verileri hangi aralığa göre dağıtın

3. Bir bölümleme şeması oluşturun, bölüm fonksiyonunu ve dosya grubunu ilişkilendirin, bölüm fonksiyonu veriyi birkaç aralığa böler, birkaç dosya grubunu ilişkilendirmeniz gerekir, tabii ki, bu bölüm aralıklarını aynı dosya grubuna da koyabilirsiniz

4. Bir tablo oluşturun ve imar düzenini ilişkilendirin


Karşılaşılan bir hata

Tablo yapısını dışa aktarmak için doğrudan sağ tıkladığınızda, bölüm bilgisini dışa aktaramazsınız ve tablonun bölüm bilgilerini yalnızca veritabanı görevi oluşturan betikten sağ tıklayarak dışa aktarabilirsiniz


Bölüm tablosundan bazı sonuçlar:

1. Bölünmüş alanların mutlaka indekslenmesi gerekmez

2. Bölümlenmiş alanlar, kümelenmiş indeksler veya nokümelenmiş indeksler olarak oluşturulabilir

3. Bölümlenmiş alanlar, ister kümelenmiş indeksler olsun ister kümelenmiş indeksler, ilişkili bölme şemaları olmadan kümelenmiş indekslere yeniden inşa edilir ve bölümlenmiş tablo bölünmemiş bir tablo haline gelir

4. Sıradan bir tabloyu bölümlenmiş bir tabloya dönüştürün, sadece tabloda kümelenmiş bir indeks oluşturun ve kümelenmiş indeks üzerindeki bölme şemasını kullanın. Örneğin, bölünmemiş bir tablonun 1. alanı kümelenmiş bir indeks oluşturduğunda ve bir bölümleme şemasıyla ilişkilendirildiğinde, tablo bölünmüş bir tabloya dönüştürülür ve bölünmüş alan alan 1 olur.

5. Bölümlenmiş tabloyu normal bir tabloya dönüştürün; eğer indeksli bir bölüm alanı varsa, bölümlenmiş alanı kümelenmiş bir indeks olarak yeniden oluşturun ve bölüm şemasıyla ilişkilendirilmeyin; eğer bölüm alanının indeks yoksa, bölüm alanı yeni kümelenmiş bir indeks oluşturabilir ve bölüm şemasıyla ilişkilendirilmez

6. Normal bir tabloyu bölüm tablosuna veya bölüm tablosunu sıradan bir tabloya dönüştürmek ancak kümelenmiş indeksler kullanılarak sağlanabilir; çünkü kümelenmiş indekslerde endeks organizasyon tabloları kullanılır ve tabloların yeniden dağıtımı kümelenmiş indekslerin yeniden inşası yoluyla gerçekleşir. Sıradan tablo bölümlenmiş bir tablo olursa, bölüm alanını kümelenmiş bir indekse yeniden yapılandırın ve bunu bölüm şemasıyla ilişkilendirin; eğer bölüm tablosu normal bir tablo olursa, bölüm alanını bölme şemasını ilişkilendirmeden kümelenmiş bir indekse yeniden inşa edin.

7. Bir bölüm tablosu oluşturmak için, benzersizlik kısıtlaması bir bölme sütunu içermelidir

8. Bir bölümleme şeması oluşturulurken, dosya gruplarının sayısının bölüm fonksiyonunun bölüm aralığı segmentiyle eşleştiğinden emin olmak gerekir ve dosya grubu adının çoğaltılması fark etmez.

9. Bölümleme fonksiyonları ve bölme şemaları bir veritabanındadır, tüm örnekle yüzleşmez

10. Bölme tablosu çok büyük ve disk alanı kaplamak için boyut değişmiyor ve bazı alanlar silindikten sonra da boyut değişmiyor


Bir bölüm tablosu oluşturma adımları

1.1. Dosya grubu oluşturma örneği

veritabanını alter test1 dosya grubu bölüm1 ekle;

veritabanı test1'i alter dosya grubu part1000 ekle;

alter database test1 add filegroup part2000;

alter database test1 file group part3000 ekle;

alter database test1 dosya grubu part4000 ekle;

1.2. Bir dosya örneğini oluştur ve bir dosya grubunu ilişkilendir

VERITABANINI DEĞIŞTIR TEST1 DOSYA GRUBUNA DOSYA(NAME = TEST1part1,FILENAME = 'G:\test1part1.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) DOSYA GRUBUNA 1 EKLE;

VERITABANINI DEĞIŞTIR TEST1 DOSYA GRUBUNA DOSYA (NAME = TEST1part1000,FILENAME = 'G:\test1part1000.ndf',SIZE = 5MB, MAXSIZE = 100MB,FILEGROWTH = 5MB) DOSYA GRUBUNA PART1000 EKLE;

VERITABANINI DEĞIŞTIR TEST1 DOSYA GRUBUNA (NAME = TEST1part2000,FILENAME = 'G:\test1part2000.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB) DOSYA GRUBUNA PART2000 EKLE;

VERITABANINI DEĞIŞTIR TEST1 DOSYA GRUBUNA DOSYA(NAME = TEST1part3000,FILENAME = 'G:\test1part3000.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB) DOSYA GRUBUNA PART3000 EKLE;

VERITABANINI DEĞIŞTIR TEST1 DOSYA GRUBUNA DOSYA(NAME = TEST1part4000,FILENAME = 'G:\test1part4000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) DOSYA GRUBUNA PAR4000 EKLE;

2. Bir bölme fonksiyonu kurmanın bir örneği olan bölüm fonksiyonu partfun1 olarak adlandırılır

BÖLÜM FONKSIYONU OLUŞTUR partfun1 (int)

DEĞERLER IÇIN SOL ARALIKTA ('1000','2000','3000','4000')

--VALUES ('1000', '2000', '3000', '4000') tablonun 5 bölgeye ayrılacağını gösterir; bu bölgeler tablo alanlarındaki değerlerin büyüklüğüne göre bölünür, beş bölge en küçüktür - 1000, 1000-2000, 2000-3000, 3000-4000, 4000-en büyük

3. Bir şema kurma örneği, partfun1 bölüm fonksiyonunu ve dosya grubunu ilişkilendirin

BÖLÜM ŞEMASI OLUŞTUR partschema1

BÖLÜM OLARAK partfun1

TO (bölüm 1, bölüm 1000, bölüm 2000, bölüm 3000, bölüm 4000);

--Part 1, part1000, part2000, part3000, part 4000 dosya grupları üzerine inşa edilmiştir

BÖLÜM ŞEMASI OLUŞTUR partschema2

BÖLÜM OLARAK partfun1

TO (BÖLÜM 1,[ILK],[ILK],[ILK],[ILK];[PRIMARY]);

--Part 1, [PRIMARY] dosya grubu üzerine inşa edilmiş, bölüm 1'i [PRIMERARY] ile değiştirmek sorun olmaz, böylece [PRIMARY] dosya grubu üzerine inşa etmeye benzer olur

BÖLÜM ŞEMASI OLUŞTUR partschema3

BÖLÜM OLARAK partfun1

ALL TO (bölüm 1);

--hepsi part1 dosya grubu üzerine inşa edilmiştir

BÖLÜM ŞEMASI OLUŞTUR partschema4

BÖLÜM OLARAK partfun1

HEPSI ([PRIMARY]);

--hepsi [PRIMARY] dosya grubu üzerine inşa edilmiştir

4. Bir bölme tablosu oluşturma örneği

TABLO OLUŞTUR PARTTABLE1(

[ID] [int] NULL DEĞİL,

[IDText] [nvarchar] (max) SIFIR

[Tarih] [tarih saati] NULL)

ON [partschema1](ID);

parttable1'e değerler (1,'1',getdate()-4 ekleyin;

parttable1 değerlerini (1001,'1001',getdate()-3'e ekle;

parttable1 değerlerini (2001,'2001',getdate()-2'ye ekleyin;

parttable1'e değerler (3001,'3001',getdate()-1) ekleyin;

parttable1 değerlerini (4001,'4001',getdate()) içine ekle;

5. Bölüm tablosunun verilerini doğrulayın

SEÇ * PARTTABLE1'DEN;

--Bölüm tablosunun tüm satırlarını döndürür

SEÇ farklı $PARTITION. [partfun1] (4) PARTTABLE1'DEN;

--ID alanı değeri 4 olan satırı bölmeye ayıran döndürmeler

PARTTABLE1'den * SEÇİN, burada $PARTITION. [partfun1] (ID)=2

--2. bölümdeki tüm satırları döndürür, ID bölüm alanı ID'sidir

Not: SELECT * FROM parttabletable1 tuşunu kullanamazsınız, $PARTITION. [partfun1] (ID)=2 sonucuna sahip olursa, bu bir bölümlenmiş tablo olduğu anlamına gelir ve bu makalenin son test 7'si bölümlenmemiş bir tablodur, ancak SELECT * FROM parttable1 burada $PARTITION. [partfun1] (ID)=2 hala bir sonuç var


Yeni bölümler

1. Bölüm şeması için kullanılabilecek bir dosya grubu belirtin (bölüm şeması için bir dosya grubu ekleyin).

2. Bölümleme fonksiyonunu değiştirin (bölüm fonksiyonunun veri aralığını ekleyin)

DEĞİL BÖLÜM ŞEMASI BÖLÜMCİKİŞİKİ KULLANIM [ÖNCELİ]

ALTER PARTITION FUNCTION partfun1() SPLIT RANGE ('4500')

sys.indexes i'den p.partition_number,p.rows iç birleştirme sys.partitions p on p.object_id = i.object_id ve i.object_id = object_id('parttable2') sırasını 1 olarak seçin

--İlk ifade, eğer bölüm şeması ALL TO ([primary]) kullanıyorsa, bu ifadenin çalıştırılması gerekmez

--İkinci ifadeye yeni bir bölüm ekleniyor, aralık 4000-4500 arasındadır

--Üçüncü cümle, yeni bölümün var olup olmadığını ve satırlar olup olmadığını doğrular.


Delete\Merge partition

ALTER PARTITION FUNCTION partfun1() MERGE RANGE ('2000')

1000-2000 bölünmesi silindi ve 1000-3000 ile birleştirildi

--Oracle gibi ALTER TABLE TABLENAME DROP PARTITIONNAME çalıştırılamak;


Bölüm tablosunu ve ilgili dosya grubunu sil

Silme sırası şudur: bölüm tablosunu sil, bölüm şemasını sil, bölüm fonksiyonunu sil ve son olarak dosya grubunu sil, dosya grubu silindikten sonra ilgili dosya silinir


Bölümlenmiş bir tabloyu normal bir tabloya, normal bir tabloyu ise bölümlenmiş bir tabloya dönüştürme örneği

AÇIK TABLO parttable1;

TABLO OLUŞTUR PARTTABLE1(

[Id] [int] IDENTITY(1,1) NOT NULL,

[İsim] [varchar] (16) BOŞ DEĞIL,

[Id2] [int] NOT NULL

) ON partschema1(Id2);

parttable1 değerlerini ('1',1) ekleyin;

parttable1 değerlerini ('1001',1001) ekleyin;

parttable1 değerlerini parça tablosuna ekleyin ('2001',2001);

parttable1 değerlerini ('3001',3001) içine ekleyin;

parttable1 değerlerini ('4001',4001) içine ekleyin;

1. Bölüm tablosunda oluşturulan benzersiz kısıtlama, bir bölüm sütunu içermelidir.

ALTER TABLO PARTTABLETABLE1 KISITLAMA EKLE PK_prattable1_id BIRINCIL ANAHTAR KÜMELENMIŞ ([ID] ASC)

Hata Sütunu 'Id2', 'PK_prattable1_id' indeksinin bölümleme sütunudur. Benzersiz bir indeks için bölüm sütunları, indeks anahtarının bir alt kümesi olmalıdır.

2. Bölüm sütununda id2'de yeni bir kümelenmiş indeks oluşturun, parttable1 hâlâ bölümlenmiş bir tablo olarak kalır

parttable1(id2)'de kümelenmiş indeks CI_prattable1_id2 oluşturun;

3. Bölüm sütunu id2 kümelenmiş olmayan bir indeks oluşturur ve parttable1 hâlâ bölümlenmiş bir tablodur

Part table1'de drop index CI_prattable1_id2;

parttable1(id2)'de kümelenmiş olmayan indeks NCI_prattable1_id2 oluşturun;

4. Bölünmemiş sütun id sütunu, kümelenmiş bir indeks, parttable1 veya bölümlenmiş bir tablo oluşturur; bu da bölünmemiş sütunun küme indeks sütunu olabileceğini gösterir

parttable1(id)'de kümelenmiş indeks CI_prattable1_id oluşturun;

5. Bölüm sütunu ID2, kümelenmiş olmayan bir indeks olarak yeniden oluşturulmuş ve bir bölümleme şeması kullanmaz; parttable1 hâlâ bir bölüm tablosudur

parttabletable1(id2) ÜZERINDE (DROP_EXISTING = ON) ILE [PRIMER] ÜZERINDE KÜMELENMIŞ OLMAYAN INDEKS NCI_prattable1_id2 OLUŞTURUN;

6. Bölüm sütunu id2, ON koşulu olmadan kümelenmiş bir indekse yeniden oluşturulur ve parttable1 hâlâ bir bölüm tablosu olarak kalır

parttable1'de drop index CI_prattable1_id;

Part table1'de drop index NCI_prattable1_id2;

parttable1(id2)'de kümelenmiş indeks CI_prattable1_id2 oluşturun;

parttabletable1(id2)'de (DROP_EXISTING = ON) ILE kümelenmiş indeks CI_prattable1_id2 oluşturun;

7. Bölümlenmiş sütun id2, ON koşuluyla ancak bölme şeması kullanılmadan kümelenmiş bir indeks haline getirilir ve parttable1 bölünmemiş bir tablo haline gelir

parttabletable1(id2) ÜZERINDE (DROP_EXISTING = AÇIK) ILE [PRIMERARY]'DA KÜMELENMIŞ INDEKS CI_prattable1_id2 OLUŞTURUN;

8. Bölüm sütunu id2 kümelenmiş bir indeks haline getirilir ve bölümleme şeması kullanılarak parttable1 bölümlenmiş bir tablo haline gelir

partstable1(id2)'de (DROP_EXISTING = ON) ile parttable1(id2)'de kümelenmiş indeks CI_prattable1_id2 oluşturmak;

9. Yukarıdaki 8'deki kümelenmiş indeks silindikten sonra, parttable1 hâlâ bölümlenmiş bir tablo olarak kalmıştır

Part table1'de drop index CI_prattable1_id2;

10. Bölüm sütunu ID2, kümelenmiş bir indeks olarak oluşturulur ve bölümleme şemasını kullanmaz; parttable1 ise bölünmemiş bir tablo haline gelir

parttabletable1(id2) üzerinde [PRIMERARY] üzerinde kümelenmiş indeks CI_prattable1_id2 oluşturun;

11. Yukarıdaki 10'un kümelenmiş indeksi silindikten sonra, parttable1 hâlâ bölünmemiş bir tablodur

Part table1'de drop index CI_prattable1_id2;

12. Bölüm sütunu id2, yeni olarak kümelenmiş olmayan bir indeks olarak oluşturulmuştur, ancak bölme şeması kullanılsa da, yine de bölünmemiş bir tablodur

partstabletable1(id2)'de kümelenmiş olmayan indeks NCI_prattable1_id2 oluşturmak; partschema1(id2)'de;


Bölümlenmiş tablo normal bir tabloya dönüştürülürse, birincil anahtar kısıtlaması silinir ve küme indeksi orijinal birincil anahtarın alanları için birincil anahtara yeniden inşa edilir veya yeniden oluşturulur, ancak bu bölümleme şemasıyla ilişkili değildir

TABLO Table_name KISITLAMAYI BIRAKMAK PK_NAME (>

PK_NAME Table_name(SÜTUN) ÜZERINDE ([BIRINCIL] ÜZERINDE;

veya

TABLO Table_name DEĞIŞTIRIN PK_NAME BIRINCIL ANAHTAR KÜMELENMIŞ (sütun) ILE ([ÖNCELIK] ÜZERINDE;


Normal tablo bölümlenmiş bir tabloya dönüştürülürse, orijinal birincil anahtar korunacaksa, birincil anahtar kısıtlaması silinir ve ardından birincil anahtar toplanan bir indeks olarak belirlenmeden oluşturulur, ardından yeni bir toplu indeks oluşturulur ve toplu indekste bölümleme şeması kullanılır

TABLO Table_name KISITLAMAYI BIRAKMAK PK_NAME (>

TABLO Table_name DEĞIŞTIRIN PK_NAME BIRINCIL ANAHTAR KÜMESIZ(sütun) ILE ([ÖNCELIK] ÜZERINDE;

--Birincil anahtar oluşturun, ancak kümelenmiş bir indeks olarak ayarlanmamış

Table_name(sütun) ÜZERINDE KÜMELENMIŞ İNDEKS index_name OLUŞTUR Bölüm Şeması (Bölümleme Alanı)

--Bir bölümleme şemasının kullanıldığı yeni bir kümelenmiş indeks oluşturun


Bölümlenmiş bir tablonun toplam satır sayısını ve boyutunu sorgulayın, örneğin tablo CRM'dir. E-posta Günlüğü

Yönetici sp_spaceused 'CRM. EmailLog';


Bölümlenmiş bir tablonun bilgilerini, her bölümün kaç satır olduğunu sorgulayın, örneğin tablo CRM'dir. E-posta Günlüğü

Select convert(varchar(50), ps.name

) partition_scheme olarak,

p.partition_number,

dönüştürücü(varchar(10), ds2.name

) dosya grubu olarak,

convert(varchar(19), isnull(v.value, ''), 120) olarak range_boundary,

str(p.rows, 9) sıralar olarak

sys.indexes i'den

sys.partition_schemes ps ile i.data_space_id = ps.data_space_id

DDS'sys.destination_data_spaces katıl

ps.data_space_id = dds.partition_scheme_id

sys.data_spaces DS2'ye katılın dds.data_space_id = ds2.data_space_id

join sys.partitions p on dds.destination_id = p.partition_number

ve p.object_id = i.object_id ve p.index_id = i.index_id

sys.partition_functions pf'ye katıl ps.function_id = pf.function_id

SOL KATIL sys. Partition_Range_values v on pf.function_id = v.function_id

ve v.boundary_id = p.partition_number - pf.boundary_value_on_right

BURADA i.object_id = object_id('crm. E-posta Günlüğü')

ve (0, 1) içinde i.index_id

Sipariş p.partition_number


Sorgu bölümleme fonksiyonları

Seç * sys.partition_functions


Bölüm mimarisini görüntüleyin

Seç * arasından sys.partition_schemes


Orijinal adres:Bağlantı girişi görünür.




Önceki:Kafka Windows sistemi bir süre çalıştıktan sonra kapanır
Önümüzdeki:SQL Server DBCC DROPCLEANBUFFERS geçersiz mi?
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com