Saya memiliki pekerjaan yang diatur dalam SQL Server Agent untuk menjalankan permintaan pembaruan. Saya ingin pekerjaan ini dieksekusi setiap malam antara tengah malam dan jam 5 pagi dan saya ingin pekerjaan ini diulang setiap 5 menit selama jangka waktu tersebut. Tapi saya hanya ingin pekerjaan benar-benar dieksekusi jika CPU idle, yaitu utilisasi CPU di bawah katakanlah 20%. Saya tahu saya dapat mengatur jadwal, dan saya juga dapat mengatur persyaratan CPU Idle secara terpisah. Apakah ada cara bagi saya untuk mengaturnya sehingga kedua 'jadwal' harus benar agar pekerjaan dapat berjalan?
Terima kasih
sumber
Mengkonfigurasi SQL Agent melalui jendela Advanced properties untuk Kondisi CPU Idle . Anda akan menetapkan nilai "Penggunaan CPU rata-rata di bawah" menjadi 20%, dan kemudian berapa lama harus tetap pada tingkat itu sebelum pekerjaan akan berjalan.
Setelah itu konfigurasikan langkah pekerjaan untuk memeriksa waktu memastikannya ada di dalam jendela Anda, jika di dalam jendela berikan perintah pembaruan.
Sekarang persyaratan untuk setiap 5 menit mungkin tidak dapat dipenuhi dengan pengaturan ini. Saya tidak dapat menemukan apa pun pada jenis jadwal ini yang menunjukkan seberapa sering pekerjaan itu akan dieksekusi. [mis. jika Anda mengatur "dan tetap di bawah level ini" ke 30 detik untuk kondisi CPU menganggur, apakah itu menjalankan pekerjaan yang sering?] Itu akan memerlukan sedikit pengujian karena saya belum pernah menggunakan konfigurasi ini sebelumnya. Jika saya mendapat kesempatan, saya dapat mencoba untuk melihat apa yang dilakukannya dan akan memperbarui jawaban ini.
sumber
Salah satu caranya adalah memiliki tiga pekerjaan. Pekerjaan satu diatur pada jadwal yang memungkinkan pekerjaan dua di awal jendela. Pekerjaan dua diatur untuk dijalankan ketika CPU menganggur dan pekerjaan ketiga menonaktifkan pekerjaan dua di akhir jendela. Saya tidak berpikir itu satu-satunya cara untuk melakukannya, tetapi itu pasti yang paling mudah dalam pikiran saya.
sumber
Denis sangat dekat. Tetapi solusi yang sebenarnya adalah sedikit bertukar. Karena PowerShell tidak dapat memeriksa CPU selama durasi, hanya penggunaan saat ini, cek SQL Server harus digunakan.
Jadi, langkah pertama pekerjaan saya adalah menjalankan skrip PowerShell yang memeriksa untuk melihat apakah waktu sistem saat ini antara dua kendala waktu. Jika ya, maka skrip powershell tidak melakukan apa pun. Pekerjaan SQL Server mengartikan ini sebagai sukses.
Kemudian Pekerjaan bergerak ke langkah terakhir dan melakukan permintaan pembaruan.
Namun, jika waktu saat ini di luar kisaran saya melakukan
Start-Time -s 600
untuk menjeda skrip PowerShell selama 10 menit (mensimulasikan "sekali 5 - 10 menit persyaratan). Ini adalah untuk menjaga agen SQL server dari terus-menerus mencoba menjalankan pekerjaan ini .Setelah 10 menit, skrip PowerShell melempar kesalahan khusus. Karena saya miliki
$ErrorActionPreference = "Stop"
di awal skrip, skrip PowerShell berhenti dijalankan setelah kesalahan. Langkah ini sangat penting.Karena PowerShell berhenti dan tidak kembali, SQL Server Agent menafsirkan ini sebagai kegagalan dan tidak akan melanjutkan ke langkah yang melakukan permintaan pembaruan.
PS Kalian menuntun saya ke arah yang benar. Jika saya memiliki cukup reputasi, saya akan membesarkan hati kalian.
Sunting: Menambahkan Skrip Powershell
sumber