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).
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 OPENQUERY
perilaku di SP3 yang mengumpulkan angka dalam kueri server tertaut antara SQL Server dan Oracle.