Kecepatan clock CPU versus jumlah inti CPU - GHz lebih tinggi, atau lebih banyak inti untuk SQL Server?

30

Kami mulai menyediakan satu set server fisik untuk sekelompok virtual SQL Server 2016 node dalam VMware. Kami akan menggunakan lisensi Edisi Perusahaan.

Kami berencana menyiapkan 6 node, tetapi ada sedikit perdebatan tentang apa cara ideal untuk menyediakan server fisik sehubungan dengan kecepatan jam CPU versus jumlah inti CPU.

Saya tahu ini sangat tergantung pada volume transaksi dan jumlah basis data yang disimpan di antara faktor-faktor spesifik peranti lunak lainnya, tetapi adakah aturan umum yang disarankan?

Misalnya, apakah server fisik dual 8-core, 3,2 GHz (16 core) lebih disukai daripada server dual-core 16-core, 2,6 GHz (32 core)?

Adakah yang menemukan kertas putih yang menggali lebih jauh topik jenis ini?

PicoDeGallo
sumber
Apa keprihatinan Anda, kinerja dalam abstrak atau perizinan dan efektivitas biaya?
Evan Carroll

Jawaban:

40

Aturan umum adalah menjaga jumlah inti serendah mungkin, dan kecepatan prosesor setinggi mungkin. Matematika tentang lisensi membuktikan hal itu pada ~ $ 7.500 USD per inti untuk Edisi Mahal.

Membeli perangkat keras yang benar dapat membayar sendiri dengan mengurangi biaya lisensi. Lihat Pemilihan Prosesor untuk SQL Server oleh Glenn Berry. Ini adalah sumber yang bagus tentang cara memilih prosesor untuk SQL Server.

Setelah Anda mempertimbangkan struktur lisensi per-inti SQL Server, masuk akal untuk selalu mengikuti kecepatan prosesor tercepat yang tersedia, terlepas dari jenis beban kerja, apakah OLTP atau analitik. Memiliki kecepatan inti secepat mungkin tidak akan menjadi masalah. Tambah jumlah inti sesuai kebutuhan, tetapi jangan pernah lakukan itu dengan mengurangi kecepatan inti.

Dengan kata lain, jangan menganggap prosesor 16 x 2,2 GHz sama dengan prosesor 8 x 4,5 GHz. Penghematan biaya untuk menggunakan prosesor 2.2Ghz dibandingkan dengan prosesor 4.5Ghz kemungkinan akan maksimum sekitar $ 10.000 USD (untuk mesin dua prosesor khas Xeon yang berbasis). Melompat dari 8 core ke 16 core dengan SQL Server Enterprise Edition kemungkinan akan menelan biaya lebih dari $ 60.000 USD dalam biaya lisensi. Dengan kata lain, Anda mungkin menghemat $ 10.000 dalam biaya perangkat keras, tetapi Anda akan kehilangan $ 50.000 tambahan dalam lisensi.

Jika Anda memutuskan Anda membutuhkan banyak otot pemroses paralel, dan memutuskan Anda membutuhkan 32 core untuk tugas yang ada, pergi dengan core tercepat akan membayar dividen dalam mengurangi waktu pemrosesan. Tidak ada yang akan menyalahkan Anda untuk itu.

Setelah mengatakan semua itu, jika pilihan adalah salah satu CPU atau lebih dari satu CPU, selalu pergi dengan lebih dari satu . Menjalankan SQL Server (atau DBMS apa pun) pada satu CPU dapat menyebabkan semua jenis masalah karena kemampuan operasi bersamaan sangat terbatas.

Max Vernon
sumber
11

Tunggu sebentar, tunggu sebentar

Sementara aspek kinerja dan perizinan menarik, mereka bukan satu-satunya aspek dari beban kerja yang perlu dipertimbangkan.

Satu hal yang dapat berdampak pada pilihan prosesor adalah thread pekerja.

Utusan Pekerja?

Ya sobat! Itu adalah hal-hal yang SQL Server Anda akan gunakan untuk menjalankan kueri Anda dan melakukan semua hal-hal latar belakang yang perlu dilakukan untuk menjaga keadaan.

Saat Anda kehabisan utas pekerja, Anda menekan THREADPOOL menunggu

THREADPOOL?

THREADPOOL. Ini adalah salah satu dari menunggu paling buruk yang dapat Anda miliki di server Anda, bersama dengan RESOURCE_SEMAPHORE dan RESOURCE_SEMAPHORE_QUERY_COMPILE . Tapi itu adalah memori yang menunggu, dan ini adalah pertanyaan CPU.

Jadi kembali ke mengapa ini adalah kegigihan.

Ini adalah bagaimana SQL Server menghitung utas pekerja :

GILA

Perhatikan bagaimana menggandakan jumlah inti tidak menggandakan Max Worker Threads, dan Anda mendapatkan nomor yang sama dengan 1 inti seperti yang Anda lakukan dengan 4 core? Persamaannya adalah:512 + ((logical CPUs - 4) * 16)

Itu memalukan, karena ketika jumlah inti naik, kecepatan clock biasanya menukik ke satu atau dua generasi ke belakang.

GILA

Melihat garis chip Intel baru - baru ini akan menunjukkan tren yang sama.

Bagaimana saya tahu berapa banyak utas yang saya butuhkan?

Ini akan sangat tergantung pada:

  • Jumlah Pengguna
  • Jumlah kueri paralel
  • Jumlah kueri seri
  • Jumlah basis data dan sinkronisasi data (Mirroring, AGs, backup untuk Pengiriman Log)
  • Jika Anda membiarkan MAXDOP dan CTFP pada pengaturan default

Jika Anda tidak kehabisan mereka hari ini, Anda mungkin baik-baik saja.

Tapi bagaimana kamu tahu kalau kamu?

Ada pertanyaan bagus, dan ada pertanyaan besar, dan saya akan memberi tahu Anda sesuatu, itu adalah PERTANYAAN BESAR .

THREADPOOL dapat bermanifestasi sebagai masalah koneksi , dan Anda mungkin melihat pesan di log kesalahan tentang tidak dapat menelurkan utas .

Anda juga dapat melihat statistik tunggu server Anda menggunakan alat gratis seperti sp_Blitz atau sp_BlitzFirst (pengungkapan penuh, saya berkontribusi pada proyek ini).

EXEC sp_Blitz

GILA

EXEC sp_BlitzFirst @SinceStartup = 1

GILA

Bisakah saya meningkatkan Thread Pekerja Max?

Meningkatkan MWT dapat menyebabkan peningkatan SOS_SCHEDULER_YIELDmenunggu.

Itu bukan akhir dari dunia, tetapi pikirkan itu seperti menambahkan sekelompok menjerit anak-anak ke kelas guru.

Tiba-tiba, akan lebih sulit bagi setiap anak untuk mendapatkan perhatian.

Ketika sebuah proses menghabiskan 4ms quantum-nya , akan ada lebih banyak thread di depannya yang menunggu untuk masuk ke CPU.

Kinerja mungkin terasa hampir sama.

Bagaimana saya bisa menggunakan Thread Pekerja lebih sedikit?

Anda kejam [kata benda] dari [kata benda], mereka adalah pekerja dengan keluarga yang harus didukung! Hipotek! Mimpi!

Tapi baiklah, harus menghormati intinya. Kamu bosnya.

Tempat termudah untuk memulai adalah mengubah pengaturan seperti MAXDOP dan Cost Threshold For Parallelism dari default.

Jika Anda memiliki pertanyaan tentang cara mengaturnya, silakan kunjungi di sini:

Setelah itu, pekerjaan Anda menjadi lebih sulit. Anda harus mencari tahu apa yang menggunakan semua utas itu. Anda kadang-kadang dapat melakukannya dengan melihat statistik menunggu Anda.

Lebih khusus lagi, jika Anda sudah menunggu tinggi pada paralelisme ( CXPACKET) DAN menunggu tinggi pada kunci ( LCK_), maka Anda mungkin berlari ke rantai pemblokiran panjang yang melibatkan pertanyaan paralel.

Anda tahu apa yang busuk? Sementara semua kueri paralel menunggu untuk mendapatkan kunci mereka, mereka tidak memberikan utas yang dialokasikan kembali.

Anda hampir dapat mendengar bahwa empat VM inti yang admin Anda yakini lebih dari cukup untuk setiap beban kerja yang terengah-engah, ya?

Sayangnya, jenis pencarian dan penyetelan indeks yang harus Anda lakukan untuk menyelesaikan hal-hal tersebut berada di luar cakupan pertanyaan.

Semoga ini membantu!

Erik Darling
sumber
2

Jawaban wiki komunitas :

Panjang dan pendeknya adalah: Sebagian besar beban kerja untuk SQL Server adalah OLTP yang diuntungkan dari kecepatan clock yang lebih tinggi karena ini adalah operasi serial.

Kecuali jika Anda secara khusus merancang sistem paralel masif, kecepatan clock akan selalu menang. Kasus tepi ada tetapi itulah 95% dari jawaban waktu. Fakta bahwa itu akhirnya lebih murah juga merupakan hal yang baik.

user126897
sumber
-3

Jawabannya adalah ini: tergantung kasus penggunaan Anda.

  • Apakah Anda memproses beberapa permintaan kecil sekaligus atau beberapa permintaan besar?
  • Apakah program yang Anda jalankan bahkan dioptimalkan untuk multi-core?

Sebagai contoh, saya memiliki komputer quad core tetapi kompiler ESP8266 hanya menggunakan 25% dari CPU saya karena itu hanya dirancang untuk menggunakan satu inti. Jika saya punya 1 core cepat maka itu akan lebih optimal.

Ahmad Rashed
sumber
6
Halo dan selamat datang di dba.stackexchange.com ! Jawaban Anda benar untuk kasus yang sangat umum, tetapi tidak fokus dalam kasus SQL atau basis data yang ditanyakan OP. Coba tingkatkan dengan lebih dalam hal itu! :)
xDaizu