Peringatan untuk statistik yang hilang dalam rencana eksekusi


23

Saya memiliki situasi yang tidak dapat saya mengerti. Paket eksekusi SQL Server saya memberi tahu saya bahwa saya kehilangan statistik di atas meja, tetapi statistik sudah dibuat:

Peringatan

Tetapi jika kita melihat tabel, kita akan melihat bahwa ada statistik yang telah dibuat secara otomatis:

masukkan deskripsi gambar di sini

Adakah yang bisa membantu untuk memahami bagaimana itu bisa terjadi?

Statistik Auto_Update dan Auto_Create dihidupkan pada DB saat ini.

Saya menggunakan SQL Server 2014.

Jawaban:


15

Peringatan tidak selalu sesuai dengan statistik satu kolom yang hilang .

Tidak ada cara mudah untuk secara tepat menentukan statistik yang tepat yang dicari oleh pengoptimal dan tidak menemukan dalam semua kasus, tetapi hampir selalu merupakan statistik multi-kolom yang akan memberikan beberapa informasi korelasi di beberapa predikat kesetaraan dalam kueri.

Mungkin dalam kasus Anda ini sesuai persis dengan predikat di Filter setelah pemindaian tempat peringatan muncul.

Akan lebih baik jika SQL Server melaporkan semua kolom untuk peringatan 'statistik yang hilang', tetapi sayangnya itu bukan cara kerjanya hari ini.

Sejumlah percobaan-dan-kesalahan tertentu mungkin diperlukan untuk mengidentifikasi statistik multi-kolom yang perlu Anda buat untuk menghapus peringatan. Perhatikan bahwa statistik multi-kolom tidak dapat dibuat secara otomatis. Meskipun ada peringatan, Anda mungkin atau mungkin tidak menemukan kualitas perkiraan meningkat bahkan jika statistik yang hilang disediakan.


8

Karena tampak jelas bahwa statistik sudah ada untuk kolom tertentu, saya menawarkan dua kemungkinan:

  1. Object Explorer menunjuk ke database yang berbeda - Saya curiga karena database tersebut memiliki DEVnama, jadi ada kemungkinan bahwa dalam satu kasus Anda sedang melihat dev dan di lain Anda tidak.
  2. Rencana yang digunakan adalah dari sebelum statistik dibuat (baik itu dihasilkan sebelumnya atau, kecil kemungkinannya, sesuatu mencegah kompilasi untuk dipicu ketika statistik dibuat).

Harap validasi bahwa jawaban sederhana (1) bukan masalah, dan cobalah mengeluarkan pertanyaan yang sama dengan OPTION (RECOMPILE)untuk mengonfirmasi atau mengesampingkan (2).


1
Aaron Bertnand, terima kasih banyak atas balasan Anda. Tetapi Object Explorer menunjuk ke db saat ini dan menambahkan OPSI (RECOMPILE) tidak memperbaiki masalah. Saya ingin menambahkan juga bahwa permintaan saya sedang menjalankan prosedur tersimpan.
Artashes Khachatryan

2

Saya baru saja memperhatikan bahwa ketika Anda mendapatkan peringatan tentang statistik tersebut, jika Anda menjalankan kueri atau prosedur Anda dengan pengaturan di bawah ini:

SET SHOWPLAN_ALL ON

masukkan deskripsi gambar di sini

Anda dapat melihat statistik apa yang hilang:

masukkan deskripsi gambar di sini

dan menggunakan skrip di sini, Anda dapat melihat statistik apa yang ada saat ini, dan jika hilang, Anda dapat menambahkannya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.