Pertanyaan tanpa Rencana Cukup Baik Ditemukan

20

Saya memiliki database SQL Server 2012. Saya perhatikan nilai Reason for early termination of statement optimizationuntuk beberapa pertanyaan dan semua memberi Good Enough Plan Found. Sekarang pertanyaan saya adalah:

  1. Apa semua jenis kemungkinan "Alasan untuk penghentian awal optimasi pernyataan". Saya memang mencari ini di msdn tetapi tidak mendapatkan daftar nilai yang lengkap.
  2. Apakah ada DMV atau acara yang diperluas untuk mendaftar semua pertanyaan yang optimasinya dihentikan karena alasan selain Rencana Cukup Baik Ditemukan? Saya merujuk dua artikel berikut yang tidak mencantumkan daftar lengkap kemungkinan. [Juga, mereka memberi saya hasil berbeda di basis data saya].

masukkan deskripsi gambar di sini

LCJ
sumber

Jawaban:

20
  • Batas Memori Melebihi

    Pengoptimal terpaksa berhenti mencari alternatif rencana yang lebih baik karena tekanan memori. Alasan untuk itu harus diselidiki dan diperbaiki, kemudian kompilasi permintaan mencoba lagi. Paket yang dikembalikan mungkin bukan yang dipilih pengoptimal jika kondisi memori rendah tidak ada.

  • Waktu habis

    Alasan ini banyak disalahpahami .

    Pengoptimal kueri bertujuan untuk menemukan paket yang masuk akal dengan cepat . Itu tidak melakukan pencarian lengkap untuk menemukan rencana terbaik. Secara desain, itu menghindari menghabiskan lebih banyak waktu pada optimasi daripada yang diperlukan. Salah satu fitur ini yang berfungsi untuk memastikan ini adalah 'batas waktu' (bukan ukuran waktu).

    Pengoptimal menetapkan sendiri 'anggaran eksplorasi' berdasarkan kompleksitas kueri logis, perkiraan kardinalitas, dan perkiraan biaya rencana termurah yang ditemukan sejauh ini (jika ada). Pertanyaan yang lebih kompleks dengan kardinalitas yang lebih tinggi diberikan anggaran yang lebih tinggi.

    Jika anggaran ini terlampaui selama salah satu fase pencariannya, fase berakhir. Ini adalah bagian dari desain dan operasi normal pengoptimal. Permintaan yang membutuhkan lebih banyak upaya pengoptimal mendapatkannya; yang tidak, jangan.

    Pikirkan 'Time Out' sebagai 'Rencana Cukup Baik Ditemukan'.

  • Rencana Cukup Baik Ditemukan

    Ini berarti persis sama dengan alasan kosong. Ini hanyalah kekhasan sejarah bahwa rencana dengan biaya di bawah 0,909090 ... (1 / 1.1) dilabeli dengan cara ini. Tidak ada yang berhenti lebih awal atau sebaliknya ditangani secara khusus atau berbeda dalam kode pengoptimal ketika alasan ini muncul.

Selain dari Batas Memori Melebihi, tidak ada 'alasan penghentian awal' yang sangat berarti (jika ada sama sekali) untuk pencarian gelombang atau analisis kinerja. Saya biasanya mengabaikan mereka.

Nasihat

Upaya penyetelan kueri target berdasarkan pada metrik kinerja nyata (waktu yang berlalu, penggunaan CPU / memori, ... apa pun yang penting dalam konteks). Jika kueri terlalu lambat untuk tujuan yang dimaksudkan, luangkan waktu untuk membuatnya lebih cepat. Ukur kinerja aktual, bandingkan dengan baseline dan sejarah, dan target upaya tuning pada varian penting.

Simpan data yang dijamin-bersih dalam skema relasional yang tepat, dengan statistik dan indeks yang bermanfaat, dan pertanyaan yang ditulis dengan baik, ramah-pengoptimal.

Paul White mengatakan GoFundMonica
sumber
10

Jika Anda pergi ke http://schemas.microsoft.com/sqlserver/2004/07/showplan/showplanxml.xsd (yang merupakan tautan yang akan Anda lihat jika Anda membuka paket eksekusi sebagai xml), Anda akan melihat tiga alasan yang tercantum, yaitu:

  • Waktu habis
  • MemoryLimitExceeded
  • GoodEnoughPlanFound

Artikel yang Anda sebutkan tampaknya tidak masalah untuk menemukan peristiwa ini, apakah Anda memiliki masalah khusus? Satu-satunya hal yang perlu diingat adalah bahwa DMV ini tidak menangkap semua perintah SQL yang pernah dijalankan di server dan mendapatkan reset ketika server restart. Anda dapat menjebak showplan xml dengan Peristiwa Diperpanjang dan kueri itu, tapi sepertinya terlalu berlebihan bagi saya.

Saya juga tidak akan terlalu khawatir tentang GoodEnoughPlanFound, sepertinya pengoptimal melakukan tugasnya (menemukan rencana yang baik dengan cepat) dengan cukup baik.

HTH

wBob
sumber