Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Satır grubu kalitesi, bir satır grubundaki satır sayısına göre belirlenir. Kullanılabilir belleği artırmak, bir columnstore dizininin her satır grubuna sıkıştırabileceği satır sayısını en üst düzeye çıkarabilir. Columnstore dizinleri için sıkıştırma oranlarını ve sorgu performansını geliştirmek için bu yöntemleri kullanın.
Satır grubu boyutu neden önemlidir?
Bir columnstore dizini tek tek satır gruplarının sütun kesimlerini tarayarak tabloyu taradığından, her satır grubundaki satır sayısını en üst düzeye çıkarmak sorgu performansını artırır.
Satır gruplarının satır sayısı yüksek olduğunda, veri sıkıştırma iyileştirir, bu da diskten okunacak daha az veri olduğu anlamına gelir.
Satır grupları hakkında daha fazla bilgi için bkz. Columnstore Dizinleri Kılavuzu.
Satır grupları için hedef boyut
En iyi sorgu performansı için amaç, columnstore dizinindeki satır grubu başına satır sayısını en üst düzeye çıkarmaktır. Bir satır grubunun en fazla 1.048.576 satırı olabilir.
Satır grubu başına en fazla satır sayısına sahip olmaması sorun değil. Columnstore dizinleri, satır gruplarının en az 100.000 satırı olduğunda iyi bir performans elde eder.
Satır grupları sıkıştırma sırasında kırpılabilir
Toplu yükleme veya columnstore dizini yeniden oluşturma sırasında, bazen her satır grubu için belirlenen tüm satırları sıkıştırmak için yeterli bellek yoktur. Bellek baskısı olduğunda, columnstore dizinleri satır grubu boyutlarını kırpar, böylece columnstore'a sıkıştırma başarılı olabilir.
Her satır grubuna en az 10.000 satırı sıkıştırmak için yeterli bellek olmadığında bir hata oluşturulur.
Toplu yükleme hakkında daha fazla bilgi için bkz. kümelenmiş columnstore dizinine toplu yükleme.
Rowgroup kalitesi nasıl izlenir
DMV sys.dm_pdw_nodes_db_column_store_row_group_physical_stats (sys.dm_db_column_store_row_group_physical_stats), satır gruplarındaki satır sayısı ve kırpma varsa kırpma nedeni gibi yararlı bilgileri sunan ve SQL DB ile eşleşen bir görünüm tanımına sahiptir.
Satır grubu kırpma hakkında bilgi almak için bu DMV'yi sorgulamanın kullanışlı bir yolu olarak aşağıdaki görünümü oluşturabilirsiniz.
create view dbo.vCS_rg_physical_stats
as
with cte
as
(
select tb.[name] AS [logical_table_name]
, rg.[row_group_id] AS [row_group_id]
, rg.[state] AS [state]
, rg.[state_desc] AS [state_desc]
, rg.[total_rows] AS [total_rows]
, rg.[trim_reason_desc] AS trim_reason_desc
, mp.[physical_name] AS physical_name
FROM sys.[schemas] sm
JOIN sys.[tables] tb ON sm.[schema_id] = tb.[schema_id]
JOIN sys.[pdw_table_mappings] mp ON tb.[object_id] = mp.[object_id]
JOIN sys.[pdw_nodes_tables] nt ON nt.[name] = mp.[physical_name]
JOIN sys.[dm_pdw_nodes_db_column_store_row_group_physical_stats] rg ON rg.[object_id] = nt.[object_id]
AND rg.[pdw_node_id] = nt.[pdw_node_id]
AND rg.[distribution_id] = nt.[distribution_id]
)
select *
from cte;
trim_reason_desc, satır grubunun kırpılıp kırpılmadığını (trim_reason_desc = NO_TRIM kırpma olmadığını ve satır grubunun en iyi kalitede olduğu anlamına gelir) bildirir. Aşağıdaki kırpma nedenleri, satır grubunun erken kesilmesini gösterir:
- BULKLOAD: Bu kırpma nedeni, yük için gelen satır sayısı 1 milyondan az olduğunda kullanılır. 100.000'den fazla satır ekleniyorsa (delta deposuna eklemenin aksine) altyapı sıkıştırılmış satır grupları oluşturur ancak kırpma nedenini BULKLOAD olarak ayarlar. Bu senaryoda, toplu iş yükünüzü daha fazla satır içerecek şekilde artırmayı göz önünde bulundurun. Ayrıca, bölümleme düzeninizi yeniden değerlendirerek, satır gruplarının bölüm sınırlarını aşamayacak kadar ayrıntılı olmadığını emin olun.
- MEMORY_LIMITATION: 1 milyon satırlı satır grupları oluşturmak için motorun belirli bir miktarda çalışma belleğine ihtiyacı vardır. Yükleme oturumunun kullanılabilir belleği gerekli çalışma belleğinden az olduğunda, satır grupları erken kırpılır. Aşağıdaki bölümlerde gerekli belleği tahmin etme ve daha fazla bellek ayırma işlemleri açıklanmaktadır.
- DICTIONARY_SIZE: Bu kırpma nedeni, geniş ve/veya yüksek kardinalite dizelerine sahip en az bir dize sütunu olduğundan satır grubu kırpma işleminin gerçekleştiğini gösterir. Sözlük boyutu bellekte 16 MB ile sınırlıdır ve bu sınıra ulaşıldığında satır grubu sıkıştırılır. Bu durumla karşılaşırsanız sorunlu sütunu ayrı bir tabloya ayırmayı göz önünde bulundurun.
Bellek gereksinimlerini tahmin etme
En büyük boyuttaki bir satır grubunu columnstore dizininde sıkıştırmak için bellek gereksinimlerini tahmin etmek için dbo.vCS_mon_mem_grantörnek görünümü oluşturmayı göz önünde bulundurun. Bu sorgu, bir satır grubunun columnstore'a sıkıştırılması için gereken bellek tahsisinin boyutunu gösterir.
Bir satır grubunu sıkıştırmak için gereken bellek üst sınırı yaklaşık olarak
- 72 MB +
- #rows * #columns * 8 bayt +
- #rows * #short-string-columns * 32 bayt +
- #long-string-columns * Sıkıştırma sözlüğü için 16 MB
Uyarı
Kısa dize sütunları <= 32 bayt dize veri türlerini, uzun dize sütunları ise 32 bayt > dize veri türlerini kullanır.
Uzun dizeler, metni sıkıştırmak için tasarlanmış bir sıkıştırma yöntemiyle sıkıştırılır. Bu sıkıştırma yöntemi, metin desenlerini depolamak için sözlük kullanır. Bir sözlüğün en büyük boyutu 16 MB'tır. Satır grubundaki her uzun dize sütunu için yalnızca bir sözlük vardır.
Bellek gereksinimlerini azaltmanın yolları
Satır gruplarını columnstore dizinlerine sıkıştırmaya yönelik bellek gereksinimlerini azaltmak için aşağıdaki teknikleri kullanın.
Daha az sütun kullanma
Mümkünse, tabloyu daha az sütunla tasarlar. Bir satır grubu columnstore'a sıkıştırıldığında, columnstore dizini her sütun segmentini ayrı ayrı sıkıştırır.
Bu nedenle, sütun sayısı arttıkça bir satır grubunu sıkıştırmak için bellek gereksinimleri artar.
Daha az dize sütunu kullanma
Dize veri türlerinin sütunları sayısal ve tarih veri türlerinden daha fazla bellek gerektirir. Bellek gereksinimlerini azaltmak için olgu tablolarından dize sütunlarını kaldırmayı ve bunları daha küçük boyut tablolarına yerleştirmeyi göz önünde bulundurun.
Dize sıkıştırma için ek bellek gereksinimleri:
- 32 karaktere kadar olan dize veri türleri, değer başına 32 ek bayt gerektirebilir.
- 32 karakterden fazla karakter içeren dize veri türleri sözlük yöntemleri kullanılarak sıkıştırılır. Satır grubundaki her sütun, sözlüğü oluşturmak için 16 MB'a kadar daha gerektirebilir.
Fazla bölümleme yapmaktan kaçının
Columnstore dizinleri bölüm başına bir veya daha fazla satır grubu oluşturur. Azure Synapse Analytics'teki ayrılmış SQL havuzu için, veriler dağıtıldığı ve her dağıtımın bölümlendiği için bölüm sayısı hızla artar.
Tabloda çok fazla bölüm varsa, satır gruplarını doldurmak için yeterli satır olmayabilir. Satır eksikliği sıkıştırma sırasında bellek baskısı oluşturmaz. Ancak, en iyi columnstore sorgu performansını elde etmeyen satır gruplarına yol açar.
Fazla bölümlemeden kaçınmanın bir diğer nedeni de, bölümlenmiş bir tablodaki columnstore dizinine satır yüklemek için bellek yükü olmasıdır.
Bir yükleme sırasında, birçok bölüm, gelen satırları alabilir ve bu satırlar her bir bölüm sıkıştırılacak kadar yeterli sayıya ulaşana kadar bellekte tutulur. Çok fazla bölüm olması ek bellek baskısı oluşturur.
Yük sorgusunu basitleştirme
Veritabanı, sorgudaki tüm işleçler arasında bir sorgu için bellek verme işlemini paylaşır. Bir yük sorgusu karmaşık sıralamalara ve birleştirmelere sahip olduğunda, sıkıştırma için kullanılabilir bellek azalır.
Yük sorgusunu yalnızca sorguyu yüklemeye odaklanacak şekilde tasarlar. Verilerde dönüştürmeleri çalıştırmanız gerekiyorsa bunları yük sorgusundan ayrı olarak çalıştırın. Örneğin, verileri bir yığın tablosuna yerleştirin, dönüştürmeleri çalıştırın ve hazırlama tablosunu columnstore dizinine yükleyin.
İpucu
Ayrıca önce verileri yükleyebilir ve ardından MPP sistemini kullanarak verileri dönüştürebilirsiniz.
MAXDOP'i ayarlama
Her dağıtım, dağıtım başına birden fazla CPU çekirdeği kullanılabilir olduğunda satır gruplarını paralel olarak columnstore'da sıkıştırır.
Paralellik ek bellek kaynakları gerektirir ve bu da bellek baskısına ve satır grubu kırpmasına neden olabilir.
Bellek baskısını azaltmak için MAXDOP sorgu ipucunu kullanarak yükleme işlemini her dağıtımda seri modda çalışmaya zorlayabilirsiniz.
CREATE TABLE MyFactSalesQuota
WITH (DISTRIBUTION = ROUND_ROBIN)
AS SELECT * FROM FactSalesQuota
OPTION (MAXDOP 1);
Daha fazla bellek ayırma yolları
DWU boyutu ve kullanıcı kaynak sınıfı, bir kullanıcı sorgusu için kullanılabilir bellek miktarını birlikte belirler.
Bir yük sorgusu için bellek atamasını artırmak için DWU sayısını artırabilir veya kaynak sınıfını artırabilirsiniz.
- DWU'ları artırmak için bkz. Performansı nasıl ölçeklendirebilirim?
- Sorgunun kaynak sınıfını değiştirmek için bkz. Kullanıcı kaynak sınıfını değiştirme örneği.
Sonraki adımlar
Ayrılmış SQL havuzu performansını artırmanın daha fazla yolunu bulmak için Performansa genel bakışbölümüne bakın.