Statistik dalam pergudangan data Fabric

Berlaku untuk: Titik akhir analitik SQL dan Gudang di Microsoft Fabric

Gudang di Microsoft Fabric menggunakan mesin kueri untuk membuat rencana eksekusi untuk kueri SQL tertentu. Saat Anda mengirimkan kueri, pengoptimal kueri mencoba menghitung semua rencana yang mungkin dan memilih kandidat yang paling efisien. Untuk menentukan rencana mana yang akan memerlukan overhead paling sedikit (I/O, CPU, memori), mesin harus dapat mengevaluasi jumlah pekerjaan atau baris yang mungkin diproses di setiap operator. Kemudian, berdasarkan biaya setiap paket, paket memilih yang memiliki perkiraan pekerjaan paling sedikit. Statistik adalah objek yang berisi informasi relevan tentang data Anda, untuk memungkinkan pengoptimal kueri memperkirakan biaya ini.

Cara memanfaatkan statistik

Untuk mencapai performa kueri yang optimal, penting untuk memiliki statistik yang akurat. Microsoft Fabric saat ini mendukung jalur berikut untuk memberikan statistik yang relevan dan terbaru:

Statistik manual untuk semua tabel

Opsi tradisional untuk mempertahankan kesehatan statistik tersedia di Microsoft Fabric. Pengguna dapat membuat, memperbarui, dan menghilangkan statistik kolom tunggal berbasis histogram dengan STATISTIK CREATE, UPDATE STATISTICS, dan DROP STATISTICS. Pengguna juga dapat melihat konten statistik kolom tunggal berbasis histogram dengan DBCC SHOW_STATISTICS. Saat ini, versi terbatas dari pernyataan ini didukung.

  • Jika membuat statistik secara manual, pertimbangkan untuk berfokus pada mereka yang banyak digunakan dalam beban kerja kueri Anda (khususnya di GROUP BYs, ORDER BYs, filter, dan JOIN).
  • Pertimbangkan untuk memperbarui statistik tingkat kolom secara teratur setelah perubahan data yang secara signifikan mengubah rowcount atau distribusi data.

Contoh pemeliharaan statistik manual

Untuk membuat statistik pada dbo.DimCustomer tabel, berdasarkan semua baris dalam kolom CustomerKey:

CREATE STATISTICS DimCustomer_CustomerKey_FullScan
ON dbo.DimCustomer (CustomerKey) WITH FULLSCAN;

Untuk memperbarui objek DimCustomer_CustomerKey_FullScanstatistik secara manual , mungkin setelah pembaruan data besar:

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

Untuk menampilkan informasi tentang objek statistik:

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan");

Untuk memperlihatkan hanya informasi tentang histogram objek statistik:

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan") WITH HISTOGRAM;

Untuk menghilangkan objek DimCustomer_CustomerKey_FullScanstatistik secara manual :

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

Objek T-SQL berikut juga dapat digunakan untuk memeriksa statistik yang dibuat dan dibuat secara manual di Microsoft Fabric:

Statistik otomatis saat kueri

Setiap kali Anda mengeluarkan pengoptimal kueri dan pengoptimal kueri memerlukan statistik untuk eksplorasi rencana, Microsoft Fabric akan secara otomatis membuat statistik tersebut jika belum ada. Setelah statistik dibuat, pengoptimal kueri dapat menggunakannya dalam memperkirakan biaya rencana kueri pemicu. Selain itu, jika mesin kueri menentukan bahwa statistik yang ada relevan dengan kueri tidak lagi secara akurat mencerminkan data, statistik tersebut akan disegarkan secara otomatis. Karena operasi otomatis ini dilakukan secara sinkron, Anda dapat mengharapkan durasi kueri untuk menyertakan kali ini jika statistik yang diperlukan belum ada atau perubahan data yang signifikan telah terjadi sejak refresh statistik terakhir.

Memverifikasi statistik otomatis pada waktu kueri

Ada berbagai kasus di mana Anda dapat mengharapkan beberapa jenis statistik otomatis. Yang paling umum adalah statistik berbasis histogram, yang diminta oleh pengoptimal kueri untuk kolom yang direferensikan dalam GROUP BYs, JOIN, klausa DISTINCT, filter (klausa WHERE), dan ORDER BYs. Misalnya, jika Anda ingin melihat pembuatan otomatis statistik ini, kueri akan memicu pembuatan jika statistik belum COLUMN_NAME ada. Contohnya:

SELECT <COLUMN_NAME>
FROM <YOUR_TABLE_NAME>
GROUP BY <COLUMN_NAME>;

Dalam hal ini, Anda harus mengharapkan bahwa statistik COLUMN_NAME telah dibuat. Jika kolom juga merupakan kolom varchar, Anda juga akan melihat statistik panjang kolom rata-rata yang dibuat. Jika Anda ingin memvalidasi statistik dibuat secara otomatis, Anda bisa menjalankan kueri berikut:

select
    object_name(s.object_id) AS [object_name],
    c.name AS [column_name],
    s.name AS [stats_name],
    s.stats_id,
    STATS_DATE(s.object_id, s.stats_id) AS [stats_update_date], 
    s.auto_created,
    s.user_created,
    s.stats_generation_method_desc 
FROM sys.stats AS s 
INNER JOIN sys.objects AS o 
ON o.object_id = s.object_id 
INNER JOIN sys.stats_columns AS sc 
ON s.object_id = sc.object_id 
AND s.stats_id = sc.stats_id 
INNER JOIN sys.columns AS c 
ON sc.object_id = c.object_id 
AND c.column_id = sc.column_id
WHERE o.type = 'U' -- Only check for stats on user-tables
    AND s.auto_created = 1
    AND o.name = '<YOUR_TABLE_NAME>'
ORDER BY object_name, column_name;

Kueri ini hanya mencari statistik berbasis kolom. Jika Anda ingin melihat semua statistik yang ada untuk tabel ini, hapus JOIN pada sys.stats_columns dan sys.columns.

Sekarang, Anda dapat menemukan statistics_name statistik histogram yang dihasilkan secara otomatis (harus seperti _WA_Sys_00000007_3B75D760) dan menjalankan T-SQL berikut:

DBCC SHOW_STATISTICS ('<YOUR_TABLE_NAME>', '<statistics_name>');

Contohnya:

DBCC SHOW_STATISTICS ('sales.FactInvoice', '_WA_Sys_00000007_3B75D760');

Nilai Updated dalam kumpulan hasil SHOW_STATISTICS DBCC harus berupa tanggal (dalam UTC) yang mirip dengan saat Anda menjalankan kueri GROUP BY asli.

Statistik yang dihasilkan secara otomatis ini kemudian dapat dimanfaatkan dalam kueri berikutnya oleh mesin kueri untuk meningkatkan biaya rencana dan efisiensi eksekusi. Jika terjadi perubahan yang cukup dalam tabel, mesin kueri juga akan menyegarkan statistik tersebut untuk meningkatkan pengoptimalan kueri. Latihan sampel sebelumnya yang sama dapat diterapkan setelah mengubah tabel secara signifikan. Dalam Fabric, mesin kueri SQL menggunakan ambang kompilasi ulang yang sama dengan SQL Server 2016 (13.x) untuk menyegarkan statistik.

Jenis statistik yang dihasilkan secara otomatis

Di Microsoft Fabric, ada beberapa jenis statistik yang secara otomatis dihasilkan oleh mesin untuk meningkatkan rencana kueri. Saat ini, mereka dapat ditemukan di sys.stats meskipun tidak semua dapat ditindakkan:

  • Statistik histogram
    • Dibuat per kolom yang memerlukan statistik histogram pada waktu kueri
    • Objek-objek ini berisi histogram dan informasi kepadatan mengenai distribusi kolom tertentu. Mirip dengan statistik yang dibuat secara otomatis pada querytime di kumpulan khusus Azure Synapse Analytics.
    • Nama dimulai dengan _WA_Sys_.
    • Konten dapat dilihat dengan DBCC SHOW_STATISTICS
  • Statistik panjang kolom rata-rata
    • Dibuat untuk kolom karakter variabel (varchar) yang lebih besar dari 100 membutuhkan panjang kolom rata-rata pada waktu kueri.
    • Objek ini berisi nilai yang mewakili ukuran baris rata-rata kolom varchar pada saat pembuatan statistik.
    • Nama dimulai dengan ACE-AverageColumnLength_.
    • Isi tidak dapat dilihat dan dapat diganggu oleh pengguna.
  • Statistik kardinalitas berbasis tabel
    • Dibuat per tabel yang membutuhkan estimasi kardinalitas pada waktu kueri.
    • Objek ini berisi perkiraan rowcount tabel.
    • Bernama ACE-Cardinality.
    • Isi tidak dapat dilihat dan dapat diganggu oleh pengguna.

Batasan

  • Hanya statistik histogram kolom tunggal yang dapat dibuat dan dimodifikasi secara manual.
  • Pembuatan statistik multi-kolom tidak didukung.
  • Objek statistik lainnya mungkin muncul di sys.stats, selain statistik yang dibuat secara manual dan statistik yang dibuat secara otomatis. Objek ini tidak digunakan untuk pengoptimalan kueri.