Pemanfaatan CPU sangat tidak merata dengan SQL Server 2012 pada 2 komputer prosesor dengan 16 core / prosesor

8

Setelah menginstal SQL Server Enterprise 2012 dengan model lisensi Server + Cal, pada komputer dengan 2 prosesor masing-masing dengan 16 core (dan tidak ada hyperthreading terlibat) dan menempatkan server di bawah beban yang sangat berat 16 core pada prosesor pertama sangat kurang dimanfaatkan, 4 core pertama pada CPU ke-2 banyak digunakan, dan 12 core terakhir tidak digunakan sama sekali (karena batas 20 inti untuk versi server sql ini). Total utilisasi CPU ditampilkan sekitar 25%. Sayangnya, server menderita dari kinerja yang sangat buruk meskipun jika tugas-tugas didistribusikan secara merata di 20 core itu tidak akan berada di dekat yang buruk.

Windows Server berjalan pada image virtual VMWare di bawah ESX Server, tetapi semua CPU dialokasikan ke server windows.

Kami mencoba mengubah pengaturan afinitas (mis., Mengalokasikan sebagian besar core ke CPU dan yang lainnya untuk I / O), tetapi itu tidak membantu menyelesaikan masalah kinerja.

Memutakhirkan edisi produk ke SQL Server Enterprise Core 2012 tidak hanya memungkinkan SQL Server untuk menggunakan 12 core yang sebelumnya tidak digunakan pada prosesor ke-2, tetapi juga menghasilkan distribusi tugas yang jauh lebih merata di semua prosesor. Untuk melewati simpanan permintaan, pemanfaatan cpU melonjak menjadi sekitar 90%, dan kemudian turun menjadi sekitar 33% begitu berhasil, tetapi kinerja meningkat secara dramatis karena kami gagal ke versi yang baru diperbarui Dan masalah kinerja hilang.

Saya bertanya-tanya apakah ada yang tahu apa yang mungkin menyebabkan SQL Server mendistribusikan beban secara tidak merata, mengandalkan hampir secara eksklusif pada 4 core pertama dari prosesor 2 yang memiliki 12 core idle, dan mengalokasikan hanya beberapa tugas untuk masing-masing 16 core pada yang pertama prosesor Juga, apakah ada cara agar kita dapat mendistribusikan beban secara lebih merata di 20 inti yang digunakan tanpa peningkatan edisi produk?

Sisi lain dari pertanyaan itu adalah apa yang dilakukan peningkatan produk yang menyebabkan SQL Server mulai mendistribusikan beban secara merata di seluruh inti yang dikenali?

Terima kasih atas wawasan apa pun untuk menjawab pertanyaan dan / atau tautan ini yang mungkin membantu saya lebih memahami bagaimana memahami apa yang terjadi.

cooplarsh
sumber
Apakah Anda mengatakan bahwa mesin yang dimaksud adalah VM dengan 32 vCPU? Dalam kedua skenario?
mfinni
Ya, itu adalah mesin yang sama yang memiliki 2 prosesor, masing-masing dengan 16 core (dan tidak ada hyperthreading yang terlibat).
cooplarsh
1
Mengapa atas nama TUHAN Anda memiliki 32 vCPU? Sudahkah Anda mencoba mengurangi itu? Saya tahu bahwa ESXi telah meningkatkan penjadwalan geng CPU, tetapi Anda hanya meminta masalah dengan itu banyak. Versi ESXi apa yang Anda pakai dan apa perangkat keras yang mendasarinya?
mfinni

Jawaban:

4

Kinerja yang tidak merata kemungkinan merupakan kombinasi dari batas 20-core yang dikombinasikan dengan cara sql server menjadwalkan utas pada mesin NUMA. Sayangnya, SQL Server 2012 tidak menggunakan intelijen apa pun dalam memutuskan 20 core yang akan digunakan, sehingga jumlah core yang tidak seimbang per NUMA node. Dengan 32 core yang tersebar di 2 NUMA Nodes, Anda mungkin akan berakhir dengan split 16/4. Ini bermasalah karena SQL akan mencoba untuk menyeimbangkan aktivitas secara merata di seluruh NUMA node dalam mode round-robin (dengan asumsi bahwa Anda tidak memaksa afinitas dengan gubernur sumber daya).

Dalam kasus Anda, 1/2 beban ditetapkan ke 4 core, dan 1/2 hingga 16 core. Kemacetan pada simpul 4-inti secara efektif bertindak sebagai throttle, membatasi kapasitas mesin hingga 2x4 core = 8 core = 25% penggunaan CPU.

Setelah Anda memutakhirkan ke edisi inti, kemudian sql memanfaatkan semua 32 core di 2 node numa (split 16/16). Performa meningkat, dll.

Salah satu opsi yang dapat meningkatkan kinerja Anda adalah dengan menggunakan gubernur sumber daya server sql untuk menyatukan sebagian besar beban kerja Anda ke satu simpul numa. Misalnya, Anda bisa membuat kumpulan sumber daya WEB_APP, dan mengafinasinya hanya berjalan pada 16 inti numa node. Beban yang ditetapkan ke kumpulan WEB_APP dapat memanfaatkan 50% dari kapasitas server, ditambah sisa kapasitas 12,5% dari node 4-core.

Pilihan lain adalah membatasi core yang tersedia untuk sql server hanya menjadi 10 dari setiap node numa.

StrayCatDBA
sumber