Apakah memulai ulang SQL Server mempercepatnya?


22

Saya telah memperhatikan bahwa beberapa DBA me-restart SQL Server sangat sering, kadang-kadang bahkan setiap malam. Saya percaya mereka melakukannya untuk membebaskan memori, atau mungkin untuk mempercepat permintaan juga. Saya tahu bahwa setelah restart permintaan rencana harus dikompilasi ulang, tetapi bahkan termasuk bahwa saya bertanya-tanya apakah ada manfaat bersih untuk praktik ini.

Apakah benar me-restart SQL Server setiap hari membuatnya berjalan lebih cepat?

Jawaban:


37

Restart server mungkin adalah salah satu hal yang paling merusak kinerja. Itu berarti Anda memaksa cache dingin untuk data, cache dingin untuk rencana kueri, dan semua cache internal SQL Server juga nuked dalam proses. Belum lagi dengan membuang semua statistik yang dikumpulkan dalam statistik operasional DMV, Anda mengurangi peluang Anda untuk menyelidiki sesuatu dengan sukses.

Tidak ada panduan resmi yang mendukung praktik ini, saya belum pernah melihatnya disebutkan dalam praktik yang memiliki reputasi baik, saya tidak pernah mendengar seorang ahli terkemuka pernah menyebut ini sebagai praktik. Jangan lakukan itu.


Saya tidak setuju. SQL Server di-host di server Windows di mana patch keamanan, dan upgrade MS membutuhkan reboot berkala. Saya percaya desain SQL yang lebih baik adalah kunci untuk menyelesaikan masalah kinerja, dan tidak mengandalkan reboot server, tetapi kadang-kadang itu adalah langkah yang perlu.
Fandango68

27

Sementara jawaban lain baik, mereka melewatkan bagian penting: cache file Windows.

Pada Windows 64-bit, tidak ada batasan untuk jumlah memori yang akan digunakan Windows untuk menyimpan file. Windows dapat menguras sistem Anda benar-benar kering memori, dan pada saat itu, Anda akan mulai bertukar ke disk. Sudah didokumentasikan di beberapa tempat:

Dengan me-restart SQL Server, Anda memaksa SQL untuk menyerah memori, sehingga membiarkan Windows mendapatkan lebih banyak, dan paging berhenti sementara. SQL akan mulai lagi pada penggunaan memori mendekati nol dan secara bertahap naik, dan ketika kotak kehabisan memori lagi, restart akan membantu sementara. Dengan me-restart seluruh OS, Anda juga akan memaksa penggunaan file cache Windows.

Cara mengatasinya: hentikan menyalin file dari server Windows atau membatasi jumlah cache file yang digunakan dengan Layanan Cache File Dinamis seperti yang didokumentasikan dalam posting blog di atas.


3
+1 Menyadari masalah ini, tidak mengetahui bahwa cache bisa dibatasi menggunakan layanan cache dinamis.
Mark Storey-Smith

Apakah praktik "menyematkan" memori ke MIN dan MAX (meskipun harus dan bisa sama persis dengan jumlah KB) membantu memastikan SQL Server hanya mengkonsumsi jumlah MIN / MAX RAM yang telah ditentukan sebelumnya yang memungkinkan layanan / aplikasi Windows lainnya / permintaan jaringan untuk terus berfungsi. Ini adalah latihan saya dan telah bekerja dengan baik. Ada pemikiran lain?
SnapJag

@SnapJag - tidak harus, karena SQL tidak langsung mengkonsumsi jumlah minimum. SQL dimulai dari nol dan secara bertahap ditingkatkan berdasarkan kebutuhan.
Brent Ozar

11

Jika mempercepat kueri, sniffing parameter mungkin terlibat. Jika rencana omong kosong di-cache dan diterapkan pada panggilan berikutnya yang tidak sesuai, maka keajaiban rebooting memungkinkan rencana umum / benar untuk di-cache. Jika itu masalahnya, ada cara yang jauh lebih baik untuk memperbaiki perilaku seperti yang telah ditunjukkan oleh orang lain. Tetapi sampai mereka berhenti me-reboot kotak, tidak ada cara untuk melakukan analisis akar penyebab.


Ini seharusnya jawaban yang diterima. Desain SQL dan desain paket yang tepat, sangat penting untuk menghindari perlunya reboot server, tetapi reboot server mungkin diperlukan karena kebijakan server - seperti patch keamanan, dll.
Fandango68

11

Anda seharusnya tidak me-restart SQL Server kecuali Anda telah mengubah properti layanan atau mengatur jejak startup yang Anda ingin segera lakukan.

Sebagai @RemusRusanu telah menyatakan banyak poin, ia membersihkan banyak cache dan menyebabkan SQL Server melakukan banyak pekerjaan startup yang tidak perlu .

Sepertinya server ini bukan SQL Server / database server khusus. Ini adalah praktik terbaik untuk memiliki server basis data produksi yang hanya memiliki satu tujuan ... untuk menjadi server basis data. Dalam hal ini, Anda akan menyisihkan cukup memori dan sumber daya untuk OS dan memberikan segalanya untuk SQL Server. Ini akan membuat Anda tidak kelaparan aplikasi lain atau peran server.


2

Saya setuju dengan sentimen bahwa jika Anda melakukan semuanya dengan benar, maka Anda mungkin tidak perlu me-Reboot / Restart MSSQL Server Anda.
Bagi saya ini berlaku untuk skenario di mana semua orang kompeten dan Anda dapat memperbaiki apa pun.

Saya bukan DBA. Saya seorang Arsitek Perangkat Lunak dan bagian dari itu melibatkan pembangunan seluruh Skema Basis Data dari awal dan, sayangnya , bekerja dengan Basis Data Pihak ke-3 yang sama sekali TIDAK saya kendalikan.
Orang-orang, yang menciptakan dan memelihara salah satu dari Database Pihak ke-3 utama kami, hampir tidak membuatnya berfungsi.

Apakah saya menyebutkan saya juga bukan Pakar Keamanan atau Insinyur Jaringan?

  • Setidaknya satu Pembaruan OS Jendela Utama, Pembaruan Keamanan, Pembaruan BIOS, Paket Layanan OS / MSSQL, atau Pembaruan Kumulatif MSSQL terikat untuk keluar setiap satu atau dua bulan.
  • Menerapkan ini pada waktu yang tepat berarti me-reboot / Restart Server Anda sekitar setiap kuartal.
  • Bahkan ketika beroperasi di dalam Intranet, mengapa Anda tidak menerapkan Pembaruan Keamanan?
  • Jika saya diizinkan memiliki SSL di situs web Intranet PHI kami, saya akan melakukannya karena tidak ada jaringan yang sempurna. Saya paranoid saya kira.


Bagi saya pertanyaannya kemudian menjadi: Haruskah saya Restart SQL Server lebih sering daripada setiap 3 bulan?

Penjadwalan Menghidupkan kembali janji kinerja ekstra, seperti menari untuk hujan.
Mungkin itu akan datang, mungkin tidak, tetapi Anda tidak akan tahu pasti apa yang menyebabkan hujan.

  • Jika Anda melihat tonjolan kinerja yang signifikan setelah me-reboot server karena pemeliharaan rutin, maka Anda harus menyelidiki mengapa itu terjadi.
  • Jika Anda mengalami masalah, dan tidak yakin apa penyebabnya, maka saat Anda mengurangi variabel dengan menghentikan layanan dan pekerjaan untuk menemukan sesuatu seperti kebocoran memori (dalam kasus-kasus ekstrem seperti ini) mungkin me-reboot / memulai ulang server Anda dengan beberapa layanan berubah off (atau jejak dihidupkan) akan membantu Anda mengesampingkan layanan lain tersebut sebagai penyebabnya.

Saya tidak suka mengatakan Anda tidak pernah perlu Restart untuk memecahkan masalah atau memverifikasi failover, tapi saya lakukan memiliki masalah dengan Restart penjadwalan untuk menjaga masalah kinerja yang tidak diketahui dari acak terjadi.

Satu- satunya pengecualian untuk hal ini adalah jika Anda mengelola Basis Data Pihak Ketiga yang nakal tempat me-reboot-nya setiap minggu atau dua tampaknya menjadi satu-satunya cara untuk membuatnya beroperasi dan Anda tidak diizinkan untuk memperbaikinya atau bahkan menyentuhnya.
Bahkan saat itu, Anda harus mencari perbaikan, membaginya dengan pemilik, dan membangkitkan neraka sampai selesai.

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.