Single Core SQL Server pada VM

7

Baru-baru ini distrik sekolah kami telah meningkatkan beberapa server dari versi 2005 hingga 2016 dan dari server fisik ke server VM.

Tim infrastruktur kami menyajikan satu server VM untuk instalasi SQL Server dengan satu inti.

Saya mencoba menjelaskan kepada kepala departemen bahwa SQL Server 'benci' berada pada satu inti dan dia ingin melihat 'bukti'. Tidak satu pun dari data yang saya sajikan telah memenuhi kebutuhannya akan bukti dan jadi dia telah meminta beberapa artikel tentang mengapa VM SQL Server tidak akan beroperasi secara efisien pada satu inti.

Artikel apa yang Anda gunakan untuk ini?

Setiap bantuan bagi saya untuk membuat kasus saya akan sangat dihargai!

Deb
sumber
7
Ketika Anda melisensikan SQL pada VM, Anda tetap membayar dua paket lisensi. Anda membuang uang dengan tidak memberikannya setidaknya dua core, bahkan jika Anda mendapatkan diskon pendidikan.
Erik Darling
4
Anda bisa merujuk artikel Glenn Barry (10+ tahun Microsoft MVP) dari 2015 yang mencantumkan CPU yang direkomendasikan untuk SQL 2014, yang terkecil memiliki enam inti.
LowlyDBA
2
Juga, beberapa waktu lalu saya menulis whitepaper untuk Google tentang ukuran VM di cloud. Anda dapat menerapkannya di tempat juga.
Erik Darling
Memperluas komentar @sp_BlitzErik, lisensi inti minimum yang dapat diterapkan pada SQL Server tunggal, baik VM atau fisik, adalah 4 lisensi (lihat Panduan Lisensi ). Alternatifnya adalah melisensikan inti fisik tuan rumah. Di bawah model itu, Anda bebas menjalankan VM sebanyak mungkin dengan vCores sebanyak yang Anda pilih.
Mark Storey-Smith

Jawaban:

11

Setiap proses non-SQL Server yang mengkonsumsi CPU dapat menyebabkan seluruh SQL Server benar-benar tidak dapat digunakan.

Sebagai contoh, Pembaruan Windows akan menghentikan SQL Server saat sedang membongkar rakitan .Net.

Setiap proses Anti-Virus, bahkan jika itu dikonfigurasi untuk mengecualikan file data dan folder SQL Server dapat menyebabkan SQL Server menjadi tidak responsif saat memindai file dan saat membongkar file definisi virus yang diperbarui.

Jika Anda memiliki perangkat lunak manajemen yang diinstal, seperti IBM Tivoli Server Monitor, dan ia memutuskan untuk menggunakan 100% dari satu inti, Anda mungkin tidak akan dapat melakukan apa pun selain mematikan mesin secara dingin. Jangan tanya kenapa saya membicarakannya.

Saya bisa melanjutkan, tetapi cukup untuk mengatakan, setiap server dengan satu inti hanya meminta masalah dengan kinerja dan pengelolaan. Periksa bahwa, komputer apa pun dengan satu inti harus dianggap tidak dapat digunakan hari ini. Heck, ponsel saya memiliki 8 core.

Sementara Anda melakukannya, yakinkan pria virtualisasi untuk memberikan setiap SQL Server reservasi memori yang wajar yang akan memastikan memori SQL Server tidak keluar dari memori utama host ke disk.

Untuk Server SQL serius yang di-host oleh VMware, Anda harus mengkonfigurasi VMware menurut panduan Architecting SQL Server di VMware Best Practices .

Itu benar-benar bermuara pada satu-core VM hanya dapat menjalankan satu utas pada waktu tertentu. Virtualisasi bukanlah peluru perak untuk situasi satu-inti-per-utas itu.

Poin-poin di atas memperhitungkan bahwa Windows NT (basis kode 1993 yang digunakan untuk semua versi Windows modern) menggunakan multi-tasking preemptive. Preemptive multi-tasking memungkinkan O / S untuk menegakkan multi-tasking dengan memaksa pengalihan konteks pada jadwal reguler. Bahkan dengan preemptive multi-tasking, server dengan satu inti akan tetap menderita dari kinerja yang sangat buruk jika satu tugas memutuskan untuk menggunakan CPU sebanyak mungkin, karena O / S akan memberikan tugas itu sebanyak waktu CPU yang dapat dihemat sementara masih memungkinkan tugas dengan prioritas lebih tinggi untuk dijalankan, memaksa CPU hingga 100%. Jika SQL Server berjalan pada saat CPU mencapai 100%, kuantum CPU SQL Server akan berkurang sehingga menjadi sangat terlihat. Dalam skenario di atas saya dijelaskan, aku tidakkatakanlah, mesin (atau bahkan SQL Server) akan sepenuhnya "berhenti" atau "mati"; itu tidak benar. Namun, mesin mungkin menjadi sangat sibuk sehingga untuk semua maksud dan tujuan mesin menjadi tidak dapat digunakan. Menambahkan inti kedua, walaupun tentu saja bukan obat mujarab, mengurangi kemungkinan bahwa mesin akan menjadi benar-benar tidak responsif. Setiap inti tambahan berarti utas lain dapat berjalan ke CPU 100% tanpa menyebabkan mesin menjadi tidak dapat digunakan.

Max Vernon
sumber
Bukankah windows server memiliki (dan selalu) pre-emptive multi-tasking? Kecuali saya salah mengartikan apa yang Anda gambarkan sebagai kooperatif multi-tugas, proses menghasilkan satu sama lain ketika mereka telah melakukan tugas tingkat tinggi. Tentu pertikaian mungkin menunda respons, tetapi seharusnya tidak menghentikan semuanya. Saya setuju mutli-core adalah ide yang bagus jika bukan praktik terbaik, tetapi skenario hari kiamat yang Anda paparkan sepertinya tidak benar.
Mâtt Frëëman
Ada juga kadang-kadang alasan yang baik untuk tetap menjadi single core, jika Anda sebelumnya single core fisik dan aplikasi yang berbicara dengan instance single core Anda melanggar praktik terbaik seperti tidak menentukan urutan pengurutan, dan menganggap pemesanan secara implisit stabil tanpa adanya semacam itu. kemudian beralih ke multi-core dapat menunjukkan bug yang sebelumnya ditekan oleh sifat single core. Jika Anda tidak memiliki anggaran untuk QA kembali aplikasi ini atau sedikit kepercayaan pada devs atau mungkin mereka sudah pergi, mencocokkan server fisik yang ada dalam hal inti yang terkena kadang-kadang bisa menjadi taruhan yang aman
Mâtt Frëëman
Hai @ MâttFrëëman - Saya telah menambahkan bagian ke jawaban saya yang membahas multitasking preemptive. Anda mengingatkan saya betapa jauh lebih baik basis kode NT dibandingkan dengan multitasking berbasis DOS yang digunakan oleh basis kode Windows asli, hingga dan termasuk Windows ME.
Max Vernon
Saya setuju dengan banyak komentar Anda tentang tetap pada inti tunggal kadang-kadang menjadi kejahatan yang perlu. Jawaban saya menganggap mesin fisik yang telah divirtualisasi mungkin adalah server multi-core, berdasarkan keinginan OP untuk memiliki VM multi-core.
Max Vernon
@ MaxVernon Terima kasih, inilah yang kami butuhkan!
Deb
6

Saya harus membuktikan hal yang sama sebelumnya. Apa yang akhirnya sampai pada tim perencanaan kapasitas kami adalah bahwa basis data kami hampir tidak dapat digunakan selama pencadangan.

Sebagai DBA, ketakutan terbesar Anda adalah hilangnya data. Jika Anda tidak dapat dengan percaya diri menjalankan backup tanpa mengambil atau menyebabkan pemadaman, itu masalah besar. Jalankan beberapa tes untuk memastikan kinerja terkena dampak saat cadangan sedang terjadi, lalu jelaskan bahwa dengan lebih dari satu inti masalah harus hilang.

Neghtasro
sumber
3
Bahkan, setiap jumlah serius I / O apakah SQL Server atau non-SQL-Server terkait dapat menyebabkan masalah.
Max Vernon
3
@ MaxVernon Absolutely- Saya baru saja secara khusus membawa backup karena ini adalah masalah yang pernah saya tangani sebelumnya (jam 3 pagi, natch), mudah dibuktikan, dan "kita tidak bisa melakukan backup tanpa pemadaman!" harus cukup untuk memacu manajer infrastruktur yang masuk akal untuk menyisakan satu inti yang sangat kecil.
Neghtasro
2

Untuk memberikan bukti yang meyakinkan bahwa server Anda membutuhkan lebih dari satu CPU, Anda harus memberikan informasi tentang beban kerja dan pertanyaan yang dijalankan di server. Jika hanya memiliki satu basis data kurang dari 100 MB, misalnya, dan semua kueri sangat sederhana dan efisien, mungkin hampir tidak ada untungnya memiliki lebih banyak inti.

Saya akan merekomendasikan Anda mulai mengambil paket permintaan yang paralel dan waktu yang dibutuhkan untuk menyelesaikannya. Ini akan menunjukkan bahwa beban kerja yang berjalan pada sistem akan mendapat manfaat dari memiliki banyak CPU.

Jika sudah diproduksi di lingkungan VM, Anda juga perlu mengambil data kinerja penggunaan CPU. Jika Anda dapat menunjukkan bahwa CPU maksimal pada 100% untuk jangka waktu yang lama, ini juga akan memberikan bukti yang baik bahwa sistem membutuhkan lebih banyak CPU.

Tony Hinkle
sumber
5
Tentu saja, tidak akan ada rencana paralel pada VM inti tunggal. Anda harus menangkap rencana itu pada kotak yang memiliki lebih dari satu inti.
Max Vernon
3
Untuk menambah komentar Max, jika Anda melihat dalam paket XML di server dengan satu inti, Anda akan melihat NonParallelPlanReason="EstimatedDOPIsOne".
Erik Darling
@Tony saya sudah telah disediakan mereka beberapa data tapi diberitahu bahwa satu inti adalah praktek terbaik dengan mesin VM. karenanya saya membutuhkan bantuan!
Deb
1
@ Deb Oh my - tidak pernah mendengar praktik terbaik itu! Aku bisa mendengar trombon sedih Brent Ozar dari sini. Saya akan khawatir tentang seseorang yang membuat pernyataan seperti itu yang bertanggung jawab atas infrastruktur VM.
Tony Hinkle
@ TonyHinkle - Saya setuju. Satu VM inti tidak pernah merupakan ide yang baik, biarkan saja "praktik terbaik". Ok, mungkin 99,999% dari waktu bukannya "tidak pernah": - /
Max Vernon
2

Mungkin Anda harus bertanya kepada mereka mengapa mereka bersikeras itu akan menjadi ide yang baik untuk hanya menetapkan satu inti per SQL Server VM.

Kemudian, tergantung pada jawaban mereka, Anda dapat mencoba meyakinkan mereka berdasarkan butir 3.3.2 di tautan ini:

SqlServer-on-vmware-best-pratices

VMware merekomendasikan bahwa, untuk ukuran awal, jumlah total vCPU yang ditugaskan untuk semua VM tidak lebih dari jumlah total inti fisik

Jika item itu bukan alasan bagi tim infrastruktur untuk menyediakan hanya 1 inti per VM, maka, bisa dibilang, perangkat keras sedang terbuang.

Rogerlr
sumber
Tidak yakin bagaimana penawaran membantu kasing untuk lebih banyak CPU?
LowlyDBA
Ya, tetapi tidak begitu jelas mengapa tim infraestruture tidak memasukkan lebih banyak CPU per VM.
Rogerlr