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. Bir satır grubunda maksimum satır sayısına ulaşamamak sorun değildir. 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 dizininin yeniden oluşturulması 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, sütun deposu dizinleri satır grup boyutlarını küçülterek sütun deposuna sıkıştırmanın başarılı olabilmesini sağlar.
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
Dinamik yönetim görünümü (DMV) (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 kullanıma sunan SQL DB ile eşleşen görünüm tanımını içerir. 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;
Sütun, trim_reason_desc satır grubunun kırpılıp kırpılmadığını gösterir (trim_reason_desc = NO_TRIM kırpma olmadığını ve satır grubunun en iyi kalitede olduğunu gösterir). 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 ekleme yerine) motor 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, satır grupları bölüm sınırlarına yayılamayacağı için bölümleme düzeninizin çok ayrıntılı olmadığından emin olmak için bölümleme düzeninizi yeniden değerlendirin.
- 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
Bir satır grubunu sıkıştırmak için gereken bellek üst sınırı yaklaşık olarak aşağıdaki gibidir:
- 72 MB +
- #rows * #columns * 8 bayt +
- #rows * #short-string-columns * 32 byte +
- #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 baytlık > 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'te veri ambarı 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ırların olmaması 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.
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
Synapse SQL'de performansı geliştirmenin daha fazla yolunu bulmak için bkz. Performansa genel bakış.