Mengapa mengatur Statistik Pembaruan Otomatis ke Salah?


10

Saya baru saja mewarisi sekitar 20 contoh SQL Server, sebagai bagian dari proyek akuisisi yang lebih luas. Saya sedang dalam proses menilai kinerja dan saya tidak suka cara rencana pemeliharaan dilaksanakan.

Saya melihat indeks selimut harian dibangun kembali (saya bisa menangani yang satu ini) dan juga memperbarui statistik harian.

Sekitar setengah dari basis data telah diatur ke Statistik Pembaruan Otomatis = Salah, untuk alasan yang tidak jelas selain yang saya katakan adalah untuk mengurangi 'Masalah Kinerja' ...

Saya selalu berpikir, dan berusaha, praktik terbaik mengatur ini ke True dan merasa Pembaruan Manual tidak diperlukan jika pengaturan ini Benar. Apakah aku salah?

Adakah yang bisa menjelaskan apa manfaatnya jika menetapkan ini sebagai Salah, tetapi melakukan pembaruan manual setiap hari sebagai gantinya?

Saya harus menyebutkan bahwa beberapa basis data sangat transaksional (jutaan Sisipan, Penghapusan, Pembaruan per hari) Lainnya rendah dalam hal tingkat transaksi, dan beberapa hanya baca-saja. Tidak ada sajak atau alasan meskipun yang memiliki pengaturan Pembaruan Otomatis diatur ke Salah. Tampaknya lotere.

Jawaban:


6

Anda benar, saya juga percaya bahwa dalam kebanyakan kasus Auto Update statisticsharus disetel ke benar, kita harus mengizinkan SQL Server untuk memutuskan kapan harus memperbarui statistik dan percaya saya itu melakukan pekerjaan dengan baik. Ketika ini disetel ke true, pastikan statistik diperbarui tentang distribusi data di bidang yang pada akhirnya akan membantu pengoptimal untuk menyiapkan rencana yang lebih baik. Yang penting untuk dicatat di sini adalah pembaruan otomatis statistik menyala ketika 20% dari perubahan data dalam tabel. Jadi Anda seharusnya tidak merasa bahwa di atas meja dengan 100 ribu baris jika 10 baris diperbarui maka pembaruan status akan diaktifkan.

Analisis yang lebih mendalam dilakukan oleh Paul Randal di blog Memahami When Statistics Will Automatic Update . Saya belum melihat adanya kekurangan jika opsi ini disetel ke true. Ya, Anda dapat melihat beberapa aktivitas I / O ketika opsi ini disetel ke true.

Kesimpulan penting yang bisa diambil dari blog adalah

Sekalipun suatu statistik menjadi ketinggalan zaman sebagai hasil modifikasi, statistik tidak akan secara otomatis diperbarui setelah modifikasi selesai. Statistik akan secara otomatis memperbarui saat berikutnya rencana kueri menggunakannya.

Untuk kasus-kasus di mana Anda baru saja membaca hanya database atau database di mana Anda hanya melakukan operasi pilih dan tidak ada operasi DML, dalam hal ini Anda dapat menyimpan opsi ke false tetapi sekali lagi tidak ada salahnya akan datang jika Anda tetap benar. Kami sebagian besar melihat database dengan jumlah aktivitas tertentu.


10

Ini terlalu lama untuk dikomentari jadi saya akan membahas kasus lain di mana orang mungkin ingin mematikan statistik pembaruan otomatis. Saya telah bekerja dengan database yang mendukung beban kerja OLTP volume tinggi dan SLA kinerja kueri yang ketat dalam milidetik. Hampir semua kueri sepele dengan banyak perhatian pada kueri dan penyetelan indeks dan beberapa tabel cukup besar. Tidak ada banyak nilai dalam memperbarui statistik selama periode puncak dalam situasi ini dan statistik pembaruan otomatis akan melanggar SLA. Akibatnya, pemeliharaan dilakukan selama periode non-puncak melalui pekerjaan yang dijadwalkan.

Opsi lain adalah mengaktifkan opsi keduanya AUTO_UPDATE_STATISTICSdan AUTO_UPDATE_STATISTICS_ASYNCbasis data. Ini akan memungkinkan pertanyaan untuk melanjutkan dengan rencana eksekusi berdasarkan statistik basi daripada mengeluarkan biaya tambahan memperbarui statistik secara bersamaan. Ini terutama sesuai untuk beban kerja OLTP selama server berukuran untuk mengakomodasi beban kerja kueri ditambah pembaruan statistik latar belakang.


Saya mencoba untuk memikirkan contoh di mana auto_update_stats akan benar-benar menyebabkan masalah dan ini adalah yang hebat - saya akan memperbaikinya dua kali (jika saya bisa) untuk penyelesaian yang sangat baik juga, menghindari penundaan statistik normal yang akan menyertai permintaan
SqlRyan

1
Saya mengalami situasi dengan basis data yang lebih besar (VLDB), bahwa opsi statistik auto_update AKTIF dan SQL akan dimulai pada waktu yang tidak tepat pada hari kerja. Saya mematikannya dan harus lebih strategis tentang pembaruan manual ke tabel dan statistik tertentu, daripada membiarkan server menentukan tabel dan kapan. Ini membuat sistem saya lebih dapat diprediksi, tetapi dengan biaya manajemen yang lebih tinggi (tidak diragukan), tetapi perlu terjadi untuk menghindari tugas pembaruan yang mengganggu. Jika "menyelimuti" sistem dengan manajemen indeks / statistik tipikal adalah pilihan Anda, biarkan saja. Jika tidak, beberapa situasi mungkin memerlukan strategi terperinci.
SnapJag

6

Secara umum saya akan mengatakan bahwa memiliki statistik pembaruan otomatis pada bermanfaat. Tetapi seperti pengaturan apa pun, ada alasan Anda dapat mengaktifkan atau menonaktifkannya.

Pertama, beberapa tabel memiliki banyak churn, dan mungkin kueri tidak terlalu sensitif terhadap statistik yang akurat. Pikirkan ETL atau skenario massal lainnya di mana Anda mengubah banyak data, tetapi tidak membacanya dari sana, atau tidak terlalu membacanya. Tidak ada gunanya memiliki pembaruan statistik otomatis yang masuk dan menyebabkan banyak I / O memberikan statistik yang lebih akurat yang tidak akan pernah digunakan.

Anda juga mungkin memiliki skenario di mana Anda memperbarui data beberapa kali sepanjang hari, tetapi tidak selalu ingin memperbarui statistik setelah setiap pembaruan. (Katakanlah data hanya ditanyai selama jam-jam tertentu dalam sehari - tidak perlu memperbarui statistik beberapa kali ketika data tidak akan ditanya untuk sementara waktu.)

Atau mungkin Anda hanya memiliki beban kerja tulis-berat. Atau bacaan umumnya scan penuh, di mana statistik tidak terlalu penting.

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.