Contoh SQL Server Pembaruan Statistik melewatkan RANGE_HI_KEY tertinggi pada kolom kunci naik

10

Saya mencoba memahami cara kerja pengambilan sampel Statistik dan apakah perilaku di bawah ini diharapkan pada pembaruan statistik sampel.

Kami memiliki tabel besar yang dipartisi berdasarkan tanggal dengan beberapa miliar baris. Tanggal partisi adalah tanggal bisnis sebelumnya dan juga merupakan kunci naik. Kami hanya memuat data ke tabel ini untuk hari sebelumnya.

Pemuatan data berjalan dalam semalam, jadi pada hari Jumat 8 April kami memuat data untuk tanggal 7.

Setelah setiap kali berjalan kami memperbarui statistik, meskipun mengambil sampel, bukan a FULLSCAN.

Mungkin saya naif, tapi saya berharap SQL Server mengidentifikasi kunci tertinggi dan kunci terendah dalam jangkauan untuk memastikan mendapat sampel rentang akurat. Menurut artikel ini :

Untuk bucket pertama, batas bawah adalah nilai terkecil dari kolom tempat histogram dihasilkan.

Namun, itu tidak menyebutkan ember terakhir / nilai terbesar.

Dengan pemutakhiran Statistik sampel pada pagi hari tanggal 8, sampel kehilangan nilai tertinggi dalam tabel (tanggal 7).

masukkan deskripsi gambar di sini

Karena kami melakukan banyak pencarian data pada hari sebelumnya, ini menghasilkan estimasi kardinalitas yang tidak akurat dan sejumlah waktu kueri habis.

Haruskah SQL Server tidak mengidentifikasi nilai tertinggi untuk kunci itu dan menggunakannya sebagai maksimum RANGE_HI_KEY? Atau ini hanya salah satu batas pembaruan tanpa menggunakan FULLSCAN?

Versi SQL Server 2012 SP2-CU7. Saat ini kami tidak dapat memutakhirkan karena perubahan OPENQUERYperilaku di SP3 yang mengumpulkan angka dalam kueri server tertaut antara SQL Server dan Oracle.

Mark Sinkinson
sumber

Jawaban:

11

Haruskah SQL Server tidak mengidentifikasi nilai tertinggi untuk kunci itu dan menggunakannya sebagai maksimum RANGE_HI_KEY? Atau ini hanya salah satu batas pembaruan tanpa menggunakan FULLSCAN?

Ini adalah batasan dari implementasi statistik sampel saat ini. Seperti berdiri, sampel menggunakan pengumpulan statistik TABLESAMPLE SYSTEM, yang menggunakan pemindaian alokasi-perintah dan memilih halaman dari pemindaian untuk sampel. Hanya halaman yang dipilih yang berkontribusi pada histogram.

Karena pemindaian adalah urutan-urutan (bukan urutan-indeks), tidak ada cara untuk memberikan preferensi ke halaman pertama dan terakhir dalam urutan utama.

Untuk informasi lebih lanjut, lihat pertanyaan terkait ini:

Bagaimana cara kerja pengambilan sampel saat memperbarui statistik?

dan artikel saya, Pemindaian Alokasi

Untuk solusinya, lihat Statistik pada Kolom Naik oleh Fabiano Amorim

Paul White 9
sumber