Bagaimana cara kerja pengambilan sampel saat memperbarui statistik?

10

Saya punya beberapa meja besar. Saya ingin memastikan statistik mereka terkini melalui rencana pemeliharaan mingguan.

Namun, melakukannya terlalu banyak waktu.

Jika saya tentukan

WITH SAMPLE 50 PERCENT

SQL Server kemudian sampel:

  1. 50% pertama dari halaman
  2. setiap halaman lainnya
  3. atau strategi lain?

BOL tidak jelas tentang ini.

Nik
sumber

Jawaban:

16

Untuk WITH SAMPLE 50 PERCENTitu berfungsi seolah-olah untuk setiap halaman data dalam tabel SQL Server membalik koin. Jika mendarat kepala maka itu membaca semua baris pada halaman. Jika mendarat, maka tidak ada yang dibaca.

Menelusuri UPDATE STATISTICS T WITH SAMPLE 50 PERCENTpanggilan di Profiler menunjukkan permintaan berikut dipancarkan

SELECT StatMan([SC0], [SB0000])
FROM   (SELECT TOP 100 PERCENT [SC0],
                               step_direction([SC0]) OVER (ORDER BY NULL) AS [SB0000]
        FROM   (SELECT [C] AS [SC0]
                FROM   [dbo].[T] TABLESAMPLE SYSTEM (5.000000e+001 PERCENT) 
                WITH (READUNCOMMITTED)) AS _MS_UPDSTATS_TBL_HELPER
        ORDER  BY [SC0],
                  [SB0000]) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 1) 

Dengan Plan

masukkan deskripsi gambar di sini

TABLESAMPLE SYSTEM (5.000000e+001 PERCENT)bertanggung jawab atas pengambilan sampel dan didokumentasikan di sini

TABLESAMPLE SYSTEMmengembalikan persentase perkiraan baris dan menghasilkan nilai acak untuk setiap halaman 8-KB fisik dalam tabel. Berdasarkan nilai acak untuk halaman dan persentase yang ditentukan dalam kueri, halaman dimasukkan dalam sampel atau dikecualikan. Setiap halaman yang disertakan mengembalikan semua baris dalam set hasil sampel.

Dokumentasi juga menyatakan

Meskipun rencana menunjukkan pemindaian tabel dilakukan, hanya halaman-halaman yang termasuk dalam set hasil yang benar-benar harus dibaca dari file data.

The STATMANpanggilan untuk internal agregat fungsi secara singkat dijelaskan di sini

Martin Smith
sumber